From: Fiona Glaser Date: Sat, 12 Jul 2008 20:37:58 +0000 (-0600) Subject: Relax QPfile restrictions X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6916c39a51544070dec5b59fd03e571f74af06a1;p=libx264 Relax QPfile restrictions Allow a QPfile to contain fewer frames than the total number of frames in the video and have ratecontrol fill in the rest. Patch by kemuri9. --- diff --git a/x264.c b/x264.c index 14466e50..5741d00c 100644 --- a/x264.c +++ b/x264.c @@ -691,11 +691,20 @@ static int Parse( int argc, char **argv, static void parse_qpfile( cli_opt_t *opt, x264_picture_t *pic, int i_frame ) { - int num = -1, qp; + int num = -1, qp, ret; char type; + uint64_t file_pos; while( num < i_frame ) { - int ret = fscanf( opt->qpfile, "%d %c %d\n", &num, &type, &qp ); + file_pos = ftell( opt->qpfile ); + ret = fscanf( opt->qpfile, "%d %c %d\n", &num, &type, &qp ); + if( num > i_frame || ret == EOF ) + { + pic->i_type = X264_TYPE_AUTO; + pic->i_qpplus1 = 0; + fseek( opt->qpfile , file_pos , SEEK_SET ); + break; + } if( num < i_frame ) continue; pic->i_qpplus1 = qp+1; @@ -705,7 +714,7 @@ static void parse_qpfile( cli_opt_t *opt, x264_picture_t *pic, int i_frame ) else if( type == 'B' ) pic->i_type = X264_TYPE_BREF; else if( type == 'b' ) pic->i_type = X264_TYPE_B; else ret = 0; - if( ret != 3 || qp < 0 || qp > 51 || num > i_frame ) + if( ret != 3 || qp < -1 || qp > 51 ) { fprintf( stderr, "x264 [error]: can't parse qpfile for frame %d\n", i_frame ); fclose( opt->qpfile );