changeset 401:e20655449d4a libavcodec

mpeg1/2 identifier - fixed frame rate for some bad mpeg1 streams
author glantau
date Mon, 20 May 2002 16:24:39 +0000
parents b0aed401a756
children 92d143c2d5a8
files mpeg12.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mpeg12.c	Mon May 20 16:23:27 2002 +0000
+++ b/mpeg12.c	Mon May 20 16:24:39 2002 +0000
@@ -1283,6 +1283,7 @@
         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 @@
     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 @@
         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 @@
     s->picture_structure = PICT_FRAME;
     s->frame_pred_frame_dct = 1;
     s->mpeg2 = 0;
+    avctx->sub_id = 1; /* indicates mpeg1 */
     return 0;
 }