Mercurial > libavcodec.hg
changeset 7615:290fd3ae1219 libavcodec
Making the number of blocks per macroblock dependent on the DV stream
specification
author | romansh |
---|---|
date | Tue, 19 Aug 2008 16:01:41 +0000 |
parents | 1afa1171b7b2 |
children | 685ef77c9fe5 |
files | dv.c dvdata.h |
diffstat | 2 files changed, 11 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/dv.c Tue Aug 19 16:00:26 2008 +0000 +++ b/dv.c Tue Aug 19 16:01:41 2008 +0000 @@ -376,14 +376,14 @@ block1 = &sblock[0][0]; mb1 = mb_data; init_put_bits(&vs_pb, vs_bit_buffer, 5 * 80); - for(mb_index = 0; mb_index < 5; mb_index++, mb1 += 6, block1 += 6 * 64) { + for(mb_index = 0; mb_index < 5; mb_index++, mb1 += s->sys->bpm, block1 += s->sys->bpm * 64) { /* skip header */ quant = buf_ptr[3] & 0x0f; buf_ptr += 4; init_put_bits(&pb, mb_bit_buffer, 80); mb = mb1; block = block1; - for(j = 0;j < 6; j++) { + for(j = 0;j < s->sys->bpm; j++) { last_index = block_sizes[j]; init_get_bits(&gb, buf_ptr, last_index); @@ -426,7 +426,7 @@ mb = mb1; init_get_bits(&gb, mb_bit_buffer, put_bits_count(&pb)); flush_put_bits(&pb); - for(j = 0;j < 6; j++, block += 64, mb++) { + for(j = 0;j < s->sys->bpm; j++, block += 64, mb++) { if (mb->pos < 64 && get_bits_left(&gb) > 0) { dv_decode_ac(&gb, mb, block); /* if still not finished, no need to parse other blocks */ @@ -436,7 +436,7 @@ } /* all blocks are finished, so the extra bytes can be used at the video segment level */ - if (j >= 6) + if (j >= s->sys->bpm) bit_copy(&vs_pb, &gb); } @@ -449,7 +449,7 @@ init_get_bits(&gb, vs_bit_buffer, put_bits_count(&vs_pb)); flush_put_bits(&vs_pb); for(mb_index = 0; mb_index < 5; mb_index++) { - for(j = 0;j < 6; j++) { + for(j = 0;j < s->sys->bpm; j++) { if (mb->pos < 64) { #ifdef VLC_DEBUG printf("start %d:%d\n", mb_index, j);
--- a/dvdata.h Tue Aug 19 16:00:26 2008 +0000 +++ b/dvdata.h Tue Aug 19 16:01:41 2008 +0000 @@ -49,7 +49,7 @@ AVRational sar[2]; /* sample aspect ratios for 4:3 and 16:9 */ const uint16_t *video_place; /* positions of all DV macro blocks */ enum PixelFormat pix_fmt; /* picture pixel format */ - + int bpm; /* blocks per macroblock */ int audio_stride; /* size of audio_shuffle table */ int audio_min_samples[3];/* min ammount of audio samples */ /* for 48Khz, 44.1Khz and 32Khz */ @@ -2534,6 +2534,7 @@ .sar = {{10, 11}, {40, 33}}, .video_place = dv_place_411, .pix_fmt = PIX_FMT_YUV411P, + .bpm = 6, .audio_stride = 90, .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32Khz */ .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 }, /* per SMPTE-314M */ @@ -2551,6 +2552,7 @@ .sar = {{59, 54}, {118, 81}}, .video_place = dv_place_420, .pix_fmt = PIX_FMT_YUV420P, + .bpm = 6, .audio_stride = 108, .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32Khz */ .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 }, @@ -2568,6 +2570,7 @@ .sar = {{59, 54}, {118, 81}}, .video_place = dv_place_411P, .pix_fmt = PIX_FMT_YUV411P, + .bpm = 6, .audio_stride = 108, .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32Khz */ .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 }, @@ -2585,6 +2588,7 @@ .sar = {{10, 11}, {40, 33}}, .video_place = dv_place_422_525, .pix_fmt = PIX_FMT_YUV422P, + .bpm = 6, .audio_stride = 90, .audio_min_samples = { 1580, 1452, 1053 }, /* for 48, 44.1 and 32Khz */ .audio_samples_dist = { 1600, 1602, 1602, 1602, 1602 }, /* per SMPTE-314M */ @@ -2602,6 +2606,7 @@ .sar = {{59, 54}, {118, 81}}, .video_place = dv_place_422_625, .pix_fmt = PIX_FMT_YUV422P, + .bpm = 6, .audio_stride = 108, .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32Khz */ .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },