]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
AMV video decoder.
authorvitor <vitor@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 29 Sep 2007 15:20:22 +0000 (15:20 +0000)
committervitor <vitor@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sat, 29 Sep 2007 15:20:22 +0000 (15:20 +0000)
Patch by Vladimir Voroshilov (voroshil - gmail - com)

git-svn-id: file:///var/local/repositories/ffmpeg/trunk@10617 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

Changelog
doc/general.texi
libavcodec/Makefile
libavcodec/allcodecs.c
libavcodec/avcodec.h
libavcodec/mjpegdec.c
libavcodec/sp5xdec.c

index 835bef108c21557c978ef36065cb6a5f80f1deaf..c338f9164f1e0434f4f8d25811c1eaf30db8e32a 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -95,7 +95,7 @@ version <next>
 - Matroska muxer
 - Slice-based parallel H.264 decoding
 - Monkey's Audio demuxer and decoder
-- AMV audio decoder
+- AMV audio and video decoder
 
 version 0.4.9-pre1:
 
index bf5815e33ebb97fee9b6a95bcaeda320758274e3..2056de8579781ab9adcb578df389af48ac928f53 100644 (file)
@@ -231,6 +231,7 @@ following image formats are supported:
 @item THP                    @tab     @tab  X @tab Used on the Nintendo GameCube.
 @item Bethsoft VID           @tab     @tab  X @tab Used in some games from Bethesda Softworks.
 @item Renderware TXD         @tab     @tab  X @tab Texture dictionaries used by the Renderware Engine.
+@item AMV                    @tab     @tab  X @tab Used in chinese MP3 players
 @end multitable
 
 @code{X} means that encoding (resp. decoding) is supported.
index daca9b90bb802bc21377eaa809e049a89a2cea7e..1770260d3f789d3b96146c45382a6483c0fc8c2d 100644 (file)
@@ -35,6 +35,7 @@ OBJS-$(CONFIG_AASC_DECODER)            += aasc.o
 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
index bd566a51fa4522277d6423e65aa4e652552e52fd..334a8e379e146eed4c924fe7424f038b7cf3a9d0 100644 (file)
@@ -61,6 +61,7 @@ void avcodec_register_all(void)
 
     /* video codecs */
     REGISTER_DECODER (AASC, aasc);
+    REGISTER_DECODER (AMV, amv);
     REGISTER_ENCDEC  (ASV1, asv1);
     REGISTER_ENCDEC  (ASV2, asv2);
     REGISTER_DECODER (AVS, avs);
index 638b42d2ea1f675e58aa4065bbc5a98c635fc2b1..8e6944eb90386b158aead066c4ceb6b96fc7518a 100644 (file)
@@ -167,6 +167,7 @@ enum CodecID {
     CODEC_ID_PTX,
     CODEC_ID_TXD,
     CODEC_ID_VP6A,
+    CODEC_ID_AMV,
 
     /* various PCM "codecs" */
     CODEC_ID_PCM_S16LE= 0x10000,
index 7dc0616a8f73c6cd86c54e2ef3a8326d18365de4..d1d81d34939cde600099ef2f79c037fa135b23cd 100644 (file)
@@ -669,6 +669,11 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int ss, i
         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++) {
index 2234afa697c932369bd3395358a5502855db4b1b..ada46ca3530b284f8a57277ad52cce720539e1d1 100644 (file)
@@ -72,6 +72,10 @@ static int sp5x_decode_frame(AVCodecContext *avctx,
     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 @@ AVCodec sp5x_decoder = {
     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
+};