2 * Copyright (C) 2013 nu774
3 * For conditions of distribution and use, see copyright notice in COPYING
16 #include "pcm_reader.h"
17 #include "m4af_endian.h"
19 int pcm_read(pcm_io_context_t
*io
, void *buffer
, uint32_t size
)
25 rc
= io
->vtbl
->read(io
->cookie
, buffer
, size
- count
);
28 } while (rc
> 0 && count
< size
);
29 return count
> 0 ? count
: rc
;
32 int pcm_skip(pcm_io_context_t
*io
, int64_t count
)
36 pcm_io_vtbl_t
*vp
= io
->vtbl
;
38 if (count
== 0 || pcm_seek(io
, count
, SEEK_CUR
) >= 0)
41 if ((rc
= vp
->read(io
->cookie
, buff
, count
> 8192 ? 8192 : count
)) > 0)
43 } while (rc
> 0 && count
> 0);
45 return count
== 0 ? 0 : -1;
48 int pcm_read16le(pcm_io_context_t
*io
, uint16_t *value
)
50 if (pcm_read(io
, value
, 2) == 2) {
51 *value
= m4af_ltoh16(*value
);
57 int pcm_read16be(pcm_io_context_t
*io
, uint16_t *value
)
59 if (pcm_read(io
, value
, 2) == 2) {
60 *value
= m4af_btoh16(*value
);
66 int pcm_read32le(pcm_io_context_t
*io
, uint32_t *value
)
68 if (pcm_read(io
, value
, 4) == 4) {
69 *value
= m4af_ltoh32(*value
);
75 int pcm_read32be(pcm_io_context_t
*io
, uint32_t *value
)
77 if (pcm_read(io
, value
, 4) == 4) {
78 *value
= m4af_btoh32(*value
);
84 int pcm_read64le(pcm_io_context_t
*io
, uint64_t *value
)
86 if (pcm_read(io
, value
, 8) == 8) {
87 *value
= m4af_ltoh64(*value
);
93 int pcm_read64be(pcm_io_context_t
*io
, uint64_t *value
)
95 if (pcm_read(io
, value
, 8) == 8) {
96 *value
= m4af_btoh64(*value
);
102 int pcm_scanl(pcm_io_context_t
*io
, const char *fmt
, ...)
108 while ((c
= *fmt
++)) {
111 TRY_IO(pcm_read16le(io
, va_arg(ap
, uint16_t*)));
115 TRY_IO(pcm_read32le(io
, va_arg(ap
, uint32_t*)));
119 TRY_IO(pcm_read64le(io
, va_arg(ap
, uint64_t*)));
129 int pcm_scanb(pcm_io_context_t
*io
, const char *fmt
, ...)
135 while ((c
= *fmt
++)) {
138 TRY_IO(pcm_read16be(io
, va_arg(ap
, uint16_t*)));
142 TRY_IO(pcm_read32be(io
, va_arg(ap
, uint32_t*)));
146 TRY_IO(pcm_read64be(io
, va_arg(ap
, uint64_t*)));
This page took 0.026516 seconds and 4 git commands to generate.