Making block size in bits variable and dependent on the DV spec
Originally committed as revision 14842 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							parent
							
								
									713c1aa9a6
								
							
						
					
					
						commit
						c89cb5894e
					
				@ -253,10 +253,6 @@ typedef struct BlockInfo {
 | 
			
		||||
    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 @@ static inline void dv_decode_video_segment(DVVideoContext *s,
 | 
			
		||||
        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 @@ static inline void dv_encode_video_segment(DVVideoContext *s,
 | 
			
		||||
                                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 @@ static inline void dv_encode_video_segment(DVVideoContext *s,
 | 
			
		||||
                           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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -50,6 +50,7 @@ typedef struct DVprofile {
 | 
			
		||||
    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 @@ static const av_unused int dv_audio_frequency[3] = {
 | 
			
		||||
    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 @@ static const DVprofile dv_profiles[] = {
 | 
			
		||||
      .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 @@ static const DVprofile dv_profiles[] = {
 | 
			
		||||
      .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 @@ static const DVprofile dv_profiles[] = {
 | 
			
		||||
      .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 @@ static const DVprofile dv_profiles[] = {
 | 
			
		||||
      .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 @@ static const DVprofile dv_profiles[] = {
 | 
			
		||||
      .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 },
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user