# HG changeset patch # User romansh # Date 1219161763 0 # Node ID 685ef77c9fe514fc5c430a15d52011486bcfd214 # Parent 290fd3ae121956ad32480a926106064f95b1bbca Making block size in bits variable and dependent on the DV spec diff -r 290fd3ae1219 -r 685ef77c9fe5 dv.c --- a/dv.c Tue Aug 19 16:01:41 2008 +0000 +++ b/dv.c Tue Aug 19 16:02:43 2008 +0000 @@ -253,10 +253,6 @@ int shift_offset; } BlockInfo; -/* block size in bits */ -static const uint16_t block_sizes[6] = { - 112, 112, 112, 112, 80, 80 -}; /* bit budget for AC only in 5 MBs */ static const int vs_total_ac_bits = (100 * 4 + 68*2) * 5; /* see dv_88_areas and dv_248_areas for details */ @@ -384,7 +380,7 @@ mb = mb1; block = block1; for(j = 0;j < s->sys->bpm; j++) { - last_index = block_sizes[j]; + last_index = s->sys->block_sizes[j]; init_get_bits(&gb, buf_ptr, last_index); /* get the dc */ @@ -911,7 +907,7 @@ enc_blk->dct_mode ? dv_weight_248 : dv_weight_88, j/4); - init_put_bits(pb, ptr, block_sizes[j]/8); + init_put_bits(pb, ptr, s->sys->block_sizes[j]/8); put_bits(pb, 9, (uint16_t)(((enc_blk->mb[0] >> 3) - 1024 + 2) >> 2)); put_bits(pb, 1, enc_blk->dct_mode); put_bits(pb, 2, enc_blk->cno); @@ -920,7 +916,7 @@ enc_blk->bit_size[2] + enc_blk->bit_size[3]; ++enc_blk; ++pb; - ptr += block_sizes[j]/8; + ptr += s->sys->block_sizes[j]/8; } } diff -r 290fd3ae1219 -r 685ef77c9fe5 dvdata.h --- a/dvdata.h Tue Aug 19 16:01:41 2008 +0000 +++ b/dvdata.h Tue Aug 19 16:02:43 2008 +0000 @@ -50,6 +50,7 @@ const uint16_t *video_place; /* positions of all DV macro blocks */ enum PixelFormat pix_fmt; /* picture pixel format */ int bpm; /* blocks per macroblock */ + const uint8_t *block_sizes; /* AC block sizes, in bits */ int audio_stride; /* size of audio_shuffle table */ int audio_min_samples[3];/* min ammount of audio samples */ /* for 48Khz, 44.1Khz and 32Khz */ @@ -2521,6 +2522,15 @@ 48000, 44100, 32000, }; +/* macroblock bit budgets */ +static const uint8_t block_sizes_dv2550[8] = { + 112, 112, 112, 112, 80, 80, 0, 0, +}; + +static const uint8_t block_sizes_dv100[8] = { + 80, 80, 80, 80, 80, 80, 64, 64, +}; + static const DVprofile dv_profiles[] = { { .dsf = 0, .frame_size = 120000, /* IEC 61834, SMPTE-314M - 525/60 (NTSC) */ @@ -2535,6 +2545,7 @@ .video_place = dv_place_411, .pix_fmt = PIX_FMT_YUV411P, .bpm = 6, + .block_sizes = block_sizes_dv2550, .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 */ @@ -2553,6 +2564,7 @@ .video_place = dv_place_420, .pix_fmt = PIX_FMT_YUV420P, .bpm = 6, + .block_sizes = block_sizes_dv2550, .audio_stride = 108, .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32Khz */ .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 }, @@ -2571,6 +2583,7 @@ .video_place = dv_place_411P, .pix_fmt = PIX_FMT_YUV411P, .bpm = 6, + .block_sizes = block_sizes_dv2550, .audio_stride = 108, .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32Khz */ .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 }, @@ -2589,6 +2602,7 @@ .video_place = dv_place_422_525, .pix_fmt = PIX_FMT_YUV422P, .bpm = 6, + .block_sizes = block_sizes_dv2550, .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 */ @@ -2607,6 +2621,7 @@ .video_place = dv_place_422_625, .pix_fmt = PIX_FMT_YUV422P, .bpm = 6, + .block_sizes = block_sizes_dv2550, .audio_stride = 108, .audio_min_samples = { 1896, 1742, 1264 }, /* for 48, 44.1 and 32Khz */ .audio_samples_dist = { 1920, 1920, 1920, 1920, 1920 },