changeset 5736:810067f2c33d libavcodec

AMV video decoder. Patch by Vladimir Voroshilov (voroshil - gmail - com)
author vitor
date Sat, 29 Sep 2007 15:20:22 +0000
parents 8b211f34a3eb
children efa3c1f9259a
files Makefile allcodecs.c avcodec.h mjpegdec.c sp5xdec.c
diffstat 5 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Sat Sep 29 15:09:34 2007 +0000
+++ b/Makefile	Sat Sep 29 15:20:22 2007 +0000
@@ -35,6 +35,7 @@
 OBJS-$(CONFIG_AC3_DECODER)             += ac3dec.o ac3tab.o ac3.o mdct.o fft.o
 OBJS-$(CONFIG_AC3_ENCODER)             += ac3enc.o ac3tab.o ac3.o
 OBJS-$(CONFIG_ALAC_DECODER)            += alac.o
+OBJS-$(CONFIG_AMV_DECODER)             += sp5xdec.o mjpegdec.o mjpeg.o
 OBJS-$(CONFIG_APE_DECODER)             += apedec.o
 OBJS-$(CONFIG_ASV1_DECODER)            += asv1.o
 OBJS-$(CONFIG_ASV1_ENCODER)            += asv1.o
--- a/allcodecs.c	Sat Sep 29 15:09:34 2007 +0000
+++ b/allcodecs.c	Sat Sep 29 15:20:22 2007 +0000
@@ -61,6 +61,7 @@
 
     /* video codecs */
     REGISTER_DECODER (AASC, aasc);
+    REGISTER_DECODER (AMV, amv);
     REGISTER_ENCDEC  (ASV1, asv1);
     REGISTER_ENCDEC  (ASV2, asv2);
     REGISTER_DECODER (AVS, avs);
--- a/avcodec.h	Sat Sep 29 15:09:34 2007 +0000
+++ b/avcodec.h	Sat Sep 29 15:20:22 2007 +0000
@@ -167,6 +167,7 @@
     CODEC_ID_PTX,
     CODEC_ID_TXD,
     CODEC_ID_VP6A,
+    CODEC_ID_AMV,
 
     /* various PCM "codecs" */
     CODEC_ID_PCM_S16LE= 0x10000,
--- a/mjpegdec.c	Sat Sep 29 15:09:34 2007 +0000
+++ b/mjpegdec.c	Sat Sep 29 15:20:22 2007 +0000
@@ -669,6 +669,11 @@
         int c = s->comp_index[i];
         data[c] = s->picture.data[c];
         linesize[c]=s->linesize[c];
+        if(s->avctx->codec->id==CODEC_ID_AMV) {
+            //picture should be flipped upside-down for this codec
+            data[c] += (linesize[c] * (s->v_scount[i] * 8 * s->mb_height - 1));
+            linesize[c] *= -1;
+        }
     }
 
     for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
--- a/sp5xdec.c	Sat Sep 29 15:09:34 2007 +0000
+++ b/sp5xdec.c	Sat Sep 29 15:20:22 2007 +0000
@@ -72,6 +72,10 @@
     memcpy(recoded+j, &sp5x_data_sos[0], sizeof(sp5x_data_sos));
     j += sizeof(sp5x_data_sos);
 
+    if(avctx->codec_id==CODEC_ID_AMV)
+        for (i = 2; i < buf_size-2 && j < buf_size+1024-2; i++)
+            recoded[j++] = buf[i];
+    else
     for (i = 14; i < buf_size && j < buf_size+1024-2; i++)
     {
         recoded[j++] = buf[i];
@@ -194,3 +198,15 @@
     CODEC_CAP_DR1,
     NULL
 };
+
+AVCodec amv_decoder = {
+    "amv",
+    CODEC_TYPE_VIDEO,
+    CODEC_ID_AMV,
+    sizeof(MJpegDecodeContext),
+    ff_mjpeg_decode_init,
+    NULL,
+    ff_mjpeg_decode_end,
+    sp5x_decode_frame,
+    CODEC_CAP_DR1
+};