48 if (!(
s->extra_samples =
av_malloc(8 * 3 * 4)))
66 static const uint32_t frequencies[4] = { 48000, 96000, 44100, 32000 };
71 if (
s->last_header == header_int)
85 s->extra_sample_count = 0;
91 "PCM DVD unsupported sample depth %i\n",
113 s->samples_per_block = 1;
122 s->samples_per_block = 4 / avctx->
channels;
123 s->groups_per_block = 1;
128 s->samples_per_block = 1;
129 s->groups_per_block = 2;
135 s->samples_per_block = 4;
143 "pcm_dvd_parse_header: %d channels, %d bits per sample, %d Hz, %"PRId64
" bit/s\n",
147 s->last_header = header_int;
153 void *dst,
int blocks)
156 int16_t *dst16 = dst;
167 dst16 += blocks *
s->block_size / 2;
171 *dst16++ = bytestream2_get_be16u(&gb);
179 for (
i = 2;
i;
i--) {
180 dst32[0] = bytestream2_get_be16u(&gb) << 16;
181 dst32[1] = bytestream2_get_be16u(&gb) << 16;
182 t = bytestream2_get_byteu(&gb);
183 *dst32++ += (t & 0xf0) << 8;
184 *dst32++ += (t & 0x0f) << 12;
189 for (
i =
s->groups_per_block;
i;
i--) {
190 dst32[0] = bytestream2_get_be16u(&gb) << 16;
191 dst32[1] = bytestream2_get_be16u(&gb) << 16;
192 dst32[2] = bytestream2_get_be16u(&gb) << 16;
193 dst32[3] = bytestream2_get_be16u(&gb) << 16;
194 t = bytestream2_get_byteu(&gb);
195 *dst32++ += (t & 0xf0) << 8;
196 *dst32++ += (t & 0x0f) << 12;
197 t = bytestream2_get_byteu(&gb);
198 *dst32++ += (t & 0xf0) << 8;
199 *dst32++ += (t & 0x0f) << 12;
207 for (
i = 2;
i;
i--) {
208 dst32[0] = bytestream2_get_be16u(&gb) << 16;
209 dst32[1] = bytestream2_get_be16u(&gb) << 16;
210 *dst32++ += bytestream2_get_byteu(&gb) << 8;
211 *dst32++ += bytestream2_get_byteu(&gb) << 8;
216 for (
i =
s->groups_per_block;
i;
i--) {
217 dst32[0] = bytestream2_get_be16u(&gb) << 16;
218 dst32[1] = bytestream2_get_be16u(&gb) << 16;
219 dst32[2] = bytestream2_get_be16u(&gb) << 16;
220 dst32[3] = bytestream2_get_be16u(&gb) << 16;
221 *dst32++ += bytestream2_get_byteu(&gb) << 8;
222 *dst32++ += bytestream2_get_byteu(&gb) << 8;
223 *dst32++ += bytestream2_get_byteu(&gb) << 8;
224 *dst32++ += bytestream2_get_byteu(&gb) << 8;
235 int *got_frame_ptr,
AVPacket *avpkt)
239 int buf_size = avpkt->
size;
252 if (
s->last_block_size &&
s->last_block_size !=
s->block_size) {
254 s->extra_sample_count = 0;
256 s->last_block_size =
s->block_size;
260 blocks = (buf_size +
s->extra_sample_count) /
s->block_size;
263 frame->nb_samples = blocks *
s->samples_per_block;
266 dst =
frame->data[0];
269 if (
s->extra_sample_count) {
270 int missing_samples =
s->block_size -
s->extra_sample_count;
271 if (buf_size >= missing_samples) {
272 memcpy(
s->extra_samples +
s->extra_sample_count,
src,
275 src += missing_samples;
276 buf_size -= missing_samples;
277 s->extra_sample_count = 0;
281 memcpy(
s->extra_samples +
s->extra_sample_count,
src, buf_size);
282 s->extra_sample_count += buf_size;
290 buf_size -= blocks *
s->block_size;
295 src += blocks *
s->block_size;
296 memcpy(
s->extra_samples,
src, buf_size);
297 s->extra_sample_count = buf_size;