You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
Better parsing of i263 picture header
Originally committed as revision 17532 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -6183,17 +6183,45 @@ int intel_h263_decode_picture_header(MpegEncContext *s)
|
|||||||
return -1; /* SAC: off */
|
return -1; /* SAC: off */
|
||||||
}
|
}
|
||||||
s->obmc= get_bits1(&s->gb);
|
s->obmc= get_bits1(&s->gb);
|
||||||
if (get_bits1(&s->gb) != 0) {
|
s->pb_frame = get_bits1(&s->gb);
|
||||||
av_log(s->avctx, AV_LOG_ERROR, "PB frame mode no supported\n");
|
|
||||||
return -1; /* PB frame mode */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* skip unknown header garbage */
|
if(format == 7){
|
||||||
skip_bits(&s->gb, 41);
|
format = get_bits(&s->gb, 3);
|
||||||
|
if(format == 0 || format == 7){
|
||||||
|
av_log(s->avctx, AV_LOG_ERROR, "Wrong Intel H263 format\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if(get_bits(&s->gb, 2))
|
||||||
|
av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
|
||||||
|
s->loop_filter = get_bits1(&s->gb);
|
||||||
|
if(get_bits1(&s->gb))
|
||||||
|
av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
|
||||||
|
if(get_bits1(&s->gb))
|
||||||
|
s->pb_frame = 2;
|
||||||
|
if(get_bits(&s->gb, 5))
|
||||||
|
av_log(s->avctx, AV_LOG_ERROR, "Bad value for reserved field\n");
|
||||||
|
if(get_bits(&s->gb, 5) != 1)
|
||||||
|
av_log(s->avctx, AV_LOG_ERROR, "Invalid marker\n");
|
||||||
|
}
|
||||||
|
if(format == 6){
|
||||||
|
int ar = get_bits(&s->gb, 4);
|
||||||
|
skip_bits(&s->gb, 9); // display width
|
||||||
|
skip_bits1(&s->gb);
|
||||||
|
skip_bits(&s->gb, 9); // display height
|
||||||
|
if(ar == 15){
|
||||||
|
skip_bits(&s->gb, 8); // aspect ratio - width
|
||||||
|
skip_bits(&s->gb, 8); // aspect ratio - height
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
|
s->chroma_qscale= s->qscale = get_bits(&s->gb, 5);
|
||||||
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
|
skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
|
||||||
|
|
||||||
|
if(s->pb_frame){
|
||||||
|
skip_bits(&s->gb, 3); //temporal reference for B-frame
|
||||||
|
skip_bits(&s->gb, 2); //dbquant
|
||||||
|
}
|
||||||
|
|
||||||
/* PEI */
|
/* PEI */
|
||||||
while (get_bits1(&s->gb) != 0) {
|
while (get_bits1(&s->gb) != 0) {
|
||||||
skip_bits(&s->gb, 8);
|
skip_bits(&s->gb, 8);
|
||||||
@@ -6206,6 +6234,10 @@ int intel_h263_decode_picture_header(MpegEncContext *s)
|
|||||||
if(s->avctx->debug&FF_DEBUG_PICT_INFO)
|
if(s->avctx->debug&FF_DEBUG_PICT_INFO)
|
||||||
show_pict_info(s);
|
show_pict_info(s);
|
||||||
|
|
||||||
|
if(s->pb_frame){
|
||||||
|
av_log(s->avctx, AV_LOG_ERROR, "PB frame mode no supported\n");
|
||||||
|
return -1; /* PB frame mode */
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -201,6 +201,7 @@ typedef struct MpegEncContext {
|
|||||||
int bit_rate; ///< wanted bit rate
|
int bit_rate; ///< wanted bit rate
|
||||||
enum OutputFormat out_format; ///< output format
|
enum OutputFormat out_format; ///< output format
|
||||||
int h263_pred; ///< use mpeg4/h263 ac/dc predictions
|
int h263_pred; ///< use mpeg4/h263 ac/dc predictions
|
||||||
|
int pb_frame; ///< PB frame mode (0 = none, 1 = base, 2 = improved)
|
||||||
|
|
||||||
/* the following codec id fields are deprecated in favor of codec_id */
|
/* the following codec id fields are deprecated in favor of codec_id */
|
||||||
int h263_plus; ///< h263 plus headers
|
int h263_plus; ///< h263 plus headers
|
||||||
|
Reference in New Issue
Block a user