[FFmpeg-cvslog] mpeg12dec: BW10 support

Michael Niedermayer git at videolan.org
Sat Jan 14 20:12:02 CET 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Fri Jan 13 05:56:59 2012 +0100| [52889b543dddf7e7b9a34cdfebfbccbccaf73160] | committer: Michael Niedermayer

mpeg12dec: BW10 support

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=52889b543dddf7e7b9a34cdfebfbccbccaf73160
---

 libavcodec/mpeg12.c |   17 ++++++++++++-----
 libavformat/riff.c  |    1 +
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index 831ea92..c4c611b 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -2075,8 +2075,6 @@ static int vcr2_init_sequence(AVCodecContext *avctx)
 
     if (MPV_common_init(s) < 0)
         return -1;
-    exchange_uv(s); // common init reset pblocks, so we swap them here
-    s->swap_uv = 1; // in case of xvmc we need to swap uv for each MB
     s1->mpeg_enc_ctx_allocated = 1;
 
     for (i = 0; i < 64; i++) {
@@ -2096,8 +2094,15 @@ static int vcr2_init_sequence(AVCodecContext *avctx)
     s->first_field           = 0;
     s->frame_pred_frame_dct  = 1;
     s->chroma_format         = 1;
-    s->codec_id              = s->avctx->codec_id = CODEC_ID_MPEG2VIDEO;
-    avctx->sub_id            = 2; /* indicates MPEG-2 */
+    if (s->codec_tag == AV_RL32("BW10")) {
+        s->codec_id              = s->avctx->codec_id = CODEC_ID_MPEG1VIDEO;
+        avctx->sub_id            = 1; /* indicates MPEG-1 */
+    } else {
+        exchange_uv(s); // common init reset pblocks, so we swap them here
+        s->swap_uv = 1; // in case of xvmc we need to swap uv for each MB
+        s->codec_id              = s->avctx->codec_id = CODEC_ID_MPEG2VIDEO;
+        avctx->sub_id            = 2; /* indicates MPEG-2 */
+    }
     s1->save_width           = s->width;
     s1->save_height          = s->height;
     s1->save_progressive_seq = s->progressive_sequence;
@@ -2269,7 +2274,9 @@ static int mpeg_decode_frame(AVCodecContext *avctx,
     }
 
     s2->codec_tag = avpriv_toupper4(avctx->codec_tag);
-    if (s->mpeg_enc_ctx_allocated == 0 &&    s2->codec_tag == AV_RL32("VCR2"))
+    if (s->mpeg_enc_ctx_allocated == 0 && (   s2->codec_tag == AV_RL32("VCR2")
+                                           || s2->codec_tag == AV_RL32("BW10")
+                                          ))
         vcr2_init_sequence(avctx);
 
     s->slice_count = 0;
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 712488d..0a2bddc 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -135,6 +135,7 @@ const AVCodecTag ff_codec_bmp_tags[] = {
     { CODEC_ID_MPEG2VIDEO,   MKTAG('E', 'M', '2', 'V') },
     { CODEC_ID_MPEG2VIDEO,   MKTAG('M', '7', '0', '1') }, /* Matrox MPEG2 intra-only */
     { CODEC_ID_MPEG2VIDEO,   MKTAG('m', 'p', 'g', 'v') },
+    { CODEC_ID_MPEG1VIDEO,   MKTAG('B', 'W', '1', '0') },
     { CODEC_ID_MPEG1VIDEO,   MKTAG('X', 'M', 'P', 'G') }, /* Xing MPEG intra only */
     { CODEC_ID_MJPEG,        MKTAG('M', 'J', 'P', 'G') },
     { CODEC_ID_MJPEG,        MKTAG('L', 'J', 'P', 'G') },



More information about the ffmpeg-cvslog mailing list