Add offset argument to encode_422_bitstream() to control where
in the source data array to start encoding. Change all calls to pass zero for this new argument for equivalent behavior. This is a restructure to support a forthcoming bug fix. Originally committed as revision 18918 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		
							parent
							
								
									548a99742c
								
							
						
					
					
						commit
						aa5cfdfb4f
					
				@ -746,8 +746,11 @@ static void decode_gray_bitstream(HYuvContext *s, int count){
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if CONFIG_HUFFYUV_ENCODER || CONFIG_FFVHUFF_ENCODER
 | 
			
		||||
static int encode_422_bitstream(HYuvContext *s, int count){
 | 
			
		||||
static int encode_422_bitstream(HYuvContext *s, int offset, int count){
 | 
			
		||||
    int i;
 | 
			
		||||
    const uint8_t *y = s->temp[0] + offset;
 | 
			
		||||
    const uint8_t *u = s->temp[1] + offset/2;
 | 
			
		||||
    const uint8_t *v = s->temp[2] + offset/2;
 | 
			
		||||
 | 
			
		||||
    if(s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < 2*4*count){
 | 
			
		||||
        av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n");
 | 
			
		||||
@ -755,10 +758,10 @@ static int encode_422_bitstream(HYuvContext *s, int count){
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#define LOAD4\
 | 
			
		||||
            int y0 = s->temp[0][2*i];\
 | 
			
		||||
            int y1 = s->temp[0][2*i+1];\
 | 
			
		||||
            int u0 = s->temp[1][i];\
 | 
			
		||||
            int v0 = s->temp[2][i];
 | 
			
		||||
            int y0 = y[2*i];\
 | 
			
		||||
            int y1 = y[2*i+1];\
 | 
			
		||||
            int u0 = u[i];\
 | 
			
		||||
            int v0 = v[i];
 | 
			
		||||
 | 
			
		||||
    count/=2;
 | 
			
		||||
    if(s->flags&CODEC_FLAG_PASS1){
 | 
			
		||||
@ -1258,7 +1261,7 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
 | 
			
		||||
        leftu= sub_left_prediction(s, s->temp[1], p->data[1]+1, width2-1, leftu);
 | 
			
		||||
        leftv= sub_left_prediction(s, s->temp[2], p->data[2]+1, width2-1, leftv);
 | 
			
		||||
 | 
			
		||||
        encode_422_bitstream(s, width-2);
 | 
			
		||||
        encode_422_bitstream(s, 0, width-2);
 | 
			
		||||
 | 
			
		||||
        if(s->predictor==MEDIAN){
 | 
			
		||||
            int lefttopy, lefttopu, lefttopv;
 | 
			
		||||
@ -1268,7 +1271,7 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
 | 
			
		||||
                leftu= sub_left_prediction(s, s->temp[1], p->data[1]+p->linesize[1], width2, leftu);
 | 
			
		||||
                leftv= sub_left_prediction(s, s->temp[2], p->data[2]+p->linesize[2], width2, leftv);
 | 
			
		||||
 | 
			
		||||
                encode_422_bitstream(s, width);
 | 
			
		||||
                encode_422_bitstream(s, 0, width);
 | 
			
		||||
                y++; cy++;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -1276,7 +1279,7 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
 | 
			
		||||
            leftu= sub_left_prediction(s, s->temp[1], p->data[1]+fake_ustride, 2, leftu);
 | 
			
		||||
            leftv= sub_left_prediction(s, s->temp[2], p->data[2]+fake_vstride, 2, leftv);
 | 
			
		||||
 | 
			
		||||
            encode_422_bitstream(s, 4);
 | 
			
		||||
            encode_422_bitstream(s, 0, 4);
 | 
			
		||||
 | 
			
		||||
            lefttopy= p->data[0][3];
 | 
			
		||||
            lefttopu= p->data[1][1];
 | 
			
		||||
@ -1284,7 +1287,7 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
 | 
			
		||||
            s->dsp.sub_hfyu_median_prediction(s->temp[0], p->data[0]+4, p->data[0] + fake_ystride+4, width-4 , &lefty, &lefttopy);
 | 
			
		||||
            s->dsp.sub_hfyu_median_prediction(s->temp[1], p->data[1]+2, p->data[1] + fake_ustride+2, width2-2, &leftu, &lefttopu);
 | 
			
		||||
            s->dsp.sub_hfyu_median_prediction(s->temp[2], p->data[2]+2, p->data[2] + fake_vstride+2, width2-2, &leftv, &lefttopv);
 | 
			
		||||
            encode_422_bitstream(s, width-4);
 | 
			
		||||
            encode_422_bitstream(s, 0, width-4);
 | 
			
		||||
            y++; cy++;
 | 
			
		||||
 | 
			
		||||
            for(; y<height; y++,cy++){
 | 
			
		||||
@ -1307,7 +1310,7 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
 | 
			
		||||
                s->dsp.sub_hfyu_median_prediction(s->temp[1], udst - fake_ustride, udst, width2, &leftu, &lefttopu);
 | 
			
		||||
                s->dsp.sub_hfyu_median_prediction(s->temp[2], vdst - fake_vstride, vdst, width2, &leftv, &lefttopv);
 | 
			
		||||
 | 
			
		||||
                encode_422_bitstream(s, width);
 | 
			
		||||
                encode_422_bitstream(s, 0, width);
 | 
			
		||||
            }
 | 
			
		||||
        }else{
 | 
			
		||||
            for(cy=y=1; y<height; y++,cy++){
 | 
			
		||||
@ -1347,7 +1350,7 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
 | 
			
		||||
                    leftv= sub_left_prediction(s, s->temp[2], vdst, width2, leftv);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                encode_422_bitstream(s, width);
 | 
			
		||||
                encode_422_bitstream(s, 0, width);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }else if(avctx->pix_fmt == PIX_FMT_RGB32){
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user