diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2002-05-20 16:24:39 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2002-05-20 16:24:39 +0000 |
commit | fb4a4a560757649beb8d6c799f651a606831a3af (patch) | |
tree | 5f5c4ad12627533a2beae60c658e7c14f9db893c | |
parent | 4d7a0a0593918fc054065f7b545edef2d2981048 (diff) | |
download | ffmpeg-fb4a4a560757649beb8d6c799f651a606831a3af.tar.gz |
mpeg1/2 identifier - fixed frame rate for some bad mpeg1 streams
Originally committed as revision 542 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/mpeg12.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index f2edb25262..612fd16ebe 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -1283,6 +1283,7 @@ static void mpeg_decode_sequence_extension(MpegEncContext *s) s->frame_rate = (s->frame_rate * frame_rate_ext_n) / frame_rate_ext_d; dprintf("sequence extension\n"); s->mpeg2 = 1; + s->avctx->sub_id = 2; /* indicates mpeg2 found */ } static void mpeg_decode_quant_matrix_extension(MpegEncContext *s) @@ -1472,7 +1473,7 @@ static int mpeg1_decode_sequence(AVCodecContext *avctx, Mpeg1Context *s1 = avctx->priv_data; MpegEncContext *s = &s1->mpeg_enc_ctx; int width, height, i, v, j; - + init_get_bits(&s->gb, buf, buf_size); width = get_bits(&s->gb, 12); @@ -1500,7 +1501,12 @@ static int mpeg1_decode_sequence(AVCodecContext *avctx, s->avctx = avctx; avctx->width = width; avctx->height = height; - avctx->frame_rate = frame_rate_tab[s->frame_rate_index]; + if (s->frame_rate_index >= 9) { + /* at least give a valid frame rate (some old mpeg1 have this) */ + avctx->frame_rate = 25 * FRAME_RATE_BASE; + } else { + avctx->frame_rate = frame_rate_tab[s->frame_rate_index]; + } s->frame_rate = avctx->frame_rate; avctx->bit_rate = s->bit_rate; @@ -1561,6 +1567,7 @@ static int mpeg1_decode_sequence(AVCodecContext *avctx, s->picture_structure = PICT_FRAME; s->frame_pred_frame_dct = 1; s->mpeg2 = 0; + avctx->sub_id = 1; /* indicates mpeg1 */ return 0; } |