# HG changeset patch # User vitor # Date 1191079222 0 # Node ID 810067f2c33d59dc8a4a906261f770f9463219ee # Parent 8b211f34a3eb3733590810dbc9cff0e8623f298d AMV video decoder. Patch by Vladimir Voroshilov (voroshil - gmail - com) diff -r 8b211f34a3eb -r 810067f2c33d Makefile --- 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 diff -r 8b211f34a3eb -r 810067f2c33d allcodecs.c --- 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); diff -r 8b211f34a3eb -r 810067f2c33d avcodec.h --- 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, diff -r 8b211f34a3eb -r 810067f2c33d mjpegdec.c --- 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++) { diff -r 8b211f34a3eb -r 810067f2c33d sp5xdec.c --- 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 +};