changeset 818:07107d476f32 trunk

[svn] - remove some more stuff - build libavcodec directly into the module
author nenolod
date Mon, 12 Mar 2007 13:49:56 -0700
parents b3b7a4e480b2
children 1481c3667dc9
files ChangeLog src/ffmpeg/Makefile src/ffmpeg/ffmpeg.c src/ffmpeg/libavcodec/avcodec.h src/ffmpeg/libavcodec/bmp.c src/ffmpeg/libavcodec/dct-test.c src/ffmpeg/libavcodec/dtsdec.c src/ffmpeg/libavcodec/eval.c src/ffmpeg/libavcodec/fft-test.c src/ffmpeg/libavcodec/gifdec.c src/ffmpeg/libavcodec/mjpeg.c src/ffmpeg/libavcodec/oggvorbis.c src/ffmpeg/libavcodec/parser.c src/ffmpeg/libavcodec/png.c src/ffmpeg/libavcodec/utils.c src/ffmpeg/libavformat/utils.c src/ffmpeg/libavutil/avutil.h src/ffmpeg/libavutil/common.h
diffstat 18 files changed, 139 insertions(+), 5798 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Mon Mar 12 13:14:40 2007 -0700
+++ b/ChangeLog	Mon Mar 12 13:49:56 2007 -0700
@@ -1,3 +1,13 @@
+2007-03-12 20:14:40 +0000  William Pitcock <nenolod@sacredspiral.co.uk>
+  revision [1734]
+  - make this compile again
+  
+  trunk/src/ffmpeg/libavcodec/dsputil.c |    2 
+  trunk/src/ffmpeg/libavcodec/dsputil.h |  273 +++++++--
+  trunk/src/ffmpeg/libavcodec/parser.c  | 1014 ----------------------------------
+  3 files changed, 254 insertions(+), 1035 deletions(-)
+
+
 2007-03-12 20:11:29 +0000  William Pitcock <nenolod@sacredspiral.co.uk>
   revision [1732]
   - remove more video stuff, remove vorbis
--- a/src/ffmpeg/Makefile	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/Makefile	Mon Mar 12 13:49:56 2007 -0700
@@ -3,16 +3,86 @@
 
 OBJECTIVE_LIBS = libffmpeg$(SHARED_SUFFIX)
 
-SUBDIRS = libavcodec libavformat libavutil
+SUBDIRS = libavformat libavutil
 
 LIBDIR = $(plugindir)/$(INPUT_PLUGIN_DIR)
 
-LIBADD = ./libavcodec/libavcodec.a ./libavutil/libavutil.a ./libavformat/libavformat.a $(GTK_LIBS) $(GLIB_LIBS) $(PANGO_LIBS)
+LIBADD = ./libavutil/libavutil.a ./libavformat/libavformat.a $(GTK_LIBS) $(GLIB_LIBS) $(PANGO_LIBS)
 
-SOURCES = ffmpeg.c
+SOURCES = ffmpeg.c \
+	libavcodec/aasc.c \
+	libavcodec/ac3enc.c \
+	libavcodec/adpcm.c \
+	libavcodec/adx.c \
+	libavcodec/alac.c \
+	libavcodec/allcodecs.c \
+	libavcodec/apiexample.c \
+	libavcodec/audioconvert.c \
+	libavcodec/avs.c \
+	libavcodec/bitstream.c \
+	libavcodec/bitstream_filter.c \
+	libavcodec/cabac.c \
+	libavcodec/cook.c \
+	libavcodec/cscd.c \
+	libavcodec/dpcm.c \
+	libavcodec/dsicinav.c \
+	libavcodec/dsputil.c \
+	libavcodec/dvbsub.c \
+	libavcodec/dvbsubdec.c \
+	libavcodec/dvdsub.c \
+	libavcodec/dvdsubenc.c \
+	libavcodec/eval.c \
+	libavcodec/faac.c \
+	libavcodec/faandct.c \
+	libavcodec/fdctref.c \
+	libavcodec/fft.c \
+	libavcodec/ffv1.c \
+	libavcodec/flac.c \
+	libavcodec/flacenc.c \
+	libavcodec/flashsv.c \
+	libavcodec/flicvideo.c \
+	libavcodec/fraps.c \
+	libavcodec/g726.c \
+	libavcodec/golomb.c \
+	libavcodec/kmvc.c \
+	libavcodec/lcl.c \
+	libavcodec/loco.c \
+	libavcodec/lzo.c \
+	libavcodec/mace.c \
+	libavcodec/mdct.c \
+	libavcodec/mpegaudio.c \
+	libavcodec/mpegaudiodec.c \
+	libavcodec/msrle.c \
+	libavcodec/msvideo1.c \
+	libavcodec/opt.c \
+	libavcodec/parser.c \
+	libavcodec/pcm.c \
+	libavcodec/pthread.c \
+	libavcodec/qdm2.c \
+	libavcodec/qtrle.c \
+	libavcodec/ra144.c \
+	libavcodec/ra288.c \
+	libavcodec/rangecoder.c \
+	libavcodec/raw.c \
+	libavcodec/resample.c \
+	libavcodec/resample2.c \
+	libavcodec/rpza.c \
+	libavcodec/shorten.c \
+	libavcodec/simple_idct.c \
+	libavcodec/smc.c \
+	libavcodec/sonic.c \
+	libavcodec/truespeech.c \
+	libavcodec/tscc.c \
+	libavcodec/tta.c \
+	libavcodec/utils.c \
+	libavcodec/wavpack.c \
+	libavcodec/wmadec.c \
+	libavcodec/wnv1.c \
+	libavcodec/ws-snd1.c
 
 OBJECTS = ${SOURCES:.c=.o}
 
-CFLAGS += $(PICFLAGS) $(GTK_CFLAGS) $(GLIB_CFLAGS) $(PANGO_CFLAGS) -I../.. -I./libffwma -std=c99
+CFLAGS += $(PICFLAGS) $(GTK_CFLAGS) $(GLIB_CFLAGS) $(PANGO_CFLAGS) -I. -I../.. -I./libavformat \
+	-I./libavcodec -I./libavutil -std=c99 -DHAVE_AV_CONFIG_H
 
 include ../../mk/objective.mk
--- a/src/ffmpeg/ffmpeg.c	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/ffmpeg.c	Mon Mar 12 13:49:56 2007 -0700
@@ -40,8 +40,11 @@
 #include <audacious/strings.h>
 #include <audacious/i18n.h>
 
+#include "config.h"
+
 #include "avcodec.h"
 #include "avformat.h"
+#include "avutil.h"
 
 #define ABOUT_TXT "Adapted for use in audacious by Tony Vroon (chainsaw@gentoo.org) from\n \
 the BEEP-WMA plugin which is Copyright (C) 2004,2005 Mokrushin I.V. aka McMCC (mcmcc@mail.ru)\n \
@@ -363,12 +366,12 @@
 
 static void wma_playbuff(InputPlayback *playback, int out_size)
 {
-    FifoBuffer f;
+    AVFifoBuffer f;
     int sst_buff;
     
-    fifo_init(&f, out_size*2);
-    fifo_write(&f, wma_outbuf, out_size, &f.wptr);
-    while(!fifo_read(&f, wma_s_outbuf, wma_st_buff, &f.rptr) && wma_decode)
+    av_fifo_init(&f, out_size*2);
+    av_fifo_write(&f, wma_outbuf, out_size);
+    while(!av_fifo_read(&f, wma_s_outbuf, wma_st_buff) && wma_decode)
     {
         sst_buff = wma_st_buff;
 	if(wma_pause) memset(wma_s_outbuf, 0, sst_buff);	
@@ -377,7 +380,7 @@
     			    c->channels, sst_buff, (short *)wma_s_outbuf, NULL);
 	memset(wma_s_outbuf, 0, sst_buff);
     }
-    fifo_free(&f);
+    av_fifo_free(&f);
     return;
 }
 
@@ -393,7 +396,7 @@
 
 	if(wma_seekpos != -1)
 	{
-	    av_seek_frame(ic, wma_idx, wma_seekpos * 1000000LL);
+	    av_seek_frame(ic, wma_idx, wma_seekpos * 1000000LL, 0);
 	    playback->output->flush(wma_seekpos * 1000);
 	    wma_seekpos = -1;
 	}
--- a/src/ffmpeg/libavcodec/avcodec.h	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/libavcodec/avcodec.h	Mon Mar 12 13:49:56 2007 -0700
@@ -31,7 +31,19 @@
 extern "C" {
 #endif
 
-#include "avutil.h"
+#ifndef NAN
+  #define NAN 0.0/0.0
+#endif
+
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
+
+#ifndef M_E
+#define M_E  2.7182818284590452354
+#endif
+
+#include "libavutil/avutil.h"
 #include <sys/types.h> /* size_t */
 
 #define AV_STRINGIFY(s)         AV_TOSTRING(s)
--- a/src/ffmpeg/libavcodec/bmp.c	Mon Mar 12 13:14:40 2007 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,253 +0,0 @@
-/*
- * BMP image format
- * Copyright (c) 2005 Mans Rullgard
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "avcodec.h"
-#include "bitstream.h"
-#include "bswap.h"
-
-typedef struct BMPContext {
-    AVFrame picture;
-} BMPContext;
-
-#define BMP_RGB       0
-#define BMP_RLE8      1
-#define BMP_RLE4      2
-#define BMP_BITFIELDS 3
-
-#define read16(bits) bswap_16(get_bits(bits, 16))
-#define read32(bits) bswap_32(get_bits_long(bits, 32))
-
-static int bmp_decode_init(AVCodecContext *avctx){
-    BMPContext *s = avctx->priv_data;
-
-    avcodec_get_frame_defaults((AVFrame*)&s->picture);
-    avctx->coded_frame = (AVFrame*)&s->picture;
-
-    return 0;
-}
-
-static int bmp_decode_frame(AVCodecContext *avctx,
-                            void *data, int *data_size,
-                            uint8_t *buf, int buf_size)
-{
-    BMPContext *s = avctx->priv_data;
-    AVFrame *picture = data;
-    AVFrame *p = &s->picture;
-    GetBitContext bits;
-    unsigned int fsize, hsize;
-    int width, height;
-    unsigned int depth;
-    unsigned int comp;
-    unsigned int ihsize;
-    int i, j, n, linesize;
-    uint32_t rgb[3];
-    uint8_t *ptr;
-    int dsize;
-
-    if(buf_size < 14){
-        av_log(avctx, AV_LOG_ERROR, "buf size too small (%d)\n", buf_size);
-        return -1;
-    }
-
-    init_get_bits(&bits, buf, buf_size);
-
-    if(get_bits(&bits, 16) != 0x424d){ /* 'BM' */
-        av_log(avctx, AV_LOG_ERROR, "bad magic number\n");
-        return -1;
-    }
-
-    fsize = read32(&bits);
-    if(buf_size < fsize){
-        av_log(avctx, AV_LOG_ERROR, "not enough data (%d < %d)\n",
-               buf_size, fsize);
-        return -1;
-    }
-
-    skip_bits(&bits, 16);       /* reserved1 */
-    skip_bits(&bits, 16);       /* reserved2 */
-
-    hsize = read32(&bits); /* header size */
-    if(fsize <= hsize){
-        av_log(avctx, AV_LOG_ERROR, "not enough data (%d < %d)\n",
-               fsize, hsize);
-        return -1;
-    }
-
-    ihsize = read32(&bits);       /* more header size */
-    if(ihsize + 14 > hsize){
-        av_log(avctx, AV_LOG_ERROR, "invalid header size %d\n", hsize);
-        return -1;
-    }
-
-    width = read32(&bits);
-    height = read32(&bits);
-
-    if(read16(&bits) != 1){ /* planes */
-        av_log(avctx, AV_LOG_ERROR, "invalid BMP header\n");
-        return -1;
-    }
-
-    depth = read16(&bits);
-
-    if(ihsize > 16)
-        comp = read32(&bits);
-    else
-        comp = BMP_RGB;
-
-    if(comp != BMP_RGB && comp != BMP_BITFIELDS){
-        av_log(avctx, AV_LOG_ERROR, "BMP coding %d not supported\n", comp);
-        return -1;
-    }
-
-    if(comp == BMP_BITFIELDS){
-        skip_bits(&bits, 20 * 8);
-        rgb[0] = read32(&bits);
-        rgb[1] = read32(&bits);
-        rgb[2] = read32(&bits);
-    }
-
-    avctx->codec_id = CODEC_ID_BMP;
-    avctx->width = width;
-    avctx->height = height > 0? height: -height;
-
-    avctx->pix_fmt = PIX_FMT_NONE;
-
-    switch(depth){
-    case 32:
-        if(comp == BMP_BITFIELDS){
-            rgb[0] = (rgb[0] >> 15) & 3;
-            rgb[1] = (rgb[1] >> 15) & 3;
-            rgb[2] = (rgb[2] >> 15) & 3;
-
-            if(rgb[0] + rgb[1] + rgb[2] != 3 ||
-               rgb[0] == rgb[1] || rgb[0] == rgb[2] || rgb[1] == rgb[2]){
-                break;
-            }
-        } else {
-            rgb[0] = 2;
-            rgb[1] = 1;
-            rgb[2] = 0;
-        }
-
-        avctx->pix_fmt = PIX_FMT_BGR24;
-        break;
-    case 24:
-        avctx->pix_fmt = PIX_FMT_BGR24;
-        break;
-    case 16:
-        if(comp == BMP_RGB)
-            avctx->pix_fmt = PIX_FMT_RGB555;
-        break;
-    default:
-        av_log(avctx, AV_LOG_ERROR, "depth %d not supported\n", depth);
-        return -1;
-    }
-
-    if(avctx->pix_fmt == PIX_FMT_NONE){
-        av_log(avctx, AV_LOG_ERROR, "unsupported pixel format\n");
-        return -1;
-    }
-
-    p->reference = 0;
-    if(avctx->get_buffer(avctx, p) < 0){
-        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
-        return -1;
-    }
-    p->pict_type = FF_I_TYPE;
-    p->key_frame = 1;
-
-    buf += hsize;
-    dsize = buf_size - hsize;
-
-    n = avctx->width * (depth / 8);
-
-    if(n * avctx->height > dsize){
-        av_log(avctx, AV_LOG_ERROR, "not enough data (%d < %d)\n",
-               dsize, n * avctx->height);
-        return -1;
-    }
-
-    if(height > 0){
-        ptr = p->data[0] + (avctx->height - 1) * p->linesize[0];
-        linesize = -p->linesize[0];
-    } else {
-        ptr = p->data[0];
-        linesize = p->linesize[0];
-    }
-
-    switch(depth){
-    case 24:
-        for(i = 0; i < avctx->height; i++){
-            memcpy(ptr, buf, n);
-            buf += n;
-            ptr += linesize;
-        }
-        break;
-    case 16:
-        for(i = 0; i < avctx->height; i++){
-            uint16_t *src = (uint16_t *) buf;
-            uint16_t *dst = (uint16_t *) ptr;
-
-            for(j = 0; j < avctx->width; j++)
-                *dst++ = le2me_16(*src++);
-
-            buf += n;
-            ptr += linesize;
-        }
-        break;
-    case 32:
-        for(i = 0; i < avctx->height; i++){
-            uint8_t *src = buf;
-            uint8_t *dst = ptr;
-
-            for(j = 0; j < avctx->width; j++){
-                dst[0] = src[rgb[2]];
-                dst[1] = src[rgb[1]];
-                dst[2] = src[rgb[0]];
-                dst += 3;
-                src += 4;
-            }
-
-            buf += n;
-            ptr += linesize;
-        }
-        break;
-    default:
-        av_log(avctx, AV_LOG_ERROR, "BMP decoder is broken\n");
-        return -1;
-    }
-
-    *picture = s->picture;
-    *data_size = sizeof(AVPicture);
-
-    return buf_size;
-}
-
-AVCodec bmp_decoder = {
-    "bmp",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_BMP,
-    sizeof(BMPContext),
-    bmp_decode_init,
-    NULL,
-    NULL,
-    bmp_decode_frame
-};
--- a/src/ffmpeg/libavcodec/dct-test.c	Mon Mar 12 13:14:40 2007 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,535 +0,0 @@
-/*
- * (c) 2001 Fabrice Bellard
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file dct-test.c
- * DCT test. (c) 2001 Fabrice Bellard.
- * Started from sample code by Juan J. Sierralta P.
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-#include "dsputil.h"
-
-#include "simple_idct.h"
-#include "faandct.h"
-
-#ifndef MAX
-#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
-#endif
-
-#undef printf
-
-void *fast_memcpy(void *a, const void *b, size_t c){return memcpy(a,b,c);};
-
-/* reference fdct/idct */
-extern void fdct(DCTELEM *block);
-extern void idct(DCTELEM *block);
-extern void ff_idct_xvid_mmx(DCTELEM *block);
-extern void ff_idct_xvid_mmx2(DCTELEM *block);
-extern void init_fdct();
-
-extern void j_rev_dct(DCTELEM *data);
-extern void ff_mmx_idct(DCTELEM *data);
-extern void ff_mmxext_idct(DCTELEM *data);
-
-extern void odivx_idct_c (short *block);
-
-#define AANSCALE_BITS 12
-static const unsigned short aanscales[64] = {
-    /* precomputed values scaled up by 14 bits */
-    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-    22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
-    21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
-    19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
-    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-    12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
-    8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
-    4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
-};
-
-uint8_t cropTbl[256 + 2 * MAX_NEG_CROP];
-
-int64_t gettime(void)
-{
-    struct timeval tv;
-    gettimeofday(&tv,NULL);
-    return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
-}
-
-#define NB_ITS 20000
-#define NB_ITS_SPEED 50000
-
-static short idct_mmx_perm[64];
-
-static short idct_simple_mmx_perm[64]={
-        0x00, 0x08, 0x04, 0x09, 0x01, 0x0C, 0x05, 0x0D,
-        0x10, 0x18, 0x14, 0x19, 0x11, 0x1C, 0x15, 0x1D,
-        0x20, 0x28, 0x24, 0x29, 0x21, 0x2C, 0x25, 0x2D,
-        0x12, 0x1A, 0x16, 0x1B, 0x13, 0x1E, 0x17, 0x1F,
-        0x02, 0x0A, 0x06, 0x0B, 0x03, 0x0E, 0x07, 0x0F,
-        0x30, 0x38, 0x34, 0x39, 0x31, 0x3C, 0x35, 0x3D,
-        0x22, 0x2A, 0x26, 0x2B, 0x23, 0x2E, 0x27, 0x2F,
-        0x32, 0x3A, 0x36, 0x3B, 0x33, 0x3E, 0x37, 0x3F,
-};
-
-void idct_mmx_init(void)
-{
-    int i;
-
-    /* the mmx/mmxext idct uses a reordered input, so we patch scan tables */
-    for (i = 0; i < 64; i++) {
-        idct_mmx_perm[i] = (i & 0x38) | ((i & 6) >> 1) | ((i & 1) << 2);
-//        idct_simple_mmx_perm[i] = simple_block_permute_op(i);
-    }
-}
-
-static DCTELEM block[64] __attribute__ ((aligned (8)));
-static DCTELEM block1[64] __attribute__ ((aligned (8)));
-static DCTELEM block_org[64] __attribute__ ((aligned (8)));
-
-void dct_error(const char *name, int is_idct,
-               void (*fdct_func)(DCTELEM *block),
-               void (*fdct_ref)(DCTELEM *block), int test)
-{
-    int it, i, scale;
-    int err_inf, v;
-    int64_t err2, ti, ti1, it1;
-    int64_t sysErr[64], sysErrMax=0;
-    int maxout=0;
-    int blockSumErrMax=0, blockSumErr;
-
-    srandom(0);
-
-    err_inf = 0;
-    err2 = 0;
-    for(i=0; i<64; i++) sysErr[i]=0;
-    for(it=0;it<NB_ITS;it++) {
-        for(i=0;i<64;i++)
-            block1[i] = 0;
-        switch(test){
-        case 0:
-            for(i=0;i<64;i++)
-                block1[i] = (random() % 512) -256;
-            if (is_idct){
-                fdct(block1);
-
-                for(i=0;i<64;i++)
-                    block1[i]>>=3;
-            }
-        break;
-        case 1:{
-            int num= (random()%10)+1;
-            for(i=0;i<num;i++)
-                block1[random()%64] = (random() % 512) -256;
-        }break;
-        case 2:
-            block1[0]= (random()%4096)-2048;
-            block1[63]= (block1[0]&1)^1;
-        break;
-        }
-
-#if 0 // simulate mismatch control
-{ int sum=0;
-        for(i=0;i<64;i++)
-           sum+=block1[i];
-
-        if((sum&1)==0) block1[63]^=1;
-}
-#endif
-
-        for(i=0; i<64; i++)
-            block_org[i]= block1[i];
-
-        if (fdct_func == ff_mmx_idct ||
-            fdct_func == j_rev_dct || fdct_func == ff_mmxext_idct) {
-            for(i=0;i<64;i++)
-                block[idct_mmx_perm[i]] = block1[i];
-        } else if(fdct_func == ff_simple_idct_mmx ) {
-            for(i=0;i<64;i++)
-                block[idct_simple_mmx_perm[i]] = block1[i];
-
-        } else {
-            for(i=0; i<64; i++)
-                block[i]= block1[i];
-        }
-#if 0 // simulate mismatch control for tested IDCT but not the ref
-{ int sum=0;
-        for(i=0;i<64;i++)
-           sum+=block[i];
-
-        if((sum&1)==0) block[63]^=1;
-}
-#endif
-
-        fdct_func(block);
-        emms(); /* for ff_mmx_idct */
-
-        if (fdct_func == fdct_ifast
-#ifndef FAAN_POSTSCALE
-            || fdct_func == ff_faandct
-#endif
-            ) {
-            for(i=0; i<64; i++) {
-                scale = 8*(1 << (AANSCALE_BITS + 11)) / aanscales[i];
-                block[i] = (block[i] * scale /*+ (1<<(AANSCALE_BITS-1))*/) >> AANSCALE_BITS;
-            }
-        }
-
-        fdct_ref(block1);
-
-        blockSumErr=0;
-        for(i=0;i<64;i++) {
-            v = abs(block[i] - block1[i]);
-            if (v > err_inf)
-                err_inf = v;
-            err2 += v * v;
-            sysErr[i] += block[i] - block1[i];
-            blockSumErr += v;
-            if( abs(block[i])>maxout) maxout=abs(block[i]);
-        }
-        if(blockSumErrMax < blockSumErr) blockSumErrMax= blockSumErr;
-#if 0 // print different matrix pairs
-        if(blockSumErr){
-            printf("\n");
-            for(i=0; i<64; i++){
-                if((i&7)==0) printf("\n");
-                printf("%4d ", block_org[i]);
-            }
-            for(i=0; i<64; i++){
-                if((i&7)==0) printf("\n");
-                printf("%4d ", block[i] - block1[i]);
-            }
-        }
-#endif
-    }
-    for(i=0; i<64; i++) sysErrMax= MAX(sysErrMax, FFABS(sysErr[i]));
-
-#if 1 // dump systematic errors
-    for(i=0; i<64; i++){
-        if(i%8==0) printf("\n");
-        printf("%5d ", (int)sysErr[i]);
-    }
-    printf("\n");
-#endif
-
-    printf("%s %s: err_inf=%d err2=%0.8f syserr=%0.8f maxout=%d blockSumErr=%d\n",
-           is_idct ? "IDCT" : "DCT",
-           name, err_inf, (double)err2 / NB_ITS / 64.0, (double)sysErrMax / NB_ITS, maxout, blockSumErrMax);
-#if 1 //Speed test
-    /* speed test */
-    for(i=0;i<64;i++)
-        block1[i] = 0;
-    switch(test){
-    case 0:
-        for(i=0;i<64;i++)
-            block1[i] = (random() % 512) -256;
-        if (is_idct){
-            fdct(block1);
-
-            for(i=0;i<64;i++)
-                block1[i]>>=3;
-        }
-    break;
-    case 1:{
-    case 2:
-        block1[0] = (random() % 512) -256;
-        block1[1] = (random() % 512) -256;
-        block1[2] = (random() % 512) -256;
-        block1[3] = (random() % 512) -256;
-    }break;
-    }
-
-    if (fdct_func == ff_mmx_idct ||
-        fdct_func == j_rev_dct || fdct_func == ff_mmxext_idct) {
-        for(i=0;i<64;i++)
-            block[idct_mmx_perm[i]] = block1[i];
-    } else if(fdct_func == ff_simple_idct_mmx ) {
-        for(i=0;i<64;i++)
-            block[idct_simple_mmx_perm[i]] = block1[i];
-    } else {
-        for(i=0; i<64; i++)
-            block[i]= block1[i];
-    }
-
-    ti = gettime();
-    it1 = 0;
-    do {
-        for(it=0;it<NB_ITS_SPEED;it++) {
-            for(i=0; i<64; i++)
-                block[i]= block1[i];
-//            memcpy(block, block1, sizeof(DCTELEM) * 64);
-// dont memcpy especially not fastmemcpy because it does movntq !!!
-            fdct_func(block);
-        }
-        it1 += NB_ITS_SPEED;
-        ti1 = gettime() - ti;
-    } while (ti1 < 1000000);
-    emms();
-
-    printf("%s %s: %0.1f kdct/s\n",
-           is_idct ? "IDCT" : "DCT",
-           name, (double)it1 * 1000.0 / (double)ti1);
-#endif
-}
-
-static uint8_t img_dest[64] __attribute__ ((aligned (8)));
-static uint8_t img_dest1[64] __attribute__ ((aligned (8)));
-
-void idct248_ref(uint8_t *dest, int linesize, int16_t *block)
-{
-    static int init;
-    static double c8[8][8];
-    static double c4[4][4];
-    double block1[64], block2[64], block3[64];
-    double s, sum, v;
-    int i, j, k;
-
-    if (!init) {
-        init = 1;
-
-        for(i=0;i<8;i++) {
-            sum = 0;
-            for(j=0;j<8;j++) {
-                s = (i==0) ? sqrt(1.0/8.0) : sqrt(1.0/4.0);
-                c8[i][j] = s * cos(M_PI * i * (j + 0.5) / 8.0);
-                sum += c8[i][j] * c8[i][j];
-            }
-        }
-
-        for(i=0;i<4;i++) {
-            sum = 0;
-            for(j=0;j<4;j++) {
-                s = (i==0) ? sqrt(1.0/4.0) : sqrt(1.0/2.0);
-                c4[i][j] = s * cos(M_PI * i * (j + 0.5) / 4.0);
-                sum += c4[i][j] * c4[i][j];
-            }
-        }
-    }
-
-    /* butterfly */
-    s = 0.5 * sqrt(2.0);
-    for(i=0;i<4;i++) {
-        for(j=0;j<8;j++) {
-            block1[8*(2*i)+j] = (block[8*(2*i)+j] + block[8*(2*i+1)+j]) * s;
-            block1[8*(2*i+1)+j] = (block[8*(2*i)+j] - block[8*(2*i+1)+j]) * s;
-        }
-    }
-
-    /* idct8 on lines */
-    for(i=0;i<8;i++) {
-        for(j=0;j<8;j++) {
-            sum = 0;
-            for(k=0;k<8;k++)
-                sum += c8[k][j] * block1[8*i+k];
-            block2[8*i+j] = sum;
-        }
-    }
-
-    /* idct4 */
-    for(i=0;i<8;i++) {
-        for(j=0;j<4;j++) {
-            /* top */
-            sum = 0;
-            for(k=0;k<4;k++)
-                sum += c4[k][j] * block2[8*(2*k)+i];
-            block3[8*(2*j)+i] = sum;
-
-            /* bottom */
-            sum = 0;
-            for(k=0;k<4;k++)
-                sum += c4[k][j] * block2[8*(2*k+1)+i];
-            block3[8*(2*j+1)+i] = sum;
-        }
-    }
-
-    /* clamp and store the result */
-    for(i=0;i<8;i++) {
-        for(j=0;j<8;j++) {
-            v = block3[8*i+j];
-            if (v < 0)
-                v = 0;
-            else if (v > 255)
-                v = 255;
-            dest[i * linesize + j] = (int)rint(v);
-        }
-    }
-}
-
-void idct248_error(const char *name,
-                    void (*idct248_put)(uint8_t *dest, int line_size, int16_t *block))
-{
-    int it, i, it1, ti, ti1, err_max, v;
-
-    srandom(0);
-
-    /* just one test to see if code is correct (precision is less
-       important here) */
-    err_max = 0;
-    for(it=0;it<NB_ITS;it++) {
-
-        /* XXX: use forward transform to generate values */
-        for(i=0;i<64;i++)
-            block1[i] = (random() % 256) - 128;
-        block1[0] += 1024;
-
-        for(i=0; i<64; i++)
-            block[i]= block1[i];
-        idct248_ref(img_dest1, 8, block);
-
-        for(i=0; i<64; i++)
-            block[i]= block1[i];
-        idct248_put(img_dest, 8, block);
-
-        for(i=0;i<64;i++) {
-            v = abs((int)img_dest[i] - (int)img_dest1[i]);
-            if (v == 255)
-                printf("%d %d\n", img_dest[i], img_dest1[i]);
-            if (v > err_max)
-                err_max = v;
-        }
-#if 0
-        printf("ref=\n");
-        for(i=0;i<8;i++) {
-            int j;
-            for(j=0;j<8;j++) {
-                printf(" %3d", img_dest1[i*8+j]);
-            }
-            printf("\n");
-        }
-
-        printf("out=\n");
-        for(i=0;i<8;i++) {
-            int j;
-            for(j=0;j<8;j++) {
-                printf(" %3d", img_dest[i*8+j]);
-            }
-            printf("\n");
-        }
-#endif
-    }
-    printf("%s %s: err_inf=%d\n",
-           1 ? "IDCT248" : "DCT248",
-           name, err_max);
-
-    ti = gettime();
-    it1 = 0;
-    do {
-        for(it=0;it<NB_ITS_SPEED;it++) {
-            for(i=0; i<64; i++)
-                block[i]= block1[i];
-//            memcpy(block, block1, sizeof(DCTELEM) * 64);
-// dont memcpy especially not fastmemcpy because it does movntq !!!
-            idct248_put(img_dest, 8, block);
-        }
-        it1 += NB_ITS_SPEED;
-        ti1 = gettime() - ti;
-    } while (ti1 < 1000000);
-    emms();
-
-    printf("%s %s: %0.1f kdct/s\n",
-           1 ? "IDCT248" : "DCT248",
-           name, (double)it1 * 1000.0 / (double)ti1);
-}
-
-void help(void)
-{
-    printf("dct-test [-i] [<test-number>]\n"
-           "test-number 0 -> test with random matrixes\n"
-           "            1 -> test with random sparse matrixes\n"
-           "            2 -> do 3. test from mpeg4 std\n"
-           "-i          test IDCT implementations\n"
-           "-4          test IDCT248 implementations\n");
-    exit(1);
-}
-
-int main(int argc, char **argv)
-{
-    int test_idct = 0, test_248_dct = 0;
-    int c,i;
-    int test=1;
-
-    init_fdct();
-    idct_mmx_init();
-
-    for(i=0;i<256;i++) cropTbl[i + MAX_NEG_CROP] = i;
-    for(i=0;i<MAX_NEG_CROP;i++) {
-        cropTbl[i] = 0;
-        cropTbl[i + MAX_NEG_CROP + 256] = 255;
-    }
-
-    for(;;) {
-        c = getopt(argc, argv, "ih4");
-        if (c == -1)
-            break;
-        switch(c) {
-        case 'i':
-            test_idct = 1;
-            break;
-        case '4':
-            test_248_dct = 1;
-            break;
-        default :
-        case 'h':
-            help();
-            break;
-        }
-    }
-
-    if(optind <argc) test= atoi(argv[optind]);
-
-    printf("ffmpeg DCT/IDCT test\n");
-
-    if (test_248_dct) {
-        idct248_error("SIMPLE-C", simple_idct248_put);
-    } else {
-        if (!test_idct) {
-            dct_error("REF-DBL", 0, fdct, fdct, test); /* only to verify code ! */
-            dct_error("IJG-AAN-INT", 0, fdct_ifast, fdct, test);
-            dct_error("IJG-LLM-INT", 0, ff_jpeg_fdct_islow, fdct, test);
-            dct_error("MMX", 0, ff_fdct_mmx, fdct, test);
-            dct_error("MMX2", 0, ff_fdct_mmx2, fdct, test);
-            dct_error("FAAN", 0, ff_faandct, fdct, test);
-        } else {
-            dct_error("REF-DBL", 1, idct, idct, test);
-            dct_error("INT", 1, j_rev_dct, idct, test);
-            dct_error("LIBMPEG2-MMX", 1, ff_mmx_idct, idct, test);
-            dct_error("LIBMPEG2-MMXEXT", 1, ff_mmxext_idct, idct, test);
-            dct_error("SIMPLE-C", 1, simple_idct, idct, test);
-            dct_error("SIMPLE-MMX", 1, ff_simple_idct_mmx, idct, test);
-            dct_error("XVID-MMX", 1, ff_idct_xvid_mmx, idct, test);
-            dct_error("XVID-MMX2", 1, ff_idct_xvid_mmx2, idct, test);
-            //        dct_error("ODIVX-C", 1, odivx_idct_c, idct);
-            //printf(" test against odivx idct\n");
-            //        dct_error("REF", 1, idct, odivx_idct_c);
-            //        dct_error("INT", 1, j_rev_dct, odivx_idct_c);
-            //        dct_error("MMX", 1, ff_mmx_idct, odivx_idct_c);
-            //        dct_error("MMXEXT", 1, ff_mmxext_idct, odivx_idct_c);
-            //        dct_error("SIMPLE-C", 1, simple_idct, odivx_idct_c);
-            //        dct_error("SIMPLE-MMX", 1, ff_simple_idct_mmx, odivx_idct_c);
-            //        dct_error("ODIVX-C", 1, odivx_idct_c, odivx_idct_c);
-        }
-    }
-    return 0;
-}
--- a/src/ffmpeg/libavcodec/dtsdec.c	Mon Mar 12 13:14:40 2007 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,320 +0,0 @@
-/*
- * dtsdec.c : free DTS Coherent Acoustics stream decoder.
- * Copyright (C) 2004 Benjamin Zores <ben@geexbox.org>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#ifdef HAVE_AV_CONFIG_H
-#undef HAVE_AV_CONFIG_H
-#endif
-
-#include "avcodec.h"
-#include <dts.h>
-
-#include <stdlib.h>
-#include <string.h>
-
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-
-#define BUFFER_SIZE 18726
-#define HEADER_SIZE 14
-
-#ifdef LIBDTS_FIXED
-#define CONVERT_LEVEL (1 << 26)
-#define CONVERT_BIAS 0
-#else
-#define CONVERT_LEVEL 1
-#define CONVERT_BIAS 384
-#endif
-
-static inline
-int16_t convert (int32_t i)
-{
-#ifdef LIBDTS_FIXED
-    i >>= 15;
-#else
-    i -= 0x43c00000;
-#endif
-    return (i > 32767) ? 32767 : ((i < -32768) ? -32768 : i);
-}
-
-void
-convert2s16_2 (sample_t * _f, int16_t * s16)
-{
-  int i;
-  int32_t * f = (int32_t *) _f;
-
-  for (i = 0; i < 256; i++)
-    {
-      s16[2*i] = convert (f[i]);
-      s16[2*i+1] = convert (f[i+256]);
-    }
-}
-
-void
-convert2s16_4 (sample_t * _f, int16_t * s16)
-{
-  int i;
-  int32_t * f = (int32_t *) _f;
-
-  for (i = 0; i < 256; i++)
-    {
-      s16[4*i] = convert (f[i]);
-      s16[4*i+1] = convert (f[i+256]);
-      s16[4*i+2] = convert (f[i+512]);
-      s16[4*i+3] = convert (f[i+768]);
-    }
-}
-
-void
-convert2s16_5 (sample_t * _f, int16_t * s16)
-{
-  int i;
-  int32_t * f = (int32_t *) _f;
-
-  for (i = 0; i < 256; i++)
-    {
-      s16[5*i] = convert (f[i]);
-      s16[5*i+1] = convert (f[i+256]);
-      s16[5*i+2] = convert (f[i+512]);
-      s16[5*i+3] = convert (f[i+768]);
-      s16[5*i+4] = convert (f[i+1024]);
-    }
-}
-
-static void
-convert2s16_multi (sample_t * _f, int16_t * s16, int flags)
-{
-  int i;
-  int32_t * f = (int32_t *) _f;
-
-  switch (flags)
-    {
-    case DTS_MONO:
-      for (i = 0; i < 256; i++)
-        {
-          s16[5*i] = s16[5*i+1] = s16[5*i+2] = s16[5*i+3] = 0;
-          s16[5*i+4] = convert (f[i]);
-        }
-      break;
-    case DTS_CHANNEL:
-    case DTS_STEREO:
-    case DTS_DOLBY:
-      convert2s16_2 (_f, s16);
-      break;
-    case DTS_3F:
-      for (i = 0; i < 256; i++)
-        {
-          s16[5*i] = convert (f[i]);
-          s16[5*i+1] = convert (f[i+512]);
-          s16[5*i+2] = s16[5*i+3] = 0;
-          s16[5*i+4] = convert (f[i+256]);
-        }
-      break;
-    case DTS_2F2R:
-      convert2s16_4 (_f, s16);
-      break;
-    case DTS_3F2R:
-      convert2s16_5 (_f, s16);
-      break;
-    case DTS_MONO | DTS_LFE:
-      for (i = 0; i < 256; i++)
-        {
-          s16[6*i] = s16[6*i+1] = s16[6*i+2] = s16[6*i+3] = 0;
-          s16[6*i+4] = convert (f[i+256]);
-          s16[6*i+5] = convert (f[i]);
-        }
-      break;
-    case DTS_CHANNEL | DTS_LFE:
-    case DTS_STEREO | DTS_LFE:
-    case DTS_DOLBY | DTS_LFE:
-      for (i = 0; i < 256; i++)
-        {
-          s16[6*i] = convert (f[i+256]);
-          s16[6*i+1] = convert (f[i+512]);
-          s16[6*i+2] = s16[6*i+3] = s16[6*i+4] = 0;
-          s16[6*i+5] = convert (f[i]);
-        }
-      break;
-    case DTS_3F | DTS_LFE:
-      for (i = 0; i < 256; i++)
-        {
-          s16[6*i] = convert (f[i+256]);
-          s16[6*i+1] = convert (f[i+768]);
-          s16[6*i+2] = s16[6*i+3] = 0;
-          s16[6*i+4] = convert (f[i+512]);
-          s16[6*i+5] = convert (f[i]);
-        }
-      break;
-    case DTS_2F2R | DTS_LFE:
-      for (i = 0; i < 256; i++)
-        {
-          s16[6*i] = convert (f[i+256]);
-          s16[6*i+1] = convert (f[i+512]);
-          s16[6*i+2] = convert (f[i+768]);
-          s16[6*i+3] = convert (f[i+1024]);
-          s16[6*i+4] = 0;
-          s16[6*i+5] = convert (f[i]);
-        }
-      break;
-    case DTS_3F2R | DTS_LFE:
-      for (i = 0; i < 256; i++)
-        {
-          s16[6*i] = convert (f[i+256]);
-          s16[6*i+1] = convert (f[i+768]);
-          s16[6*i+2] = convert (f[i+1024]);
-          s16[6*i+3] = convert (f[i+1280]);
-          s16[6*i+4] = convert (f[i+512]);
-          s16[6*i+5] = convert (f[i]);
-        }
-      break;
-    }
-}
-
-static int
-channels_multi (int flags)
-{
-  if (flags & DTS_LFE)
-    return 6;
-  else if (flags & 1)   /* center channel */
-    return 5;
-  else if ((flags & DTS_CHANNEL_MASK) == DTS_2F2R)
-    return 4;
-  else
-    return 2;
-}
-
-static int
-dts_decode_frame (AVCodecContext *avctx, void *data, int *data_size,
-                  uint8_t *buff, int buff_size)
-{
-  uint8_t * start = buff;
-  uint8_t * end = buff + buff_size;
-  static uint8_t buf[BUFFER_SIZE];
-  static uint8_t * bufptr = buf;
-  static uint8_t * bufpos = buf + HEADER_SIZE;
-
-  static int sample_rate;
-  static int frame_length;
-  static int flags;
-  int bit_rate;
-  int len;
-  dts_state_t *state = avctx->priv_data;
-
-  *data_size = 0;
-
-  while (1)
-    {
-      len = end - start;
-      if (!len)
-        break;
-      if (len > bufpos - bufptr)
-        len = bufpos - bufptr;
-      memcpy (bufptr, start, len);
-      bufptr += len;
-      start += len;
-      if (bufptr != bufpos)
-          return start - buff;
-      if (bufpos != buf + HEADER_SIZE)
-          break;
-
-            {
-              int length;
-
-              length = dts_syncinfo (state, buf, &flags, &sample_rate,
-                                     &bit_rate, &frame_length);
-              if (!length)
-                {
-                  av_log (NULL, AV_LOG_INFO, "skip\n");
-                  for (bufptr = buf; bufptr < buf + HEADER_SIZE-1; bufptr++)
-                    bufptr[0] = bufptr[1];
-                  continue;
-                }
-              bufpos = buf + length;
-            }
-    }
-
-            {
-              level_t level;
-              sample_t bias;
-              int i;
-
-              flags = 2; /* ???????????? */
-              level = CONVERT_LEVEL;
-              bias = CONVERT_BIAS;
-
-              flags |= DTS_ADJUST_LEVEL;
-              if (dts_frame (state, buf, &flags, &level, bias))
-                goto error;
-              avctx->sample_rate = sample_rate;
-              avctx->channels = channels_multi (flags);
-              avctx->bit_rate = bit_rate;
-              for (i = 0; i < dts_blocks_num (state); i++)
-                {
-                  if (dts_block (state))
-                    goto error;
-                  {
-                    int chans;
-                    chans = channels_multi (flags);
-                    convert2s16_multi (dts_samples (state), data,
-                                       flags & (DTS_CHANNEL_MASK | DTS_LFE));
-
-                    data += 256 * sizeof (int16_t) * chans;
-                    *data_size += 256 * sizeof (int16_t) * chans;
-                  }
-                }
-              bufptr = buf;
-              bufpos = buf + HEADER_SIZE;
-              return start-buff;
-            error:
-              av_log (NULL, AV_LOG_ERROR, "error\n");
-              bufptr = buf;
-              bufpos = buf + HEADER_SIZE;
-            }
-
-  return start-buff;
-}
-
-static int
-dts_decode_init (AVCodecContext *avctx)
-{
-  avctx->priv_data = dts_init (0);
-  if (avctx->priv_data == NULL)
-    return -1;
-
-  return 0;
-}
-
-static int
-dts_decode_end (AVCodecContext *s)
-{
-  return 0;
-}
-
-AVCodec dts_decoder = {
-  "dts",
-  CODEC_TYPE_AUDIO,
-  CODEC_ID_DTS,
-  sizeof (dts_state_t *),
-  dts_decode_init,
-  NULL,
-  dts_decode_end,
-  dts_decode_frame,
-};
--- a/src/ffmpeg/libavcodec/eval.c	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/libavcodec/eval.c	Mon Mar 12 13:49:56 2007 -0700
@@ -35,14 +35,6 @@
 #include <string.h>
 #include <math.h>
 
-#ifndef NAN
-  #define NAN 0.0/0.0
-#endif
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
 typedef struct Parser{
     int stack_index;
     char *s;
--- a/src/ffmpeg/libavcodec/fft-test.c	Mon Mar 12 13:14:40 2007 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,297 +0,0 @@
-/*
- * (c) 2002 Fabrice Bellard
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file fft-test.c
- * FFT and MDCT tests.
- */
-
-#include "dsputil.h"
-#include <math.h>
-#include <unistd.h>
-#include <sys/time.h>
-
-int mm_flags;
-
-/* reference fft */
-
-#define MUL16(a,b) ((a) * (b))
-
-#define CMAC(pre, pim, are, aim, bre, bim) \
-{\
-   pre += (MUL16(are, bre) - MUL16(aim, bim));\
-   pim += (MUL16(are, bim) + MUL16(bre, aim));\
-}
-
-FFTComplex *exptab;
-
-void fft_ref_init(int nbits, int inverse)
-{
-    int n, i;
-    float c1, s1, alpha;
-
-    n = 1 << nbits;
-    exptab = av_malloc((n / 2) * sizeof(FFTComplex));
-
-    for(i=0;i<(n/2);i++) {
-        alpha = 2 * M_PI * (float)i / (float)n;
-        c1 = cos(alpha);
-        s1 = sin(alpha);
-        if (!inverse)
-            s1 = -s1;
-        exptab[i].re = c1;
-        exptab[i].im = s1;
-    }
-}
-
-void fft_ref(FFTComplex *tabr, FFTComplex *tab, int nbits)
-{
-    int n, i, j, k, n2;
-    float tmp_re, tmp_im, s, c;
-    FFTComplex *q;
-
-    n = 1 << nbits;
-    n2 = n >> 1;
-    for(i=0;i<n;i++) {
-        tmp_re = 0;
-        tmp_im = 0;
-        q = tab;
-        for(j=0;j<n;j++) {
-            k = (i * j) & (n - 1);
-            if (k >= n2) {
-                c = -exptab[k - n2].re;
-                s = -exptab[k - n2].im;
-            } else {
-                c = exptab[k].re;
-                s = exptab[k].im;
-            }
-            CMAC(tmp_re, tmp_im, c, s, q->re, q->im);
-            q++;
-        }
-        tabr[i].re = tmp_re;
-        tabr[i].im = tmp_im;
-    }
-}
-
-void imdct_ref(float *out, float *in, int n)
-{
-    int k, i, a;
-    float sum, f;
-
-    for(i=0;i<n;i++) {
-        sum = 0;
-        for(k=0;k<n/2;k++) {
-            a = (2 * i + 1 + (n / 2)) * (2 * k + 1);
-            f = cos(M_PI * a / (double)(2 * n));
-            sum += f * in[k];
-        }
-        out[i] = -sum;
-    }
-}
-
-/* NOTE: no normalisation by 1 / N is done */
-void mdct_ref(float *output, float *input, int n)
-{
-    int k, i;
-    float a, s;
-
-    /* do it by hand */
-    for(k=0;k<n/2;k++) {
-        s = 0;
-        for(i=0;i<n;i++) {
-            a = (2*M_PI*(2*i+1+n/2)*(2*k+1) / (4 * n));
-            s += input[i] * cos(a);
-        }
-        output[k] = s;
-    }
-}
-
-
-float frandom(void)
-{
-    return (float)((random() & 0xffff) - 32768) / 32768.0;
-}
-
-int64_t gettime(void)
-{
-    struct timeval tv;
-    gettimeofday(&tv,NULL);
-    return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
-}
-
-void check_diff(float *tab1, float *tab2, int n)
-{
-    int i;
-
-    for(i=0;i<n;i++) {
-        if (fabsf(tab1[i] - tab2[i]) >= 1e-3) {
-            av_log(NULL, AV_LOG_ERROR, "ERROR %d: %f %f\n",
-                   i, tab1[i], tab2[i]);
-        }
-    }
-}
-
-
-void help(void)
-{
-    av_log(NULL, AV_LOG_INFO,"usage: fft-test [-h] [-s] [-i] [-n b]\n"
-           "-h     print this help\n"
-           "-s     speed test\n"
-           "-m     (I)MDCT test\n"
-           "-i     inverse transform test\n"
-           "-n b   set the transform size to 2^b\n"
-           );
-    exit(1);
-}
-
-
-
-int main(int argc, char **argv)
-{
-    FFTComplex *tab, *tab1, *tab_ref;
-    FFTSample *tabtmp, *tab2;
-    int it, i, c;
-    int do_speed = 0;
-    int do_mdct = 0;
-    int do_inverse = 0;
-    FFTContext s1, *s = &s1;
-    MDCTContext m1, *m = &m1;
-    int fft_nbits, fft_size;
-
-    mm_flags = 0;
-    fft_nbits = 9;
-    for(;;) {
-        c = getopt(argc, argv, "hsimn:");
-        if (c == -1)
-            break;
-        switch(c) {
-        case 'h':
-            help();
-            break;
-        case 's':
-            do_speed = 1;
-            break;
-        case 'i':
-            do_inverse = 1;
-            break;
-        case 'm':
-            do_mdct = 1;
-            break;
-        case 'n':
-            fft_nbits = atoi(optarg);
-            break;
-        }
-    }
-
-    fft_size = 1 << fft_nbits;
-    tab = av_malloc(fft_size * sizeof(FFTComplex));
-    tab1 = av_malloc(fft_size * sizeof(FFTComplex));
-    tab_ref = av_malloc(fft_size * sizeof(FFTComplex));
-    tabtmp = av_malloc(fft_size / 2 * sizeof(FFTSample));
-    tab2 = av_malloc(fft_size * sizeof(FFTSample));
-
-    if (do_mdct) {
-        if (do_inverse)
-            av_log(NULL, AV_LOG_INFO,"IMDCT");
-        else
-            av_log(NULL, AV_LOG_INFO,"MDCT");
-        ff_mdct_init(m, fft_nbits, do_inverse);
-    } else {
-        if (do_inverse)
-            av_log(NULL, AV_LOG_INFO,"IFFT");
-        else
-            av_log(NULL, AV_LOG_INFO,"FFT");
-        ff_fft_init(s, fft_nbits, do_inverse);
-        fft_ref_init(fft_nbits, do_inverse);
-    }
-    av_log(NULL, AV_LOG_INFO," %d test\n", fft_size);
-
-    /* generate random data */
-
-    for(i=0;i<fft_size;i++) {
-        tab1[i].re = frandom();
-        tab1[i].im = frandom();
-    }
-
-    /* checking result */
-    av_log(NULL, AV_LOG_INFO,"Checking...\n");
-
-    if (do_mdct) {
-        if (do_inverse) {
-            imdct_ref((float *)tab_ref, (float *)tab1, fft_size);
-            ff_imdct_calc(m, tab2, (float *)tab1, tabtmp);
-            check_diff((float *)tab_ref, tab2, fft_size);
-        } else {
-            mdct_ref((float *)tab_ref, (float *)tab1, fft_size);
-
-            ff_mdct_calc(m, tab2, (float *)tab1, tabtmp);
-
-            check_diff((float *)tab_ref, tab2, fft_size / 2);
-        }
-    } else {
-        memcpy(tab, tab1, fft_size * sizeof(FFTComplex));
-        ff_fft_permute(s, tab);
-        ff_fft_calc(s, tab);
-
-        fft_ref(tab_ref, tab1, fft_nbits);
-        check_diff((float *)tab_ref, (float *)tab, fft_size * 2);
-    }
-
-    /* do a speed test */
-
-    if (do_speed) {
-        int64_t time_start, duration;
-        int nb_its;
-
-        av_log(NULL, AV_LOG_INFO,"Speed test...\n");
-        /* we measure during about 1 seconds */
-        nb_its = 1;
-        for(;;) {
-            time_start = gettime();
-            for(it=0;it<nb_its;it++) {
-                if (do_mdct) {
-                    if (do_inverse) {
-                        ff_imdct_calc(m, (float *)tab, (float *)tab1, tabtmp);
-                    } else {
-                        ff_mdct_calc(m, (float *)tab, (float *)tab1, tabtmp);
-                    }
-                } else {
-                    memcpy(tab, tab1, fft_size * sizeof(FFTComplex));
-                    ff_fft_calc(s, tab);
-                }
-            }
-            duration = gettime() - time_start;
-            if (duration >= 1000000)
-                break;
-            nb_its *= 2;
-        }
-        av_log(NULL, AV_LOG_INFO,"time: %0.1f us/transform [total time=%0.2f s its=%d]\n",
-               (double)duration / nb_its,
-               (double)duration / 1000000.0,
-               nb_its);
-    }
-
-    if (do_mdct) {
-        ff_mdct_end(m);
-    } else {
-        ff_fft_end(s);
-    }
-    return 0;
-}
--- a/src/ffmpeg/libavcodec/gifdec.c	Mon Mar 12 13:14:40 2007 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,500 +0,0 @@
-/*
- * GIF decoder
- * Copyright (c) 2003 Fabrice Bellard.
- * Copyright (c) 2006 Baptiste Coudurier.
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-//#define DEBUG
-
-#include "avcodec.h"
-#include "bytestream.h"
-
-#define MAXBITS                 12
-#define SIZTABLE                (1<<MAXBITS)
-
-#define GCE_DISPOSAL_NONE       0
-#define GCE_DISPOSAL_INPLACE    1
-#define GCE_DISPOSAL_BACKGROUND 2
-#define GCE_DISPOSAL_RESTORE    3
-
-typedef struct GifState {
-    AVFrame picture;
-    int screen_width;
-    int screen_height;
-    int bits_per_pixel;
-    int background_color_index;
-    int transparent_color_index;
-    int color_resolution;
-    uint32_t *image_palette;
-
-    /* after the frame is displayed, the disposal method is used */
-    int gce_disposal;
-    /* delay during which the frame is shown */
-    int gce_delay;
-
-    /* LZW compatible decoder */
-    uint8_t *bytestream;
-    int eob_reached;
-    uint8_t *pbuf, *ebuf;
-    int bbits;
-    unsigned int bbuf;
-
-    int cursize;                /* The current code size */
-    int curmask;
-    int codesize;
-    int clear_code;
-    int end_code;
-    int newcodes;               /* First available code */
-    int top_slot;               /* Highest code for current size */
-    int slot;                   /* Last read code */
-    int fc, oc;
-    uint8_t *sp;
-    uint8_t stack[SIZTABLE];
-    uint8_t suffix[SIZTABLE];
-    uint16_t prefix[SIZTABLE];
-
-    /* aux buffers */
-    uint8_t global_palette[256 * 3];
-    uint8_t local_palette[256 * 3];
-    uint8_t buf[256];
-} GifState;
-
-static const uint8_t gif87a_sig[6] = "GIF87a";
-static const uint8_t gif89a_sig[6] = "GIF89a";
-
-static const uint16_t mask[17] =
-{
-    0x0000, 0x0001, 0x0003, 0x0007,
-    0x000F, 0x001F, 0x003F, 0x007F,
-    0x00FF, 0x01FF, 0x03FF, 0x07FF,
-    0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF
-};
-
-static void GLZWDecodeInit(GifState * s, int csize)
-{
-    /* read buffer */
-    s->eob_reached = 0;
-    s->pbuf = s->buf;
-    s->ebuf = s->buf;
-    s->bbuf = 0;
-    s->bbits = 0;
-
-    /* decoder */
-    s->codesize = csize;
-    s->cursize = s->codesize + 1;
-    s->curmask = mask[s->cursize];
-    s->top_slot = 1 << s->cursize;
-    s->clear_code = 1 << s->codesize;
-    s->end_code = s->clear_code + 1;
-    s->slot = s->newcodes = s->clear_code + 2;
-    s->oc = s->fc = 0;
-    s->sp = s->stack;
-}
-
-/* XXX: optimize */
-static inline int GetCode(GifState * s)
-{
-    int c, sizbuf;
-    uint8_t *ptr;
-
-    while (s->bbits < s->cursize) {
-        ptr = s->pbuf;
-        if (ptr >= s->ebuf) {
-            if (!s->eob_reached) {
-                sizbuf = bytestream_get_byte(&s->bytestream);
-                s->ebuf = s->buf + sizbuf;
-                s->pbuf = s->buf;
-                if (sizbuf > 0) {
-                    bytestream_get_buffer(&s->bytestream, s->buf, sizbuf);
-                } else {
-                    s->eob_reached = 1;
-                }
-            }
-            ptr = s->pbuf;
-        }
-        s->bbuf |= ptr[0] << s->bbits;
-        ptr++;
-        s->pbuf = ptr;
-        s->bbits += 8;
-    }
-    c = s->bbuf & s->curmask;
-    s->bbuf >>= s->cursize;
-    s->bbits -= s->cursize;
-    return c;
-}
-
-/* NOTE: the algorithm here is inspired from the LZW GIF decoder
-   written by Steven A. Bennett in 1987. */
-/* return the number of byte decoded */
-static int GLZWDecode(GifState * s, uint8_t * buf, int len)
-{
-    int l, c, code, oc, fc;
-    uint8_t *sp;
-
-    if (s->end_code < 0)
-        return 0;
-
-    l = len;
-    sp = s->sp;
-    oc = s->oc;
-    fc = s->fc;
-
-    while (sp > s->stack) {
-        *buf++ = *(--sp);
-        if ((--l) == 0)
-            goto the_end;
-    }
-
-    for (;;) {
-        c = GetCode(s);
-        if (c == s->end_code) {
-            s->end_code = -1;
-            break;
-        } else if (c == s->clear_code) {
-            s->cursize = s->codesize + 1;
-            s->curmask = mask[s->cursize];
-            s->slot = s->newcodes;
-            s->top_slot = 1 << s->cursize;
-            while ((c = GetCode(s)) == s->clear_code);
-            if (c == s->end_code) {
-                s->end_code = -1;
-                break;
-            }
-            /* test error */
-            if (c >= s->slot)
-                c = 0;
-            fc = oc = c;
-            *buf++ = c;
-            if ((--l) == 0)
-                break;
-        } else {
-            code = c;
-            if (code >= s->slot) {
-                *sp++ = fc;
-                code = oc;
-            }
-            while (code >= s->newcodes) {
-                *sp++ = s->suffix[code];
-                code = s->prefix[code];
-            }
-            *sp++ = code;
-            if (s->slot < s->top_slot) {
-                s->suffix[s->slot] = fc = code;
-                s->prefix[s->slot++] = oc;
-                oc = c;
-            }
-            if (s->slot >= s->top_slot) {
-                if (s->cursize < MAXBITS) {
-                    s->top_slot <<= 1;
-                    s->curmask = mask[++s->cursize];
-                }
-            }
-            while (sp > s->stack) {
-                *buf++ = *(--sp);
-                if ((--l) == 0)
-                    goto the_end;
-            }
-        }
-    }
-  the_end:
-    s->sp = sp;
-    s->oc = oc;
-    s->fc = fc;
-    return len - l;
-}
-
-static int gif_read_image(GifState *s)
-{
-    int left, top, width, height, bits_per_pixel, code_size, flags;
-    int is_interleaved, has_local_palette, y, pass, y1, linesize, n, i;
-    uint8_t *ptr, *line, *spal, *palette, *ptr1;
-
-    left = bytestream_get_le16(&s->bytestream);
-    top = bytestream_get_le16(&s->bytestream);
-    width = bytestream_get_le16(&s->bytestream);
-    height = bytestream_get_le16(&s->bytestream);
-    flags = bytestream_get_byte(&s->bytestream);
-    is_interleaved = flags & 0x40;
-    has_local_palette = flags & 0x80;
-    bits_per_pixel = (flags & 0x07) + 1;
-#ifdef DEBUG
-    dprintf("gif: image x=%d y=%d w=%d h=%d\n", left, top, width, height);
-#endif
-
-    if (has_local_palette) {
-        bytestream_get_buffer(&s->bytestream, s->local_palette, 3 * (1 << bits_per_pixel));
-        palette = s->local_palette;
-    } else {
-        palette = s->global_palette;
-        bits_per_pixel = s->bits_per_pixel;
-    }
-
-    /* verify that all the image is inside the screen dimensions */
-    if (left + width > s->screen_width ||
-        top + height > s->screen_height)
-        return -EINVAL;
-
-    /* build the palette */
-        n = (1 << bits_per_pixel);
-        spal = palette;
-        for(i = 0; i < n; i++) {
-            s->image_palette[i] = (0xff << 24) |
-                (spal[0] << 16) | (spal[1] << 8) | (spal[2]);
-            spal += 3;
-        }
-        for(; i < 256; i++)
-            s->image_palette[i] = (0xff << 24);
-        /* handle transparency */
-        if (s->transparent_color_index >= 0)
-            s->image_palette[s->transparent_color_index] = 0;
-        line = NULL;
-
-    /* now get the image data */
-    code_size = bytestream_get_byte(&s->bytestream);
-    GLZWDecodeInit(s, code_size);
-
-    /* read all the image */
-    linesize = s->picture.linesize[0];
-    ptr1 = s->picture.data[0] + top * linesize + (left * 3);
-    ptr = ptr1;
-    pass = 0;
-    y1 = 0;
-    for (y = 0; y < height; y++) {
-            GLZWDecode(s, ptr, width);
-        if (is_interleaved) {
-            switch(pass) {
-            default:
-            case 0:
-            case 1:
-                y1 += 8;
-                ptr += linesize * 8;
-                if (y1 >= height) {
-                    y1 = 4;
-                    if (pass == 0)
-                        ptr = ptr1 + linesize * 4;
-                    else
-                        ptr = ptr1 + linesize * 2;
-                    pass++;
-                }
-                break;
-            case 2:
-                y1 += 4;
-                ptr += linesize * 4;
-                if (y1 >= height) {
-                    y1 = 1;
-                    ptr = ptr1 + linesize;
-                    pass++;
-                }
-                break;
-            case 3:
-                y1 += 2;
-                ptr += linesize * 2;
-                break;
-            }
-        } else {
-            ptr += linesize;
-        }
-    }
-    av_free(line);
-
-    /* read the garbage data until end marker is found */
-    while (!s->eob_reached)
-        GetCode(s);
-    return 0;
-}
-
-static int gif_read_extension(GifState *s)
-{
-    int ext_code, ext_len, i, gce_flags, gce_transparent_index;
-
-    /* extension */
-    ext_code = bytestream_get_byte(&s->bytestream);
-    ext_len = bytestream_get_byte(&s->bytestream);
-#ifdef DEBUG
-    dprintf("gif: ext_code=0x%x len=%d\n", ext_code, ext_len);
-#endif
-    switch(ext_code) {
-    case 0xf9:
-        if (ext_len != 4)
-            goto discard_ext;
-        s->transparent_color_index = -1;
-        gce_flags = bytestream_get_byte(&s->bytestream);
-        s->gce_delay = bytestream_get_le16(&s->bytestream);
-        gce_transparent_index = bytestream_get_byte(&s->bytestream);
-        if (gce_flags & 0x01)
-            s->transparent_color_index = gce_transparent_index;
-        else
-            s->transparent_color_index = -1;
-        s->gce_disposal = (gce_flags >> 2) & 0x7;
-#ifdef DEBUG
-        dprintf("gif: gce_flags=%x delay=%d tcolor=%d disposal=%d\n",
-               gce_flags, s->gce_delay,
-               s->transparent_color_index, s->gce_disposal);
-#endif
-        ext_len = bytestream_get_byte(&s->bytestream);
-        break;
-    }
-
-    /* NOTE: many extension blocks can come after */
- discard_ext:
-    while (ext_len != 0) {
-        for (i = 0; i < ext_len; i++)
-            bytestream_get_byte(&s->bytestream);
-        ext_len = bytestream_get_byte(&s->bytestream);
-#ifdef DEBUG
-        dprintf("gif: ext_len1=%d\n", ext_len);
-#endif
-    }
-    return 0;
-}
-
-static int gif_read_header1(GifState *s)
-{
-    uint8_t sig[6];
-    int v, n;
-    int has_global_palette;
-
-    /* read gif signature */
-    bytestream_get_buffer(&s->bytestream, sig, 6);
-    if (memcmp(sig, gif87a_sig, 6) != 0 &&
-        memcmp(sig, gif89a_sig, 6) != 0)
-        return -1;
-
-    /* read screen header */
-    s->transparent_color_index = -1;
-    s->screen_width = bytestream_get_le16(&s->bytestream);
-    s->screen_height = bytestream_get_le16(&s->bytestream);
-    if(   (unsigned)s->screen_width  > 32767
-       || (unsigned)s->screen_height > 32767){
-        av_log(NULL, AV_LOG_ERROR, "picture size too large\n");
-        return -1;
-    }
-
-    v = bytestream_get_byte(&s->bytestream);
-    s->color_resolution = ((v & 0x70) >> 4) + 1;
-    has_global_palette = (v & 0x80);
-    s->bits_per_pixel = (v & 0x07) + 1;
-    s->background_color_index = bytestream_get_byte(&s->bytestream);
-    bytestream_get_byte(&s->bytestream);                /* ignored */
-#ifdef DEBUG
-    dprintf("gif: screen_w=%d screen_h=%d bpp=%d global_palette=%d\n",
-           s->screen_width, s->screen_height, s->bits_per_pixel,
-           has_global_palette);
-#endif
-    if (has_global_palette) {
-        n = 1 << s->bits_per_pixel;
-        bytestream_get_buffer(&s->bytestream, s->global_palette, n * 3);
-    }
-    return 0;
-}
-
-static int gif_parse_next_image(GifState *s)
-{
-    int ret, code;
-
-    for (;;) {
-        code = bytestream_get_byte(&s->bytestream);
-#ifdef DEBUG
-        dprintf("gif: code=%02x '%c'\n", code, code);
-#endif
-        switch (code) {
-        case ',':
-            if (gif_read_image(s) < 0)
-                return -1;
-            ret = 0;
-            goto the_end;
-        case ';':
-            /* end of image */
-            ret = -1;
-            goto the_end;
-        case '!':
-            if (gif_read_extension(s) < 0)
-                return -1;
-            break;
-        case EOF:
-        default:
-            /* error or errneous EOF */
-            ret = -1;
-            goto the_end;
-        }
-    }
-  the_end:
-    return ret;
-}
-
-static int gif_decode_init(AVCodecContext *avctx)
-{
-    GifState *s = avctx->priv_data;
-
-    avcodec_get_frame_defaults(&s->picture);
-    avctx->coded_frame= &s->picture;
-    s->picture.data[0] = NULL;
-    return 0;
-}
-
-static int gif_decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8_t *buf, int buf_size)
-{
-    GifState *s = avctx->priv_data;
-    AVFrame *picture = data;
-    int ret;
-
-    s->bytestream = buf;
-    if (gif_read_header1(s) < 0)
-        return -1;
-
-    avctx->pix_fmt = PIX_FMT_PAL8;
-    if (avcodec_check_dimensions(avctx, s->screen_width, s->screen_height))
-        return -1;
-    avcodec_set_dimensions(avctx, s->screen_width, s->screen_height);
-
-    if (s->picture.data[0])
-        avctx->release_buffer(avctx, &s->picture);
-    if (avctx->get_buffer(avctx, &s->picture) < 0) {
-        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
-        return -1;
-    }
-    s->image_palette = (uint32_t *)s->picture.data[1];
-    ret = gif_parse_next_image(s);
-    if (ret < 0)
-        return ret;
-
-    *picture = s->picture;
-    *data_size = sizeof(AVPicture);
-    return 0;
-}
-
-static int gif_decode_close(AVCodecContext *avctx)
-{
-    GifState *s = avctx->priv_data;
-
-    if(s->picture.data[0])
-        avctx->release_buffer(avctx, &s->picture);
-    return 0;
-}
-
-AVCodec gif_decoder = {
-    "gif",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_GIF,
-    sizeof(GifState),
-    gif_decode_init,
-    NULL,
-    gif_decode_close,
-    gif_decode_frame,
-};
--- a/src/ffmpeg/libavcodec/mjpeg.c	Mon Mar 12 13:14:40 2007 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2464 +0,0 @@
-/*
- * MJPEG encoder and decoder
- * Copyright (c) 2000, 2001 Fabrice Bellard.
- * Copyright (c) 2003 Alex Beregszaszi
- * Copyright (c) 2003-2004 Michael Niedermayer
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Support for external huffman table, various fixes (AVID workaround),
- * aspecting, new decode_frame mechanism and apple mjpeg-b support
- *                                  by Alex Beregszaszi <alex@naxine.org>
- */
-
-/**
- * @file mjpeg.c
- * MJPEG encoder and decoder.
- */
-
-//#define DEBUG
-#include <assert.h>
-
-#include "avcodec.h"
-#include "dsputil.h"
-#include "mpegvideo.h"
-
-/* use two quantizer tables (one for luminance and one for chrominance) */
-/* not yet working */
-#undef TWOMATRIXES
-
-typedef struct MJpegContext {
-    uint8_t huff_size_dc_luminance[12]; //FIXME use array [3] instead of lumi / chrom, for easier addressing
-    uint16_t huff_code_dc_luminance[12];
-    uint8_t huff_size_dc_chrominance[12];
-    uint16_t huff_code_dc_chrominance[12];
-
-    uint8_t huff_size_ac_luminance[256];
-    uint16_t huff_code_ac_luminance[256];
-    uint8_t huff_size_ac_chrominance[256];
-    uint16_t huff_code_ac_chrominance[256];
-} MJpegContext;
-
-/* JPEG marker codes */
-typedef enum {
-    /* start of frame */
-    SOF0  = 0xc0,       /* baseline */
-    SOF1  = 0xc1,       /* extended sequential, huffman */
-    SOF2  = 0xc2,       /* progressive, huffman */
-    SOF3  = 0xc3,       /* lossless, huffman */
-
-    SOF5  = 0xc5,       /* differential sequential, huffman */
-    SOF6  = 0xc6,       /* differential progressive, huffman */
-    SOF7  = 0xc7,       /* differential lossless, huffman */
-    JPG   = 0xc8,       /* reserved for JPEG extension */
-    SOF9  = 0xc9,       /* extended sequential, arithmetic */
-    SOF10 = 0xca,       /* progressive, arithmetic */
-    SOF11 = 0xcb,       /* lossless, arithmetic */
-
-    SOF13 = 0xcd,       /* differential sequential, arithmetic */
-    SOF14 = 0xce,       /* differential progressive, arithmetic */
-    SOF15 = 0xcf,       /* differential lossless, arithmetic */
-
-    DHT   = 0xc4,       /* define huffman tables */
-
-    DAC   = 0xcc,       /* define arithmetic-coding conditioning */
-
-    /* restart with modulo 8 count "m" */
-    RST0  = 0xd0,
-    RST1  = 0xd1,
-    RST2  = 0xd2,
-    RST3  = 0xd3,
-    RST4  = 0xd4,
-    RST5  = 0xd5,
-    RST6  = 0xd6,
-    RST7  = 0xd7,
-
-    SOI   = 0xd8,       /* start of image */
-    EOI   = 0xd9,       /* end of image */
-    SOS   = 0xda,       /* start of scan */
-    DQT   = 0xdb,       /* define quantization tables */
-    DNL   = 0xdc,       /* define number of lines */
-    DRI   = 0xdd,       /* define restart interval */
-    DHP   = 0xde,       /* define hierarchical progression */
-    EXP   = 0xdf,       /* expand reference components */
-
-    APP0  = 0xe0,
-    APP1  = 0xe1,
-    APP2  = 0xe2,
-    APP3  = 0xe3,
-    APP4  = 0xe4,
-    APP5  = 0xe5,
-    APP6  = 0xe6,
-    APP7  = 0xe7,
-    APP8  = 0xe8,
-    APP9  = 0xe9,
-    APP10 = 0xea,
-    APP11 = 0xeb,
-    APP12 = 0xec,
-    APP13 = 0xed,
-    APP14 = 0xee,
-    APP15 = 0xef,
-
-    JPG0  = 0xf0,
-    JPG1  = 0xf1,
-    JPG2  = 0xf2,
-    JPG3  = 0xf3,
-    JPG4  = 0xf4,
-    JPG5  = 0xf5,
-    JPG6  = 0xf6,
-    SOF48 = 0xf7,       ///< JPEG-LS
-    LSE   = 0xf8,       ///< JPEG-LS extension parameters
-    JPG9  = 0xf9,
-    JPG10 = 0xfa,
-    JPG11 = 0xfb,
-    JPG12 = 0xfc,
-    JPG13 = 0xfd,
-
-    COM   = 0xfe,       /* comment */
-
-    TEM   = 0x01,       /* temporary private use for arithmetic coding */
-
-    /* 0x02 -> 0xbf reserved */
-} JPEG_MARKER;
-
-#if 0
-/* These are the sample quantization tables given in JPEG spec section K.1.
- * The spec says that the values given produce "good" quality, and
- * when divided by 2, "very good" quality.
- */
-static const unsigned char std_luminance_quant_tbl[64] = {
-    16,  11,  10,  16,  24,  40,  51,  61,
-    12,  12,  14,  19,  26,  58,  60,  55,
-    14,  13,  16,  24,  40,  57,  69,  56,
-    14,  17,  22,  29,  51,  87,  80,  62,
-    18,  22,  37,  56,  68, 109, 103,  77,
-    24,  35,  55,  64,  81, 104, 113,  92,
-    49,  64,  78,  87, 103, 121, 120, 101,
-    72,  92,  95,  98, 112, 100, 103,  99
-};
-static const unsigned char std_chrominance_quant_tbl[64] = {
-    17,  18,  24,  47,  99,  99,  99,  99,
-    18,  21,  26,  66,  99,  99,  99,  99,
-    24,  26,  56,  99,  99,  99,  99,  99,
-    47,  66,  99,  99,  99,  99,  99,  99,
-    99,  99,  99,  99,  99,  99,  99,  99,
-    99,  99,  99,  99,  99,  99,  99,  99,
-    99,  99,  99,  99,  99,  99,  99,  99,
-    99,  99,  99,  99,  99,  99,  99,  99
-};
-#endif
-
-/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
-/* IMPORTANT: these are only valid for 8-bit data precision! */
-static const uint8_t bits_dc_luminance[17] =
-{ /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
-static const uint8_t val_dc_luminance[] =
-{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
-
-static const uint8_t bits_dc_chrominance[17] =
-{ /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };
-static const uint8_t val_dc_chrominance[] =
-{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
-
-static const uint8_t bits_ac_luminance[17] =
-{ /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
-static const uint8_t val_ac_luminance[] =
-{ 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,
-  0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61, 0x07,
-  0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xa1, 0x08,
-  0x23, 0x42, 0xb1, 0xc1, 0x15, 0x52, 0xd1, 0xf0,
-  0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0a, 0x16,
-  0x17, 0x18, 0x19, 0x1a, 0x25, 0x26, 0x27, 0x28,
-  0x29, 0x2a, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
-  0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
-  0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
-  0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
-  0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
-  0x7a, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
-  0x8a, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98,
-  0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
-  0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6,
-  0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3, 0xc4, 0xc5,
-  0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2, 0xd3, 0xd4,
-  0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xe1, 0xe2,
-  0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea,
-  0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-  0xf9, 0xfa
-};
-
-static const uint8_t bits_ac_chrominance[17] =
-{ /* 0-base */ 0, 0, 2, 1, 2, 4, 4, 3, 4, 7, 5, 4, 4, 0, 1, 2, 0x77 };
-
-static const uint8_t val_ac_chrominance[] =
-{ 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05, 0x21,
-  0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71,
-  0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42, 0x91,
-  0xa1, 0xb1, 0xc1, 0x09, 0x23, 0x33, 0x52, 0xf0,
-  0x15, 0x62, 0x72, 0xd1, 0x0a, 0x16, 0x24, 0x34,
-  0xe1, 0x25, 0xf1, 0x17, 0x18, 0x19, 0x1a, 0x26,
-  0x27, 0x28, 0x29, 0x2a, 0x35, 0x36, 0x37, 0x38,
-  0x39, 0x3a, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
-  0x49, 0x4a, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
-  0x59, 0x5a, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
-  0x69, 0x6a, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
-  0x79, 0x7a, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
-  0x88, 0x89, 0x8a, 0x92, 0x93, 0x94, 0x95, 0x96,
-  0x97, 0x98, 0x99, 0x9a, 0xa2, 0xa3, 0xa4, 0xa5,
-  0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xb2, 0xb3, 0xb4,
-  0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xc2, 0xc3,
-  0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xd2,
-  0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda,
-  0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
-  0xea, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
-  0xf9, 0xfa
-};
-
-/* isn't this function nicer than the one in the libjpeg ? */
-static void build_huffman_codes(uint8_t *huff_size, uint16_t *huff_code,
-                                const uint8_t *bits_table, const uint8_t *val_table)
-{
-    int i, j, k,nb, code, sym;
-
-    code = 0;
-    k = 0;
-    for(i=1;i<=16;i++) {
-        nb = bits_table[i];
-        for(j=0;j<nb;j++) {
-            sym = val_table[k++];
-            huff_size[sym] = i;
-            huff_code[sym] = code;
-            code++;
-        }
-        code <<= 1;
-    }
-}
-
-#ifdef CONFIG_ENCODERS
-int mjpeg_init(MpegEncContext *s)
-{
-    MJpegContext *m;
-
-    m = av_malloc(sizeof(MJpegContext));
-    if (!m)
-        return -1;
-
-    s->min_qcoeff=-1023;
-    s->max_qcoeff= 1023;
-
-    /* build all the huffman tables */
-    build_huffman_codes(m->huff_size_dc_luminance,
-                        m->huff_code_dc_luminance,
-                        bits_dc_luminance,
-                        val_dc_luminance);
-    build_huffman_codes(m->huff_size_dc_chrominance,
-                        m->huff_code_dc_chrominance,
-                        bits_dc_chrominance,
-                        val_dc_chrominance);
-    build_huffman_codes(m->huff_size_ac_luminance,
-                        m->huff_code_ac_luminance,
-                        bits_ac_luminance,
-                        val_ac_luminance);
-    build_huffman_codes(m->huff_size_ac_chrominance,
-                        m->huff_code_ac_chrominance,
-                        bits_ac_chrominance,
-                        val_ac_chrominance);
-
-    s->mjpeg_ctx = m;
-    return 0;
-}
-
-void mjpeg_close(MpegEncContext *s)
-{
-    av_free(s->mjpeg_ctx);
-}
-#endif //CONFIG_ENCODERS
-
-#define PREDICT(ret, topleft, top, left, predictor)\
-    switch(predictor){\
-        case 1: ret= left; break;\
-        case 2: ret= top; break;\
-        case 3: ret= topleft; break;\
-        case 4: ret= left   +   top - topleft; break;\
-        case 5: ret= left   + ((top - topleft)>>1); break;\
-        case 6: ret= top + ((left   - topleft)>>1); break;\
-        default:\
-        case 7: ret= (left + top)>>1; break;\
-    }
-
-#ifdef CONFIG_ENCODERS
-static inline void put_marker(PutBitContext *p, int code)
-{
-    put_bits(p, 8, 0xff);
-    put_bits(p, 8, code);
-}
-
-/* table_class: 0 = DC coef, 1 = AC coefs */
-static int put_huffman_table(MpegEncContext *s, int table_class, int table_id,
-                             const uint8_t *bits_table, const uint8_t *value_table)
-{
-    PutBitContext *p = &s->pb;
-    int n, i;
-
-    put_bits(p, 4, table_class);
-    put_bits(p, 4, table_id);
-
-    n = 0;
-    for(i=1;i<=16;i++) {
-        n += bits_table[i];
-        put_bits(p, 8, bits_table[i]);
-    }
-
-    for(i=0;i<n;i++)
-        put_bits(p, 8, value_table[i]);
-
-    return n + 17;
-}
-
-static void jpeg_table_header(MpegEncContext *s)
-{
-    PutBitContext *p = &s->pb;
-    int i, j, size;
-    uint8_t *ptr;
-
-    /* quant matrixes */
-    put_marker(p, DQT);
-#ifdef TWOMATRIXES
-    put_bits(p, 16, 2 + 2 * (1 + 64));
-#else
-    put_bits(p, 16, 2 + 1 * (1 + 64));
-#endif
-    put_bits(p, 4, 0); /* 8 bit precision */
-    put_bits(p, 4, 0); /* table 0 */
-    for(i=0;i<64;i++) {
-        j = s->intra_scantable.permutated[i];
-        put_bits(p, 8, s->intra_matrix[j]);
-    }
-#ifdef TWOMATRIXES
-    put_bits(p, 4, 0); /* 8 bit precision */
-    put_bits(p, 4, 1); /* table 1 */
-    for(i=0;i<64;i++) {
-        j = s->intra_scantable.permutated[i];
-        put_bits(p, 8, s->chroma_intra_matrix[j]);
-    }
-#endif
-
-    /* huffman table */
-    put_marker(p, DHT);
-    flush_put_bits(p);
-    ptr = pbBufPtr(p);
-    put_bits(p, 16, 0); /* patched later */
-    size = 2;
-    size += put_huffman_table(s, 0, 0, bits_dc_luminance, val_dc_luminance);
-    size += put_huffman_table(s, 0, 1, bits_dc_chrominance, val_dc_chrominance);
-
-    size += put_huffman_table(s, 1, 0, bits_ac_luminance, val_ac_luminance);
-    size += put_huffman_table(s, 1, 1, bits_ac_chrominance, val_ac_chrominance);
-    ptr[0] = size >> 8;
-    ptr[1] = size;
-}
-
-static void jpeg_put_comments(MpegEncContext *s)
-{
-    PutBitContext *p = &s->pb;
-    int size;
-    uint8_t *ptr;
-
-    if (s->aspect_ratio_info /* && !lossless */)
-    {
-    /* JFIF header */
-    put_marker(p, APP0);
-    put_bits(p, 16, 16);
-    ff_put_string(p, "JFIF", 1); /* this puts the trailing zero-byte too */
-    put_bits(p, 16, 0x0201); /* v 1.02 */
-    put_bits(p, 8, 0); /* units type: 0 - aspect ratio */
-    put_bits(p, 16, s->avctx->sample_aspect_ratio.num);
-    put_bits(p, 16, s->avctx->sample_aspect_ratio.den);
-    put_bits(p, 8, 0); /* thumbnail width */
-    put_bits(p, 8, 0); /* thumbnail height */
-    }
-
-    /* comment */
-    if(!(s->flags & CODEC_FLAG_BITEXACT)){
-        put_marker(p, COM);
-        flush_put_bits(p);
-        ptr = pbBufPtr(p);
-        put_bits(p, 16, 0); /* patched later */
-        ff_put_string(p, LIBAVCODEC_IDENT, 1);
-        size = strlen(LIBAVCODEC_IDENT)+3;
-        ptr[0] = size >> 8;
-        ptr[1] = size;
-    }
-
-    if(  s->avctx->pix_fmt == PIX_FMT_YUV420P
-       ||s->avctx->pix_fmt == PIX_FMT_YUV422P
-       ||s->avctx->pix_fmt == PIX_FMT_YUV444P){
-        put_marker(p, COM);
-        flush_put_bits(p);
-        ptr = pbBufPtr(p);
-        put_bits(p, 16, 0); /* patched later */
-        ff_put_string(p, "CS=ITU601", 1);
-        size = strlen("CS=ITU601")+3;
-        ptr[0] = size >> 8;
-        ptr[1] = size;
-    }
-}
-
-void mjpeg_picture_header(MpegEncContext *s)
-{
-    const int lossless= s->avctx->codec_id != CODEC_ID_MJPEG;
-    const int ls      = s->avctx->codec_id == CODEC_ID_JPEGLS;
-
-    assert(!(ls && s->mjpeg_write_tables));
-
-    put_marker(&s->pb, SOI);
-
-    if (!s->mjpeg_data_only_frames)
-    {
-    jpeg_put_comments(s);
-
-    if (s->mjpeg_write_tables) jpeg_table_header(s);
-
-    switch(s->avctx->codec_id){
-    case CODEC_ID_MJPEG:  put_marker(&s->pb, SOF0 ); break;
-    case CODEC_ID_LJPEG:  put_marker(&s->pb, SOF3 ); break;
-    case CODEC_ID_JPEGLS: put_marker(&s->pb, SOF48); break;
-    default: assert(0);
-    }
-
-    put_bits(&s->pb, 16, 17);
-    if(lossless && s->avctx->pix_fmt == PIX_FMT_RGBA32)
-        put_bits(&s->pb, 8, 9); /* 9 bits/component RCT */
-    else
-        put_bits(&s->pb, 8, 8); /* 8 bits/component */
-    put_bits(&s->pb, 16, s->height);
-    put_bits(&s->pb, 16, s->width);
-    put_bits(&s->pb, 8, 3); /* 3 components */
-
-    /* Y component */
-    put_bits(&s->pb, 8, 1); /* component number */
-    put_bits(&s->pb, 4, s->mjpeg_hsample[0]); /* H factor */
-    put_bits(&s->pb, 4, s->mjpeg_vsample[0]); /* V factor */
-    put_bits(&s->pb, 8, 0); /* select matrix */
-
-    /* Cb component */
-    put_bits(&s->pb, 8, 2); /* component number */
-    put_bits(&s->pb, 4, s->mjpeg_hsample[1]); /* H factor */
-    put_bits(&s->pb, 4, s->mjpeg_vsample[1]); /* V factor */
-#ifdef TWOMATRIXES
-    put_bits(&s->pb, 8, lossless ? 0 : 1); /* select matrix */
-#else
-    put_bits(&s->pb, 8, 0); /* select matrix */
-#endif
-
-    /* Cr component */
-    put_bits(&s->pb, 8, 3); /* component number */
-    put_bits(&s->pb, 4, s->mjpeg_hsample[2]); /* H factor */
-    put_bits(&s->pb, 4, s->mjpeg_vsample[2]); /* V factor */
-#ifdef TWOMATRIXES
-    put_bits(&s->pb, 8, lossless ? 0 : 1); /* select matrix */
-#else
-    put_bits(&s->pb, 8, 0); /* select matrix */
-#endif
-    }
-
-    /* scan header */
-    put_marker(&s->pb, SOS);
-    put_bits(&s->pb, 16, 12); /* length */
-    put_bits(&s->pb, 8, 3); /* 3 components */
-
-    /* Y component */
-    put_bits(&s->pb, 8, 1); /* index */
-    put_bits(&s->pb, 4, 0); /* DC huffman table index */
-    put_bits(&s->pb, 4, 0); /* AC huffman table index */
-
-    /* Cb component */
-    put_bits(&s->pb, 8, 2); /* index */
-    put_bits(&s->pb, 4, 1); /* DC huffman table index */
-    put_bits(&s->pb, 4, lossless ? 0 : 1); /* AC huffman table index */
-
-    /* Cr component */
-    put_bits(&s->pb, 8, 3); /* index */
-    put_bits(&s->pb, 4, 1); /* DC huffman table index */
-    put_bits(&s->pb, 4, lossless ? 0 : 1); /* AC huffman table index */
-
-    put_bits(&s->pb, 8, (lossless && !ls) ? s->avctx->prediction_method+1 : 0); /* Ss (not used) */
-
-    switch(s->avctx->codec_id){
-    case CODEC_ID_MJPEG:  put_bits(&s->pb, 8, 63); break; /* Se (not used) */
-    case CODEC_ID_LJPEG:  put_bits(&s->pb, 8,  0); break; /* not used */
-    case CODEC_ID_JPEGLS: put_bits(&s->pb, 8,  1); break; /* ILV = line interleaved */
-    default: assert(0);
-    }
-
-    put_bits(&s->pb, 8, 0); /* Ah/Al (not used) */
-
-    //FIXME DC/AC entropy table selectors stuff in jpegls
-}
-
-static void escape_FF(MpegEncContext *s, int start)
-{
-    int size= put_bits_count(&s->pb) - start*8;
-    int i, ff_count;
-    uint8_t *buf= s->pb.buf + start;
-    int align= (-(size_t)(buf))&3;
-
-    assert((size&7) == 0);
-    size >>= 3;
-
-    ff_count=0;
-    for(i=0; i<size && i<align; i++){
-        if(buf[i]==0xFF) ff_count++;
-    }
-    for(; i<size-15; i+=16){
-        int acc, v;
-
-        v= *(uint32_t*)(&buf[i]);
-        acc= (((v & (v>>4))&0x0F0F0F0F)+0x01010101)&0x10101010;
-        v= *(uint32_t*)(&buf[i+4]);
-        acc+=(((v & (v>>4))&0x0F0F0F0F)+0x01010101)&0x10101010;
-        v= *(uint32_t*)(&buf[i+8]);
-        acc+=(((v & (v>>4))&0x0F0F0F0F)+0x01010101)&0x10101010;
-        v= *(uint32_t*)(&buf[i+12]);
-        acc+=(((v & (v>>4))&0x0F0F0F0F)+0x01010101)&0x10101010;
-
-        acc>>=4;
-        acc+= (acc>>16);
-        acc+= (acc>>8);
-        ff_count+= acc&0xFF;
-    }
-    for(; i<size; i++){
-        if(buf[i]==0xFF) ff_count++;
-    }
-
-    if(ff_count==0) return;
-
-    /* skip put bits */
-    for(i=0; i<ff_count-3; i+=4)
-        put_bits(&s->pb, 32, 0);
-    put_bits(&s->pb, (ff_count-i)*8, 0);
-    flush_put_bits(&s->pb);
-
-    for(i=size-1; ff_count; i--){
-        int v= buf[i];
-
-        if(v==0xFF){
-//printf("%d %d\n", i, ff_count);
-            buf[i+ff_count]= 0;
-            ff_count--;
-        }
-
-        buf[i+ff_count]= v;
-    }
-}
-
-void ff_mjpeg_stuffing(PutBitContext * pbc)
-{
-    int length;
-    length= (-put_bits_count(pbc))&7;
-    if(length) put_bits(pbc, length, (1<<length)-1);
-}
-
-void mjpeg_picture_trailer(MpegEncContext *s)
-{
-    ff_mjpeg_stuffing(&s->pb);
-    flush_put_bits(&s->pb);
-
-    assert((s->header_bits&7)==0);
-
-    escape_FF(s, s->header_bits>>3);
-
-    put_marker(&s->pb, EOI);
-}
-
-static inline void mjpeg_encode_dc(MpegEncContext *s, int val,
-                                   uint8_t *huff_size, uint16_t *huff_code)
-{
-    int mant, nbits;
-
-    if (val == 0) {
-        put_bits(&s->pb, huff_size[0], huff_code[0]);
-    } else {
-        mant = val;
-        if (val < 0) {
-            val = -val;
-            mant--;
-        }
-
-        nbits= av_log2_16bit(val) + 1;
-
-        put_bits(&s->pb, huff_size[nbits], huff_code[nbits]);
-
-        put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1));
-    }
-}
-
-static void encode_block(MpegEncContext *s, DCTELEM *block, int n)
-{
-    int mant, nbits, code, i, j;
-    int component, dc, run, last_index, val;
-    MJpegContext *m = s->mjpeg_ctx;
-    uint8_t *huff_size_ac;
-    uint16_t *huff_code_ac;
-
-    /* DC coef */
-    component = (n <= 3 ? 0 : (n&1) + 1);
-    dc = block[0]; /* overflow is impossible */
-    val = dc - s->last_dc[component];
-    if (n < 4) {
-        mjpeg_encode_dc(s, val, m->huff_size_dc_luminance, m->huff_code_dc_luminance);
-        huff_size_ac = m->huff_size_ac_luminance;
-        huff_code_ac = m->huff_code_ac_luminance;
-    } else {
-        mjpeg_encode_dc(s, val, m->huff_size_dc_chrominance, m->huff_code_dc_chrominance);
-        huff_size_ac = m->huff_size_ac_chrominance;
-        huff_code_ac = m->huff_code_ac_chrominance;
-    }
-    s->last_dc[component] = dc;
-
-    /* AC coefs */
-
-    run = 0;
-    last_index = s->block_last_index[n];
-    for(i=1;i<=last_index;i++) {
-        j = s->intra_scantable.permutated[i];
-        val = block[j];
-        if (val == 0) {
-            run++;
-        } else {
-            while (run >= 16) {
-                put_bits(&s->pb, huff_size_ac[0xf0], huff_code_ac[0xf0]);
-                run -= 16;
-            }
-            mant = val;
-            if (val < 0) {
-                val = -val;
-                mant--;
-            }
-
-            nbits= av_log2(val) + 1;
-            code = (run << 4) | nbits;
-
-            put_bits(&s->pb, huff_size_ac[code], huff_code_ac[code]);
-
-            put_bits(&s->pb, nbits, mant & ((1 << nbits) - 1));
-            run = 0;
-        }
-    }
-
-    /* output EOB only if not already 64 values */
-    if (last_index < 63 || run != 0)
-        put_bits(&s->pb, huff_size_ac[0], huff_code_ac[0]);
-}
-
-void mjpeg_encode_mb(MpegEncContext *s,
-                     DCTELEM block[6][64])
-{
-    int i;
-    for(i=0;i<5;i++) {
-        encode_block(s, block[i], i);
-    }
-    if (s->chroma_format == CHROMA_420) {
-        encode_block(s, block[5], 5);
-    } else {
-        encode_block(s, block[6], 6);
-        encode_block(s, block[5], 5);
-        encode_block(s, block[7], 7);
-    }
-}
-
-static int encode_picture_lossless(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
-    MpegEncContext * const s = avctx->priv_data;
-    MJpegContext * const m = s->mjpeg_ctx;
-    AVFrame *pict = data;
-    const int width= s->width;
-    const int height= s->height;
-    AVFrame * const p= (AVFrame*)&s->current_picture;
-    const int predictor= avctx->prediction_method+1;
-
-    init_put_bits(&s->pb, buf, buf_size);
-
-    *p = *pict;
-    p->pict_type= FF_I_TYPE;
-    p->key_frame= 1;
-
-    mjpeg_picture_header(s);
-
-    s->header_bits= put_bits_count(&s->pb);
-
-    if(avctx->pix_fmt == PIX_FMT_RGBA32){
-        int x, y, i;
-        const int linesize= p->linesize[0];
-        uint16_t (*buffer)[4]= (void *) s->rd_scratchpad;
-        int left[3], top[3], topleft[3];
-
-        for(i=0; i<3; i++){
-            buffer[0][i]= 1 << (9 - 1);
-        }
-
-        for(y = 0; y < height; y++) {
-            const int modified_predictor= y ? predictor : 1;
-            uint8_t *ptr = p->data[0] + (linesize * y);
-
-            if(s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < width*3*4){
-                av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n");
-                return -1;
-            }
-
-            for(i=0; i<3; i++){
-                top[i]= left[i]= topleft[i]= buffer[0][i];
-            }
-            for(x = 0; x < width; x++) {
-                buffer[x][1] = ptr[4*x+0] - ptr[4*x+1] + 0x100;
-                buffer[x][2] = ptr[4*x+2] - ptr[4*x+1] + 0x100;
-                buffer[x][0] = (ptr[4*x+0] + 2*ptr[4*x+1] + ptr[4*x+2])>>2;
-
-                for(i=0;i<3;i++) {
-                    int pred, diff;
-
-                    PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);
-
-                    topleft[i]= top[i];
-                    top[i]= buffer[x+1][i];
-
-                    left[i]= buffer[x][i];
-
-                    diff= ((left[i] - pred + 0x100)&0x1FF) - 0x100;
-
-                    if(i==0)
-                        mjpeg_encode_dc(s, diff, m->huff_size_dc_luminance, m->huff_code_dc_luminance); //FIXME ugly
-                    else
-                        mjpeg_encode_dc(s, diff, m->huff_size_dc_chrominance, m->huff_code_dc_chrominance);
-                }
-            }
-        }
-    }else{
-        int mb_x, mb_y, i;
-        const int mb_width  = (width  + s->mjpeg_hsample[0] - 1) / s->mjpeg_hsample[0];
-        const int mb_height = (height + s->mjpeg_vsample[0] - 1) / s->mjpeg_vsample[0];
-
-        for(mb_y = 0; mb_y < mb_height; mb_y++) {
-            if(s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < mb_width * 4 * 3 * s->mjpeg_hsample[0] * s->mjpeg_vsample[0]){
-                av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n");
-                return -1;
-            }
-            for(mb_x = 0; mb_x < mb_width; mb_x++) {
-                if(mb_x==0 || mb_y==0){
-                    for(i=0;i<3;i++) {
-                        uint8_t *ptr;
-                        int x, y, h, v, linesize;
-                        h = s->mjpeg_hsample[i];
-                        v = s->mjpeg_vsample[i];
-                        linesize= p->linesize[i];
-
-                        for(y=0; y<v; y++){
-                            for(x=0; x<h; x++){
-                                int pred;
-
-                                ptr = p->data[i] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
-                                if(y==0 && mb_y==0){
-                                    if(x==0 && mb_x==0){
-                                        pred= 128;
-                                    }else{
-                                        pred= ptr[-1];
-                                    }
-                                }else{
-                                    if(x==0 && mb_x==0){
-                                        pred= ptr[-linesize];
-                                    }else{
-                                        PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
-                                    }
-                                }
-
-                                if(i==0)
-                                    mjpeg_encode_dc(s, (int8_t)(*ptr - pred), m->huff_size_dc_luminance, m->huff_code_dc_luminance); //FIXME ugly
-                                else
-                                    mjpeg_encode_dc(s, (int8_t)(*ptr - pred), m->huff_size_dc_chrominance, m->huff_code_dc_chrominance);
-                            }
-                        }
-                    }
-                }else{
-                    for(i=0;i<3;i++) {
-                        uint8_t *ptr;
-                        int x, y, h, v, linesize;
-                        h = s->mjpeg_hsample[i];
-                        v = s->mjpeg_vsample[i];
-                        linesize= p->linesize[i];
-
-                        for(y=0; y<v; y++){
-                            for(x=0; x<h; x++){
-                                int pred;
-
-                                ptr = p->data[i] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
-//printf("%d %d %d %d %8X\n", mb_x, mb_y, x, y, ptr);
-                                PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
-
-                                if(i==0)
-                                    mjpeg_encode_dc(s, (int8_t)(*ptr - pred), m->huff_size_dc_luminance, m->huff_code_dc_luminance); //FIXME ugly
-                                else
-                                    mjpeg_encode_dc(s, (int8_t)(*ptr - pred), m->huff_size_dc_chrominance, m->huff_code_dc_chrominance);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    emms_c();
-
-    mjpeg_picture_trailer(s);
-    s->picture_number++;
-
-    flush_put_bits(&s->pb);
-    return pbBufPtr(&s->pb) - s->pb.buf;
-//    return (put_bits_count(&f->pb)+7)/8;
-}
-
-#endif //CONFIG_ENCODERS
-
-/******************************************/
-/* decoding */
-
-#define MAX_COMPONENTS 4
-
-typedef struct MJpegDecodeContext {
-    AVCodecContext *avctx;
-    GetBitContext gb;
-    int mpeg_enc_ctx_allocated; /* true if decoding context allocated */
-
-    int start_code; /* current start code */
-    int buffer_size;
-    uint8_t *buffer;
-
-    int16_t quant_matrixes[4][64];
-    VLC vlcs[2][4];
-    int qscale[4];      ///< quantizer scale calculated from quant_matrixes
-
-    int org_height;  /* size given at codec init */
-    int first_picture;    /* true if decoding first picture */
-    int interlaced;     /* true if interlaced */
-    int bottom_field;   /* true if bottom field */
-    int lossless;
-    int ls;
-    int rgb;
-    int rct;            /* standard rct */
-    int pegasus_rct;    /* pegasus reversible colorspace transform */
-    int bits;           /* bits per component */
-
-    int maxval;
-    int near;         ///< near lossless bound (si 0 for lossless)
-    int t1,t2,t3;
-    int reset;        ///< context halfing intervall ?rename
-
-    int width, height;
-    int mb_width, mb_height;
-    int nb_components;
-    int component_id[MAX_COMPONENTS];
-    int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */
-    int v_count[MAX_COMPONENTS];
-    int comp_index[MAX_COMPONENTS];
-    int dc_index[MAX_COMPONENTS];
-    int ac_index[MAX_COMPONENTS];
-    int nb_blocks[MAX_COMPONENTS];
-    int h_scount[MAX_COMPONENTS];
-    int v_scount[MAX_COMPONENTS];
-    int h_max, v_max; /* maximum h and v counts */
-    int quant_index[4];   /* quant table index for each component */
-    int last_dc[MAX_COMPONENTS]; /* last DEQUANTIZED dc (XXX: am I right to do that ?) */
-    AVFrame picture; /* picture structure */
-    int linesize[MAX_COMPONENTS];                   ///< linesize << interlaced
-    int8_t *qscale_table;
-    DECLARE_ALIGNED_8(DCTELEM, block[64]);
-    ScanTable scantable;
-    void (*idct_put)(uint8_t *dest/*align 8*/, int line_size, DCTELEM *block/*align 16*/);
-
-    int restart_interval;
-    int restart_count;
-
-    int buggy_avid;
-    int cs_itu601;
-    int interlace_polarity;
-
-    int mjpb_skiptosod;
-
-    int cur_scan; /* current scan, used by JPEG-LS */
-} MJpegDecodeContext;
-
-#include "jpeg_ls.c" //FIXME make jpeg-ls more independant
-
-static int mjpeg_decode_dht(MJpegDecodeContext *s);
-
-static int build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table,
-                      int nb_codes, int use_static, int is_ac)
-{
-    uint8_t huff_size[256+16];
-    uint16_t huff_code[256+16];
-
-    assert(nb_codes <= 256);
-
-    memset(huff_size, 0, sizeof(huff_size));
-    build_huffman_codes(huff_size, huff_code, bits_table, val_table);
-
-    if(is_ac){
-        memmove(huff_size+16, huff_size, sizeof(uint8_t)*nb_codes);
-        memmove(huff_code+16, huff_code, sizeof(uint16_t)*nb_codes);
-        memset(huff_size, 0, sizeof(uint8_t)*16);
-        memset(huff_code, 0, sizeof(uint16_t)*16);
-        nb_codes += 16;
-    }
-
-    return init_vlc(vlc, 9, nb_codes, huff_size, 1, 1, huff_code, 2, 2, use_static);
-}
-
-static int mjpeg_decode_init(AVCodecContext *avctx)
-{
-    MJpegDecodeContext *s = avctx->priv_data;
-    MpegEncContext s2;
-    memset(s, 0, sizeof(MJpegDecodeContext));
-
-    s->avctx = avctx;
-
-    /* ugly way to get the idct & scantable FIXME */
-    memset(&s2, 0, sizeof(MpegEncContext));
-    s2.avctx= avctx;
-//    s2->out_format = FMT_MJPEG;
-    dsputil_init(&s2.dsp, avctx);
-    DCT_common_init(&s2);
-
-    s->scantable= s2.intra_scantable;
-    s->idct_put= s2.dsp.idct_put;
-
-    s->mpeg_enc_ctx_allocated = 0;
-    s->buffer_size = 0;
-    s->buffer = NULL;
-    s->start_code = -1;
-    s->first_picture = 1;
-    s->org_height = avctx->coded_height;
-
-    build_vlc(&s->vlcs[0][0], bits_dc_luminance, val_dc_luminance, 12, 0, 0);
-    build_vlc(&s->vlcs[0][1], bits_dc_chrominance, val_dc_chrominance, 12, 0, 0);
-    build_vlc(&s->vlcs[1][0], bits_ac_luminance, val_ac_luminance, 251, 0, 1);
-    build_vlc(&s->vlcs[1][1], bits_ac_chrominance, val_ac_chrominance, 251, 0, 1);
-
-    if (avctx->flags & CODEC_FLAG_EXTERN_HUFF)
-    {
-        av_log(avctx, AV_LOG_INFO, "mjpeg: using external huffman table\n");
-        init_get_bits(&s->gb, avctx->extradata, avctx->extradata_size*8);
-        mjpeg_decode_dht(s);
-        /* should check for error - but dunno */
-    }
-
-    return 0;
-}
-
-
-/**
- * finds the end of the current frame in the bitstream.
- * @return the position of the first byte of the next frame, or -1
- */
-static int find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size){
-    int vop_found, i;
-    uint16_t state;
-
-    vop_found= pc->frame_start_found;
-    state= pc->state;
-
-    i=0;
-    if(!vop_found){
-        for(i=0; i<buf_size; i++){
-            state= (state<<8) | buf[i];
-            if(state == 0xFFD8){
-                i++;
-                vop_found=1;
-                break;
-            }
-        }
-    }
-
-    if(vop_found){
-        /* EOF considered as end of frame */
-        if (buf_size == 0)
-            return 0;
-        for(; i<buf_size; i++){
-            state= (state<<8) | buf[i];
-            if(state == 0xFFD8){
-                pc->frame_start_found=0;
-                pc->state=0;
-                return i-1;
-            }
-        }
-    }
-    pc->frame_start_found= vop_found;
-    pc->state= state;
-    return END_NOT_FOUND;
-}
-
-static int jpeg_parse(AVCodecParserContext *s,
-                           AVCodecContext *avctx,
-                           uint8_t **poutbuf, int *poutbuf_size,
-                           const uint8_t *buf, int buf_size)
-{
-    ParseContext *pc = s->priv_data;
-    int next;
-
-    next= find_frame_end(pc, buf, buf_size);
-
-    if (ff_combine_frame(pc, next, (uint8_t **)&buf, &buf_size) < 0) {
-        *poutbuf = NULL;
-        *poutbuf_size = 0;
-        return buf_size;
-    }
-
-    *poutbuf = (uint8_t *)buf;
-    *poutbuf_size = buf_size;
-    return next;
-}
-
-/* quantize tables */
-static int mjpeg_decode_dqt(MJpegDecodeContext *s)
-{
-    int len, index, i, j;
-
-    len = get_bits(&s->gb, 16) - 2;
-
-    while (len >= 65) {
-        /* only 8 bit precision handled */
-        if (get_bits(&s->gb, 4) != 0)
-        {
-            dprintf("dqt: 16bit precision\n");
-            return -1;
-        }
-        index = get_bits(&s->gb, 4);
-        if (index >= 4)
-            return -1;
-        dprintf("index=%d\n", index);
-        /* read quant table */
-        for(i=0;i<64;i++) {
-            j = s->scantable.permutated[i];
-            s->quant_matrixes[index][j] = get_bits(&s->gb, 8);
-        }
-
-        //XXX FIXME finetune, and perhaps add dc too
-        s->qscale[index]= FFMAX(
-            s->quant_matrixes[index][s->scantable.permutated[1]],
-            s->quant_matrixes[index][s->scantable.permutated[8]]) >> 1;
-        dprintf("qscale[%d]: %d\n", index, s->qscale[index]);
-        len -= 65;
-    }
-
-    return 0;
-}
-
-/* decode huffman tables and build VLC decoders */
-static int mjpeg_decode_dht(MJpegDecodeContext *s)
-{
-    int len, index, i, class, n, v, code_max;
-    uint8_t bits_table[17];
-    uint8_t val_table[256];
-
-    len = get_bits(&s->gb, 16) - 2;
-
-    while (len > 0) {
-        if (len < 17)
-            return -1;
-        class = get_bits(&s->gb, 4);
-        if (class >= 2)
-            return -1;
-        index = get_bits(&s->gb, 4);
-        if (index >= 4)
-            return -1;
-        n = 0;
-        for(i=1;i<=16;i++) {
-            bits_table[i] = get_bits(&s->gb, 8);
-            n += bits_table[i];
-        }
-        len -= 17;
-        if (len < n || n > 256)
-            return -1;
-
-        code_max = 0;
-        for(i=0;i<n;i++) {
-            v = get_bits(&s->gb, 8);
-            if (v > code_max)
-                code_max = v;
-            val_table[i] = v;
-        }
-        len -= n;
-
-        /* build VLC and flush previous vlc if present */
-        free_vlc(&s->vlcs[class][index]);
-        dprintf("class=%d index=%d nb_codes=%d\n",
-               class, index, code_max + 1);
-        if(build_vlc(&s->vlcs[class][index], bits_table, val_table, code_max + 1, 0, class > 0) < 0){
-            return -1;
-        }
-    }
-    return 0;
-}
-
-static int mjpeg_decode_sof(MJpegDecodeContext *s)
-{
-    int len, nb_components, i, width, height, pix_fmt_id;
-
-    /* XXX: verify len field validity */
-    len = get_bits(&s->gb, 16);
-    s->bits= get_bits(&s->gb, 8);
-
-    if(s->pegasus_rct) s->bits=9;
-    if(s->bits==9 && !s->pegasus_rct) s->rct=1;    //FIXME ugly
-
-    if (s->bits != 8 && !s->lossless){
-        av_log(s->avctx, AV_LOG_ERROR, "only 8 bits/component accepted\n");
-        return -1;
-    }
-    if (s->bits > 8 && s->ls){
-        av_log(s->avctx, AV_LOG_ERROR, "only <= 8 bits/component accepted for JPEG-LS\n");
-        return -1;
-    }
-
-    height = get_bits(&s->gb, 16);
-    width = get_bits(&s->gb, 16);
-
-    dprintf("sof0: picture: %dx%d\n", width, height);
-    if(avcodec_check_dimensions(s->avctx, width, height))
-        return -1;
-
-    nb_components = get_bits(&s->gb, 8);
-    if (nb_components <= 0 ||
-        nb_components > MAX_COMPONENTS)
-        return -1;
-    s->nb_components = nb_components;
-    s->h_max = 1;
-    s->v_max = 1;
-    for(i=0;i<nb_components;i++) {
-        /* component id */
-        s->component_id[i] = get_bits(&s->gb, 8) - 1;
-        s->h_count[i] = get_bits(&s->gb, 4);
-        s->v_count[i] = get_bits(&s->gb, 4);
-        /* compute hmax and vmax (only used in interleaved case) */
-        if (s->h_count[i] > s->h_max)
-            s->h_max = s->h_count[i];
-        if (s->v_count[i] > s->v_max)
-            s->v_max = s->v_count[i];
-        s->quant_index[i] = get_bits(&s->gb, 8);
-        if (s->quant_index[i] >= 4)
-            return -1;
-        dprintf("component %d %d:%d id: %d quant:%d\n", i, s->h_count[i],
-            s->v_count[i], s->component_id[i], s->quant_index[i]);
-    }
-
-    if(s->ls && (s->h_max > 1 || s->v_max > 1)) {
-        av_log(s->avctx, AV_LOG_ERROR, "Subsampling in JPEG-LS is not supported.\n");
-        return -1;
-    }
-
-    if(s->v_max==1 && s->h_max==1 && s->lossless==1) s->rgb=1;
-
-    /* if different size, realloc/alloc picture */
-    /* XXX: also check h_count and v_count */
-    if (width != s->width || height != s->height) {
-        av_freep(&s->qscale_table);
-
-        s->width = width;
-        s->height = height;
-
-        /* test interlaced mode */
-        if (s->first_picture &&
-            s->org_height != 0 &&
-            s->height < ((s->org_height * 3) / 4)) {
-            s->interlaced = 1;
-//            s->bottom_field = (s->interlace_polarity) ? 1 : 0;
-            s->bottom_field = 0;
-            height *= 2;
-        }
-
-        avcodec_set_dimensions(s->avctx, width, height);
-
-        s->qscale_table= av_mallocz((s->width+15)/16);
-
-        s->first_picture = 0;
-    }
-
-    if(s->interlaced && s->bottom_field)
-        return 0;
-
-    /* XXX: not complete test ! */
-    pix_fmt_id = (s->h_count[0] << 20) | (s->v_count[0] << 16) |
-                 (s->h_count[1] << 12) | (s->v_count[1] <<  8) |
-                 (s->h_count[2] <<  4) |  s->v_count[2];
-    dprintf("pix fmt id %x\n", pix_fmt_id);
-    switch(pix_fmt_id){
-    case 0x222222:
-    case 0x111111:
-        if(s->rgb){
-            s->avctx->pix_fmt = PIX_FMT_RGBA32;
-        }else if(s->nb_components==3)
-            s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV444P : PIX_FMT_YUVJ444P;
-        else
-            s->avctx->pix_fmt = PIX_FMT_GRAY8;
-        break;
-    case 0x211111:
-    case 0x221212:
-        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV422P : PIX_FMT_YUVJ422P;
-        break;
-    default:
-    case 0x221111:
-        s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420P;
-        break;
-    }
-    if(s->ls){
-        if(s->nb_components > 1)
-            s->avctx->pix_fmt = PIX_FMT_RGB24;
-        else
-            s->avctx->pix_fmt = PIX_FMT_GRAY8;
-    }
-
-    if(s->picture.data[0])
-        s->avctx->release_buffer(s->avctx, &s->picture);
-
-    s->picture.reference= 0;
-    if(s->avctx->get_buffer(s->avctx, &s->picture) < 0){
-        av_log(s->avctx, AV_LOG_ERROR, "get_buffer() failed\n");
-        return -1;
-    }
-    s->picture.pict_type= I_TYPE;
-    s->picture.key_frame= 1;
-
-    for(i=0; i<3; i++){
-        s->linesize[i]= s->picture.linesize[i] << s->interlaced;
-    }
-
-//    printf("%d %d %d %d %d %d\n", s->width, s->height, s->linesize[0], s->linesize[1], s->interlaced, s->avctx->height);
-
-    if (len != (8+(3*nb_components)))
-    {
-        dprintf("decode_sof0: error, len(%d) mismatch\n", len);
-    }
-
-    return 0;
-}
-
-static inline int mjpeg_decode_dc(MJpegDecodeContext *s, int dc_index)
-{
-    int code;
-    code = get_vlc2(&s->gb, s->vlcs[0][dc_index].table, 9, 2);
-    if (code < 0)
-    {
-        dprintf("mjpeg_decode_dc: bad vlc: %d:%d (%p)\n", 0, dc_index,
-                &s->vlcs[0][dc_index]);
-        return 0xffff;
-    }
-
-    if(code)
-        return get_xbits(&s->gb, code);
-    else
-        return 0;
-}
-
-/* decode block and dequantize */
-static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
-                        int component, int dc_index, int ac_index, int16_t *quant_matrix)
-{
-    int code, i, j, level, val;
-
-    /* DC coef */
-    val = mjpeg_decode_dc(s, dc_index);
-    if (val == 0xffff) {
-        dprintf("error dc\n");
-        return -1;
-    }
-    val = val * quant_matrix[0] + s->last_dc[component];
-    s->last_dc[component] = val;
-    block[0] = val;
-    /* AC coefs */
-    i = 0;
-    {OPEN_READER(re, &s->gb)
-    for(;;) {
-        UPDATE_CACHE(re, &s->gb);
-        GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2)
-
-        /* EOB */
-        if (code == 0x10)
-            break;
-        i += ((unsigned)code) >> 4;
-        if(code != 0x100){
-            code &= 0xf;
-            if(code > MIN_CACHE_BITS - 16){
-                UPDATE_CACHE(re, &s->gb)
-            }
-            {
-                int cache=GET_CACHE(re,&s->gb);
-                int sign=(~cache)>>31;
-                level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
-            }
-
-            LAST_SKIP_BITS(re, &s->gb, code)
-
-            if (i >= 63) {
-                if(i == 63){
-                    j = s->scantable.permutated[63];
-                    block[j] = level * quant_matrix[j];
-                    break;
-                }
-                dprintf("error count: %d\n", i);
-                return -1;
-            }
-            j = s->scantable.permutated[i];
-            block[j] = level * quant_matrix[j];
-        }
-    }
-    CLOSE_READER(re, &s->gb)}
-
-    return 0;
-}
-
-static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int predictor, int point_transform){
-    int i, mb_x, mb_y;
-    uint16_t buffer[32768][4];
-    int left[3], top[3], topleft[3];
-    const int linesize= s->linesize[0];
-    const int mask= (1<<s->bits)-1;
-
-    if((unsigned)s->mb_width > 32768) //dynamic alloc
-        return -1;
-
-    for(i=0; i<3; i++){
-        buffer[0][i]= 1 << (s->bits + point_transform - 1);
-    }
-    for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
-        const int modified_predictor= mb_y ? predictor : 1;
-        uint8_t *ptr = s->picture.data[0] + (linesize * mb_y);
-
-        if (s->interlaced && s->bottom_field)
-            ptr += linesize >> 1;
-
-        for(i=0; i<3; i++){
-            top[i]= left[i]= topleft[i]= buffer[0][i];
-        }
-        for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
-            if (s->restart_interval && !s->restart_count)
-                s->restart_count = s->restart_interval;
-
-            for(i=0;i<3;i++) {
-                int pred;
-
-                topleft[i]= top[i];
-                top[i]= buffer[mb_x][i];
-
-                PREDICT(pred, topleft[i], top[i], left[i], modified_predictor);
-
-                left[i]=
-                buffer[mb_x][i]= mask & (pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform));
-            }
-
-            if (s->restart_interval && !--s->restart_count) {
-                align_get_bits(&s->gb);
-                skip_bits(&s->gb, 16); /* skip RSTn */
-            }
-        }
-
-        if(s->rct){
-            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
-                ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2] - 0x200)>>2);
-                ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];
-                ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];
-            }
-        }else if(s->pegasus_rct){
-            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
-                ptr[4*mb_x+1] = buffer[mb_x][0] - ((buffer[mb_x][1] + buffer[mb_x][2])>>2);
-                ptr[4*mb_x+0] = buffer[mb_x][1] + ptr[4*mb_x+1];
-                ptr[4*mb_x+2] = buffer[mb_x][2] + ptr[4*mb_x+1];
-            }
-        }else{
-            for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
-                ptr[4*mb_x+0] = buffer[mb_x][0];
-                ptr[4*mb_x+1] = buffer[mb_x][1];
-                ptr[4*mb_x+2] = buffer[mb_x][2];
-            }
-        }
-    }
-    return 0;
-}
-
-static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor, int point_transform){
-    int i, mb_x, mb_y;
-    const int nb_components=3;
-
-    for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
-        for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
-            if (s->restart_interval && !s->restart_count)
-                s->restart_count = s->restart_interval;
-
-            if(mb_x==0 || mb_y==0 || s->interlaced){
-                for(i=0;i<nb_components;i++) {
-                    uint8_t *ptr;
-                    int n, h, v, x, y, c, j, linesize;
-                    n = s->nb_blocks[i];
-                    c = s->comp_index[i];
-                    h = s->h_scount[i];
-                    v = s->v_scount[i];
-                    x = 0;
-                    y = 0;
-                    linesize= s->linesize[c];
-
-                    for(j=0; j<n; j++) {
-                        int pred;
-
-                        ptr = s->picture.data[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
-                        if(y==0 && mb_y==0){
-                            if(x==0 && mb_x==0){
-                                pred= 128 << point_transform;
-                            }else{
-                                pred= ptr[-1];
-                            }
-                        }else{
-                            if(x==0 && mb_x==0){
-                                pred= ptr[-linesize];
-                            }else{
-                                PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
-                            }
-                        }
-
-                        if (s->interlaced && s->bottom_field)
-                            ptr += linesize >> 1;
-                        *ptr= pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform);
-
-                        if (++x == h) {
-                            x = 0;
-                            y++;
-                        }
-                    }
-                }
-            }else{
-                for(i=0;i<nb_components;i++) {
-                    uint8_t *ptr;
-                    int n, h, v, x, y, c, j, linesize;
-                    n = s->nb_blocks[i];
-                    c = s->comp_index[i];
-                    h = s->h_scount[i];
-                    v = s->v_scount[i];
-                    x = 0;
-                    y = 0;
-                    linesize= s->linesize[c];
-
-                    for(j=0; j<n; j++) {
-                        int pred;
-
-                        ptr = s->picture.data[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
-                        PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
-                        *ptr= pred + (mjpeg_decode_dc(s, s->dc_index[i]) << point_transform);
-                        if (++x == h) {
-                            x = 0;
-                            y++;
-                        }
-                    }
-                }
-            }
-            if (s->restart_interval && !--s->restart_count) {
-                align_get_bits(&s->gb);
-                skip_bits(&s->gb, 16); /* skip RSTn */
-            }
-        }
-    }
-    return 0;
-}
-
-static int mjpeg_decode_scan(MJpegDecodeContext *s){
-    int i, mb_x, mb_y;
-    const int nb_components=3;
-
-    for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
-        for(mb_x = 0; mb_x < s->mb_width; mb_x++) {
-            if (s->restart_interval && !s->restart_count)
-                s->restart_count = s->restart_interval;
-
-            for(i=0;i<nb_components;i++) {
-                uint8_t *ptr;
-                int n, h, v, x, y, c, j;
-                n = s->nb_blocks[i];
-                c = s->comp_index[i];
-                h = s->h_scount[i];
-                v = s->v_scount[i];
-                x = 0;
-                y = 0;
-                for(j=0;j<n;j++) {
-                    memset(s->block, 0, sizeof(s->block));
-                    if (decode_block(s, s->block, i,
-                                     s->dc_index[i], s->ac_index[i],
-                                     s->quant_matrixes[ s->quant_index[c] ]) < 0) {
-                        dprintf("error y=%d x=%d\n", mb_y, mb_x);
-                        return -1;
-                    }
-//                    dprintf("mb: %d %d processed\n", mb_y, mb_x);
-                    ptr = s->picture.data[c] +
-                        (((s->linesize[c] * (v * mb_y + y) * 8) +
-                        (h * mb_x + x) * 8) >> s->avctx->lowres);
-                    if (s->interlaced && s->bottom_field)
-                        ptr += s->linesize[c] >> 1;
-//av_log(NULL, AV_LOG_DEBUG, "%d %d %d %d %d %d %d %d \n", mb_x, mb_y, x, y, c, s->bottom_field, (v * mb_y + y) * 8, (h * mb_x + x) * 8);
-                    s->idct_put(ptr, s->linesize[c], s->block);
-                    if (++x == h) {
-                        x = 0;
-                        y++;
-                    }
-                }
-            }
-            /* (< 1350) buggy workaround for Spectralfan.mov, should be fixed */
-            if (s->restart_interval && (s->restart_interval < 1350) &&
-                !--s->restart_count) {
-                align_get_bits(&s->gb);
-                skip_bits(&s->gb, 16); /* skip RSTn */
-                for (i=0; i<nb_components; i++) /* reset dc */
-                    s->last_dc[i] = 1024;
-            }
-        }
-    }
-    return 0;
-}
-
-static int mjpeg_decode_sos(MJpegDecodeContext *s)
-{
-    int len, nb_components, i, h, v, predictor, point_transform;
-    int vmax, hmax, index, id;
-    const int block_size= s->lossless ? 1 : 8;
-    int ilv;
-
-    /* XXX: verify len field validity */
-    len = get_bits(&s->gb, 16);
-    nb_components = get_bits(&s->gb, 8);
-    if (len != 6+2*nb_components)
-    {
-        dprintf("decode_sos: invalid len (%d)\n", len);
-        return -1;
-    }
-    /* XXX: only interleaved scan accepted */
-    if ((nb_components != s->nb_components) && !s->ls)
-    {
-        dprintf("decode_sos: components(%d) mismatch\n", nb_components);
-        return -1;
-    }
-    vmax = 0;
-    hmax = 0;
-    for(i=0;i<nb_components;i++) {
-        id = get_bits(&s->gb, 8) - 1;
-        dprintf("component: %d\n", id);
-        /* find component index */
-        for(index=0;index<s->nb_components;index++)
-            if (id == s->component_id[index])
-                break;
-        if (index == s->nb_components)
-        {
-            dprintf("decode_sos: index(%d) out of components\n", index);
-            return -1;
-        }
-
-        s->comp_index[i] = index;
-
-        s->nb_blocks[i] = s->h_count[index] * s->v_count[index];
-        s->h_scount[i] = s->h_count[index];
-        s->v_scount[i] = s->v_count[index];
-
-        s->dc_index[i] = get_bits(&s->gb, 4);
-        s->ac_index[i] = get_bits(&s->gb, 4);
-
-        if (s->dc_index[i] <  0 || s->ac_index[i] < 0 ||
-            s->dc_index[i] >= 4 || s->ac_index[i] >= 4)
-            goto out_of_range;
-#if 0 //buggy
-        switch(s->start_code)
-        {
-            case SOF0:
-                if (dc_index[i] > 1 || ac_index[i] > 1)
-                    goto out_of_range;
-                break;
-            case SOF1:
-            case SOF2:
-                if (dc_index[i] > 3 || ac_index[i] > 3)
-                    goto out_of_range;
-                break;
-            case SOF3:
-                if (dc_index[i] > 3 || ac_index[i] != 0)
-                    goto out_of_range;
-                break;
-        }
-#endif
-    }
-
-    predictor= get_bits(&s->gb, 8); /* JPEG Ss / lossless JPEG predictor /JPEG-LS NEAR */
-    ilv= get_bits(&s->gb, 8);    /* JPEG Se / JPEG-LS ILV */
-    skip_bits(&s->gb, 4); /* Ah */
-    point_transform= get_bits(&s->gb, 4); /* Al */
-
-    for(i=0;i<nb_components;i++)
-        s->last_dc[i] = 1024;
-
-    if (nb_components > 1) {
-        /* interleaved stream */
-        s->mb_width  = (s->width  + s->h_max * block_size - 1) / (s->h_max * block_size);
-        s->mb_height = (s->height + s->v_max * block_size - 1) / (s->v_max * block_size);
-    } else if(!s->ls) { /* skip this for JPEG-LS */
-        h = s->h_max / s->h_scount[s->comp_index[0]];
-        v = s->v_max / s->v_scount[s->comp_index[0]];
-        s->mb_width  = (s->width  + h * block_size - 1) / (h * block_size);
-        s->mb_height = (s->height + v * block_size - 1) / (v * block_size);
-        s->nb_blocks[0] = 1;
-        s->h_scount[0] = 1;
-        s->v_scount[0] = 1;
-    }
-
-    if(s->avctx->debug & FF_DEBUG_PICT_INFO)
-        av_log(s->avctx, AV_LOG_DEBUG, "%s %s p:%d >>:%d ilv:%d bits:%d %s\n", s->lossless ? "lossless" : "sequencial DCT", s->rgb ? "RGB" : "",
-               predictor, point_transform, ilv, s->bits,
-               s->pegasus_rct ? "PRCT" : (s->rct ? "RCT" : ""));
-
-
-    /* mjpeg-b can have padding bytes between sos and image data, skip them */
-    for (i = s->mjpb_skiptosod; i > 0; i--)
-        skip_bits(&s->gb, 8);
-
-    if(s->lossless){
-        if(s->ls){
-//            for(){
-//            reset_ls_coding_parameters(s, 0);
-
-            ls_decode_picture(s, predictor, point_transform, ilv);
-        }else{
-            if(s->rgb){
-                if(ljpeg_decode_rgb_scan(s, predictor, point_transform) < 0)
-                    return -1;
-            }else{
-                if(ljpeg_decode_yuv_scan(s, predictor, point_transform) < 0)
-                    return -1;
-            }
-        }
-    }else{
-        if(mjpeg_decode_scan(s) < 0)
-            return -1;
-    }
-    emms_c();
-    return 0;
- out_of_range:
-    dprintf("decode_sos: ac/dc index out of range\n");
-    return -1;
-}
-
-static int mjpeg_decode_dri(MJpegDecodeContext *s)
-{
-    if (get_bits(&s->gb, 16) != 4)
-        return -1;
-    s->restart_interval = get_bits(&s->gb, 16);
-    s->restart_count = 0;
-    dprintf("restart interval: %d\n", s->restart_interval);
-
-    return 0;
-}
-
-static int mjpeg_decode_app(MJpegDecodeContext *s)
-{
-    int len, id;
-
-    len = get_bits(&s->gb, 16);
-    if (len < 5)
-        return -1;
-    if(8*len + get_bits_count(&s->gb) > s->gb.size_in_bits)
-        return -1;
-
-    id = (get_bits(&s->gb, 16) << 16) | get_bits(&s->gb, 16);
-    id = be2me_32(id);
-    len -= 6;
-
-    if(s->avctx->debug & FF_DEBUG_STARTCODE){
-        av_log(s->avctx, AV_LOG_DEBUG, "APPx %8X\n", id);
-    }
-
-    /* buggy AVID, it puts EOI only at every 10th frame */
-    /* also this fourcc is used by non-avid files too, it holds some
-       informations, but it's always present in AVID creates files */
-    if (id == ff_get_fourcc("AVI1"))
-    {
-        /* structure:
-            4bytes      AVI1
-            1bytes      polarity
-            1bytes      always zero
-            4bytes      field_size
-            4bytes      field_size_less_padding
-        */
-            s->buggy_avid = 1;
-//        if (s->first_picture)
-//            printf("mjpeg: workarounding buggy AVID\n");
-        s->interlace_polarity = get_bits(&s->gb, 8);
-#if 0
-        skip_bits(&s->gb, 8);
-        skip_bits(&s->gb, 32);
-        skip_bits(&s->gb, 32);
-        len -= 10;
-#endif
-//        if (s->interlace_polarity)
-//            printf("mjpeg: interlace polarity: %d\n", s->interlace_polarity);
-        goto out;
-    }
-
-//    len -= 2;
-
-    if (id == ff_get_fourcc("JFIF"))
-    {
-        int t_w, t_h, v1, v2;
-        skip_bits(&s->gb, 8); /* the trailing zero-byte */
-        v1= get_bits(&s->gb, 8);
-        v2= get_bits(&s->gb, 8);
-        skip_bits(&s->gb, 8);
-
-        s->avctx->sample_aspect_ratio.num= get_bits(&s->gb, 16);
-        s->avctx->sample_aspect_ratio.den= get_bits(&s->gb, 16);
-
-        if (s->avctx->debug & FF_DEBUG_PICT_INFO)
-            av_log(s->avctx, AV_LOG_INFO, "mjpeg: JFIF header found (version: %x.%x) SAR=%d/%d\n",
-                v1, v2,
-                s->avctx->sample_aspect_ratio.num,
-                s->avctx->sample_aspect_ratio.den
-            );
-
-        t_w = get_bits(&s->gb, 8);
-        t_h = get_bits(&s->gb, 8);
-        if (t_w && t_h)
-        {
-            /* skip thumbnail */
-            if (len-10-(t_w*t_h*3) > 0)
-                len -= t_w*t_h*3;
-        }
-        len -= 10;
-        goto out;
-    }
-
-    if (id == ff_get_fourcc("Adob") && (get_bits(&s->gb, 8) == 'e'))
-    {
-        if (s->avctx->debug & FF_DEBUG_PICT_INFO)
-            av_log(s->avctx, AV_LOG_INFO, "mjpeg: Adobe header found\n");
-        skip_bits(&s->gb, 16); /* version */
-        skip_bits(&s->gb, 16); /* flags0 */
-        skip_bits(&s->gb, 16); /* flags1 */
-        skip_bits(&s->gb, 8);  /* transform */
-        len -= 7;
-        goto out;
-    }
-
-    if (id == ff_get_fourcc("LJIF")){
-        if (s->avctx->debug & FF_DEBUG_PICT_INFO)
-            av_log(s->avctx, AV_LOG_INFO, "Pegasus lossless jpeg header found\n");
-        skip_bits(&s->gb, 16); /* version ? */
-        skip_bits(&s->gb, 16); /* unknwon always 0? */
-        skip_bits(&s->gb, 16); /* unknwon always 0? */
-        skip_bits(&s->gb, 16); /* unknwon always 0? */
-        switch( get_bits(&s->gb, 8)){
-        case 1:
-            s->rgb= 1;
-            s->pegasus_rct=0;
-            break;
-        case 2:
-            s->rgb= 1;
-            s->pegasus_rct=1;
-            break;
-        default:
-            av_log(s->avctx, AV_LOG_ERROR, "unknown colorspace\n");
-        }
-        len -= 9;
-        goto out;
-    }
-
-    /* Apple MJPEG-A */
-    if ((s->start_code == APP1) && (len > (0x28 - 8)))
-    {
-        id = (get_bits(&s->gb, 16) << 16) | get_bits(&s->gb, 16);
-        id = be2me_32(id);
-        len -= 4;
-        if (id == ff_get_fourcc("mjpg")) /* Apple MJPEG-A */
-        {
-#if 0
-            skip_bits(&s->gb, 32); /* field size */
-            skip_bits(&s->gb, 32); /* pad field size */
-            skip_bits(&s->gb, 32); /* next off */
-            skip_bits(&s->gb, 32); /* quant off */
-            skip_bits(&s->gb, 32); /* huff off */
-            skip_bits(&s->gb, 32); /* image off */
-            skip_bits(&s->gb, 32); /* scan off */
-            skip_bits(&s->gb, 32); /* data off */
-#endif
-            if (s->avctx->debug & FF_DEBUG_PICT_INFO)
-                av_log(s->avctx, AV_LOG_INFO, "mjpeg: Apple MJPEG-A header found\n");
-        }
-    }
-
-out:
-    /* slow but needed for extreme adobe jpegs */
-    if (len < 0)
-        av_log(s->avctx, AV_LOG_ERROR, "mjpeg: error, decode_app parser read over the end\n");
-    while(--len > 0)
-        skip_bits(&s->gb, 8);
-
-    return 0;
-}
-
-static int mjpeg_decode_com(MJpegDecodeContext *s)
-{
-    int len = get_bits(&s->gb, 16);
-    if (len >= 2 && 8*len - 16 + get_bits_count(&s->gb) <= s->gb.size_in_bits) {
-        char *cbuf = av_malloc(len - 1);
-        if (cbuf) {
-            int i;
-            for (i = 0; i < len - 2; i++)
-                cbuf[i] = get_bits(&s->gb, 8);
-            if (i > 0 && cbuf[i-1] == '\n')
-                cbuf[i-1] = 0;
-            else
-                cbuf[i] = 0;
-
-            if(s->avctx->debug & FF_DEBUG_PICT_INFO)
-                av_log(s->avctx, AV_LOG_INFO, "mjpeg comment: '%s'\n", cbuf);
-
-            /* buggy avid, it puts EOI only at every 10th frame */
-            if (!strcmp(cbuf, "AVID"))
-            {
-                s->buggy_avid = 1;
-                //        if (s->first_picture)
-                //            printf("mjpeg: workarounding buggy AVID\n");
-            }
-            else if(!strcmp(cbuf, "CS=ITU601")){
-                s->cs_itu601= 1;
-            }
-
-            av_free(cbuf);
-        }
-    }
-
-    return 0;
-}
-
-#if 0
-static int valid_marker_list[] =
-{
-        /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f */
-/* 0 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 1 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 2 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 3 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 4 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 5 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 6 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 7 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 8 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* 9 */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* a */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* b */    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-/* c */    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-/* d */    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-/* e */    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-/* f */    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
-}
-#endif
-
-/* return the 8 bit start code value and update the search
-   state. Return -1 if no start code found */
-static int find_marker(uint8_t **pbuf_ptr, uint8_t *buf_end)
-{
-    uint8_t *buf_ptr;
-    unsigned int v, v2;
-    int val;
-#ifdef DEBUG
-    int skipped=0;
-#endif
-
-    buf_ptr = *pbuf_ptr;
-    while (buf_ptr < buf_end) {
-        v = *buf_ptr++;
-        v2 = *buf_ptr;
-        if ((v == 0xff) && (v2 >= 0xc0) && (v2 <= 0xfe) && buf_ptr < buf_end) {
-            val = *buf_ptr++;
-            goto found;
-        }
-#ifdef DEBUG
-        skipped++;
-#endif
-    }
-    val = -1;
-found:
-#ifdef DEBUG
-    dprintf("find_marker skipped %d bytes\n", skipped);
-#endif
-    *pbuf_ptr = buf_ptr;
-    return val;
-}
-
-static int mjpeg_decode_frame(AVCodecContext *avctx,
-                              void *data, int *data_size,
-                              uint8_t *buf, int buf_size)
-{
-    MJpegDecodeContext *s = avctx->priv_data;
-    uint8_t *buf_end, *buf_ptr;
-    int start_code;
-    AVFrame *picture = data;
-
-    buf_ptr = buf;
-    buf_end = buf + buf_size;
-    while (buf_ptr < buf_end) {
-        /* find start next marker */
-        start_code = find_marker(&buf_ptr, buf_end);
-        {
-            /* EOF */
-            if (start_code < 0) {
-                goto the_end;
-            } else {
-                dprintf("marker=%x avail_size_in_buf=%d\n", start_code, buf_end - buf_ptr);
-
-                if ((buf_end - buf_ptr) > s->buffer_size)
-                {
-                    av_free(s->buffer);
-                    s->buffer_size = buf_end-buf_ptr;
-                    s->buffer = av_malloc(s->buffer_size + FF_INPUT_BUFFER_PADDING_SIZE);
-                    dprintf("buffer too small, expanding to %d bytes\n",
-                        s->buffer_size);
-                }
-
-                /* unescape buffer of SOS, use special treatment for JPEG-LS */
-                if (start_code == SOS && !s->ls)
-                {
-                    uint8_t *src = buf_ptr;
-                    uint8_t *dst = s->buffer;
-
-                    while (src<buf_end)
-                    {
-                        uint8_t x = *(src++);
-
-                        *(dst++) = x;
-                        if (x == 0xff)
-                        {
-                            while(src<buf_end && x == 0xff)
-                                x = *(src++);
-
-                            if (x >= 0xd0 && x <= 0xd7)
-                                *(dst++) = x;
-                            else if (x)
-                                break;
-                        }
-                    }
-                    init_get_bits(&s->gb, s->buffer, (dst - s->buffer)*8);
-
-                    dprintf("escaping removed %d bytes\n",
-                        (buf_end - buf_ptr) - (dst - s->buffer));
-                }
-                else if(start_code == SOS && s->ls){
-                    uint8_t *src = buf_ptr;
-                    uint8_t *dst = s->buffer;
-                    int bit_count = 0;
-                    int t = 0, b = 0;
-                    PutBitContext pb;
-
-                    s->cur_scan++;
-
-                    /* find marker */
-                    while (src + t < buf_end){
-                        uint8_t x = src[t++];
-                        if (x == 0xff){
-                            while((src + t < buf_end) && x == 0xff)
-                                x = src[t++];
-                            if (x & 0x80) {
-                                t -= 2;
-                                break;
-                            }
-                        }
-                    }
-                    bit_count = t * 8;
-
-                    init_put_bits(&pb, dst, t);
-
-                    /* unescape bitstream */
-                    while(b < t){
-                        uint8_t x = src[b++];
-                        put_bits(&pb, 8, x);
-                        if(x == 0xFF){
-                            x = src[b++];
-                            put_bits(&pb, 7, x);
-                            bit_count--;
-                        }
-                    }
-                    flush_put_bits(&pb);
-
-                    init_get_bits(&s->gb, dst, bit_count);
-                }
-                else
-                    init_get_bits(&s->gb, buf_ptr, (buf_end - buf_ptr)*8);
-
-                s->start_code = start_code;
-                if(s->avctx->debug & FF_DEBUG_STARTCODE){
-                    av_log(s->avctx, AV_LOG_DEBUG, "startcode: %X\n", start_code);
-                }
-
-                /* process markers */
-                if (start_code >= 0xd0 && start_code <= 0xd7) {
-                    dprintf("restart marker: %d\n", start_code&0x0f);
-                    /* APP fields */
-                } else if (start_code >= APP0 && start_code <= APP15) {
-                    mjpeg_decode_app(s);
-                    /* Comment */
-                } else if (start_code == COM){
-                    mjpeg_decode_com(s);
-                }
-
-                switch(start_code) {
-                case SOI:
-                    s->restart_interval = 0;
-
-                    s->restart_count = 0;
-                    /* nothing to do on SOI */
-                    break;
-                case DQT:
-                    mjpeg_decode_dqt(s);
-                    break;
-                case DHT:
-                    if(mjpeg_decode_dht(s) < 0){
-                        av_log(s->avctx, AV_LOG_ERROR, "huffman table decode error\n");
-                        return -1;
-                    }
-                    break;
-                case SOF0:
-                    s->lossless=0;
-                    if (mjpeg_decode_sof(s) < 0)
-                        return -1;
-                    break;
-                case SOF3:
-                    s->lossless=1;
-                    if (mjpeg_decode_sof(s) < 0)
-                        return -1;
-                    break;
-                case SOF48:
-                    s->lossless=1;
-                    s->ls=1;
-                    if (mjpeg_decode_sof(s) < 0)
-                        return -1;
-                    break;
-                case LSE:
-                    if (decode_lse(s) < 0)
-                        return -1;
-                    break;
-                case EOI:
-                    s->cur_scan = 0;
-                    if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
-                        break;
-eoi_parser:
-                    {
-                        if (s->interlaced) {
-                            s->bottom_field ^= 1;
-                            /* if not bottom field, do not output image yet */
-                            if (s->bottom_field)
-                                goto not_the_end;
-                        }
-                        *picture = s->picture;
-                        *data_size = sizeof(AVFrame);
-
-                        if(!s->lossless){
-                            picture->quality= FFMAX(FFMAX(s->qscale[0], s->qscale[1]), s->qscale[2]);
-                            picture->qstride= 0;
-                            picture->qscale_table= s->qscale_table;
-                            memset(picture->qscale_table, picture->quality, (s->width+15)/16);
-                            if(avctx->debug & FF_DEBUG_QP)
-                                av_log(s->avctx, AV_LOG_DEBUG, "QP: %d\n", picture->quality);
-                            picture->quality*= FF_QP2LAMBDA;
-                        }
-
-                        goto the_end;
-                    }
-                    break;
-                case SOS:
-                    mjpeg_decode_sos(s);
-                    /* buggy avid puts EOI every 10-20th frame */
-                    /* if restart period is over process EOI */
-                    if ((s->buggy_avid && !s->interlaced) || s->restart_interval)
-                        goto eoi_parser;
-                    break;
-                case DRI:
-                    mjpeg_decode_dri(s);
-                    break;
-                case SOF1:
-                case SOF2:
-                case SOF5:
-                case SOF6:
-                case SOF7:
-                case SOF9:
-                case SOF10:
-                case SOF11:
-                case SOF13:
-                case SOF14:
-                case SOF15:
-                case JPG:
-                    av_log(s->avctx, AV_LOG_ERROR, "mjpeg: unsupported coding type (%x)\n", start_code);
-                    break;
-//                default:
-//                    printf("mjpeg: unsupported marker (%x)\n", start_code);
-//                    break;
-                }
-
-not_the_end:
-                /* eof process start code */
-                buf_ptr += (get_bits_count(&s->gb)+7)/8;
-                dprintf("marker parser used %d bytes (%d bits)\n",
-                    (get_bits_count(&s->gb)+7)/8, get_bits_count(&s->gb));
-            }
-        }
-    }
-the_end:
-    dprintf("mjpeg decode frame unused %d bytes\n", buf_end - buf_ptr);
-//    return buf_end - buf_ptr;
-    return buf_ptr - buf;
-}
-
-static int mjpegb_decode_frame(AVCodecContext *avctx,
-                              void *data, int *data_size,
-                              uint8_t *buf, int buf_size)
-{
-    MJpegDecodeContext *s = avctx->priv_data;
-    uint8_t *buf_end, *buf_ptr;
-    AVFrame *picture = data;
-    GetBitContext hgb; /* for the header */
-    uint32_t dqt_offs, dht_offs, sof_offs, sos_offs, second_field_offs;
-    uint32_t field_size, sod_offs;
-
-    buf_ptr = buf;
-    buf_end = buf + buf_size;
-
-read_header:
-    /* reset on every SOI */
-    s->restart_interval = 0;
-    s->restart_count = 0;
-    s->mjpb_skiptosod = 0;
-
-    init_get_bits(&hgb, buf_ptr, /*buf_size*/(buf_end - buf_ptr)*8);
-
-    skip_bits(&hgb, 32); /* reserved zeros */
-
-    if (get_bits_long(&hgb, 32) != be2me_32(ff_get_fourcc("mjpg")))
-    {
-        dprintf("not mjpeg-b (bad fourcc)\n");
-        return 0;
-    }
-
-    field_size = get_bits_long(&hgb, 32); /* field size */
-    dprintf("field size: 0x%x\n", field_size);
-    skip_bits(&hgb, 32); /* padded field size */
-    second_field_offs = get_bits_long(&hgb, 32);
-    dprintf("second field offs: 0x%x\n", second_field_offs);
-    if (second_field_offs)
-        s->interlaced = 1;
-
-    dqt_offs = get_bits_long(&hgb, 32);
-    dprintf("dqt offs: 0x%x\n", dqt_offs);
-    if (dqt_offs)
-    {
-        init_get_bits(&s->gb, buf+dqt_offs, (buf_end - (buf+dqt_offs))*8);
-        s->start_code = DQT;
-        mjpeg_decode_dqt(s);
-    }
-
-    dht_offs = get_bits_long(&hgb, 32);
-    dprintf("dht offs: 0x%x\n", dht_offs);
-    if (dht_offs)
-    {
-        init_get_bits(&s->gb, buf+dht_offs, (buf_end - (buf+dht_offs))*8);
-        s->start_code = DHT;
-        mjpeg_decode_dht(s);
-    }
-
-    sof_offs = get_bits_long(&hgb, 32);
-    dprintf("sof offs: 0x%x\n", sof_offs);
-    if (sof_offs)
-    {
-        init_get_bits(&s->gb, buf+sof_offs, (buf_end - (buf+sof_offs))*8);
-        s->start_code = SOF0;
-        if (mjpeg_decode_sof(s) < 0)
-            return -1;
-    }
-
-    sos_offs = get_bits_long(&hgb, 32);
-    dprintf("sos offs: 0x%x\n", sos_offs);
-    sod_offs = get_bits_long(&hgb, 32);
-    dprintf("sod offs: 0x%x\n", sod_offs);
-    if (sos_offs)
-    {
-//        init_get_bits(&s->gb, buf+sos_offs, (buf_end - (buf+sos_offs))*8);
-        init_get_bits(&s->gb, buf+sos_offs, field_size*8);
-        s->mjpb_skiptosod = (sod_offs - sos_offs - show_bits(&s->gb, 16));
-        s->start_code = SOS;
-        mjpeg_decode_sos(s);
-    }
-
-    if (s->interlaced) {
-        s->bottom_field ^= 1;
-        /* if not bottom field, do not output image yet */
-        if (s->bottom_field && second_field_offs)
-        {
-            buf_ptr = buf + second_field_offs;
-            second_field_offs = 0;
-            goto read_header;
-            }
-    }
-
-    //XXX FIXME factorize, this looks very similar to the EOI code
-
-    *picture= s->picture;
-    *data_size = sizeof(AVFrame);
-
-    if(!s->lossless){
-        picture->quality= FFMAX(FFMAX(s->qscale[0], s->qscale[1]), s->qscale[2]);
-        picture->qstride= 0;
-        picture->qscale_table= s->qscale_table;
-        memset(picture->qscale_table, picture->quality, (s->width+15)/16);
-        if(avctx->debug & FF_DEBUG_QP)
-            av_log(avctx, AV_LOG_DEBUG, "QP: %d\n", picture->quality);
-        picture->quality*= FF_QP2LAMBDA;
-    }
-
-    return buf_ptr - buf;
-}
-
-#include "sp5x.h"
-
-static int sp5x_decode_frame(AVCodecContext *avctx,
-                              void *data, int *data_size,
-                              uint8_t *buf, int buf_size)
-{
-#if 0
-    MJpegDecodeContext *s = avctx->priv_data;
-#endif
-    const int qscale = 5;
-    uint8_t *buf_ptr, *buf_end, *recoded;
-    int i = 0, j = 0;
-
-    if (!avctx->width || !avctx->height)
-        return -1;
-
-    buf_ptr = buf;
-    buf_end = buf + buf_size;
-
-#if 1
-    recoded = av_mallocz(buf_size + 1024);
-    if (!recoded)
-        return -1;
-
-    /* SOI */
-    recoded[j++] = 0xFF;
-    recoded[j++] = 0xD8;
-
-    memcpy(recoded+j, &sp5x_data_dqt[0], sizeof(sp5x_data_dqt));
-    memcpy(recoded+j+5, &sp5x_quant_table[qscale * 2], 64);
-    memcpy(recoded+j+70, &sp5x_quant_table[(qscale * 2) + 1], 64);
-    j += sizeof(sp5x_data_dqt);
-
-    memcpy(recoded+j, &sp5x_data_dht[0], sizeof(sp5x_data_dht));
-    j += sizeof(sp5x_data_dht);
-
-    memcpy(recoded+j, &sp5x_data_sof[0], sizeof(sp5x_data_sof));
-    recoded[j+5] = (avctx->coded_height >> 8) & 0xFF;
-    recoded[j+6] = avctx->coded_height & 0xFF;
-    recoded[j+7] = (avctx->coded_width >> 8) & 0xFF;
-    recoded[j+8] = avctx->coded_width & 0xFF;
-    j += sizeof(sp5x_data_sof);
-
-    memcpy(recoded+j, &sp5x_data_sos[0], sizeof(sp5x_data_sos));
-    j += sizeof(sp5x_data_sos);
-
-    for (i = 14; i < buf_size && j < buf_size+1024-2; i++)
-    {
-        recoded[j++] = buf[i];
-        if (buf[i] == 0xff)
-            recoded[j++] = 0;
-    }
-
-    /* EOI */
-    recoded[j++] = 0xFF;
-    recoded[j++] = 0xD9;
-
-    i = mjpeg_decode_frame(avctx, data, data_size, recoded, j);
-
-    av_free(recoded);
-
-#else
-    /* SOF */
-    s->bits = 8;
-    s->width  = avctx->coded_width;
-    s->height = avctx->coded_height;
-    s->nb_components = 3;
-    s->component_id[0] = 0;
-    s->h_count[0] = 2;
-    s->v_count[0] = 2;
-    s->quant_index[0] = 0;
-    s->component_id[1] = 1;
-    s->h_count[1] = 1;
-    s->v_count[1] = 1;
-    s->quant_index[1] = 1;
-    s->component_id[2] = 2;
-    s->h_count[2] = 1;
-    s->v_count[2] = 1;
-    s->quant_index[2] = 1;
-    s->h_max = 2;
-    s->v_max = 2;
-
-    s->qscale_table = av_mallocz((s->width+15)/16);
-    avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420;
-    s->interlaced = 0;
-
-    s->picture.reference = 0;
-    if (avctx->get_buffer(avctx, &s->picture) < 0)
-    {
-        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
-        return -1;
-    }
-
-    s->picture.pict_type = I_TYPE;
-    s->picture.key_frame = 1;
-
-    for (i = 0; i < 3; i++)
-        s->linesize[i] = s->picture.linesize[i] << s->interlaced;
-
-    /* DQT */
-    for (i = 0; i < 64; i++)
-    {
-        j = s->scantable.permutated[i];
-        s->quant_matrixes[0][j] = sp5x_quant_table[(qscale * 2) + i];
-    }
-    s->qscale[0] = FFMAX(
-        s->quant_matrixes[0][s->scantable.permutated[1]],
-        s->quant_matrixes[0][s->scantable.permutated[8]]) >> 1;
-
-    for (i = 0; i < 64; i++)
-    {
-        j = s->scantable.permutated[i];
-        s->quant_matrixes[1][j] = sp5x_quant_table[(qscale * 2) + 1 + i];
-    }
-    s->qscale[1] = FFMAX(
-        s->quant_matrixes[1][s->scantable.permutated[1]],
-        s->quant_matrixes[1][s->scantable.permutated[8]]) >> 1;
-
-    /* DHT */
-
-    /* SOS */
-    s->comp_index[0] = 0;
-    s->nb_blocks[0] = s->h_count[0] * s->v_count[0];
-    s->h_scount[0] = s->h_count[0];
-    s->v_scount[0] = s->v_count[0];
-    s->dc_index[0] = 0;
-    s->ac_index[0] = 0;
-
-    s->comp_index[1] = 1;
-    s->nb_blocks[1] = s->h_count[1] * s->v_count[1];
-    s->h_scount[1] = s->h_count[1];
-    s->v_scount[1] = s->v_count[1];
-    s->dc_index[1] = 1;
-    s->ac_index[1] = 1;
-
-    s->comp_index[2] = 2;
-    s->nb_blocks[2] = s->h_count[2] * s->v_count[2];
-    s->h_scount[2] = s->h_count[2];
-    s->v_scount[2] = s->v_count[2];
-    s->dc_index[2] = 1;
-    s->ac_index[2] = 1;
-
-    for (i = 0; i < 3; i++)
-        s->last_dc[i] = 1024;
-
-    s->mb_width = (s->width * s->h_max * 8 -1) / (s->h_max * 8);
-    s->mb_height = (s->height * s->v_max * 8 -1) / (s->v_max * 8);
-
-    init_get_bits(&s->gb, buf+14, (buf_size-14)*8);
-
-    return mjpeg_decode_scan(s);
-#endif
-
-    return i;
-}
-
-static int mjpeg_decode_end(AVCodecContext *avctx)
-{
-    MJpegDecodeContext *s = avctx->priv_data;
-    int i, j;
-
-    av_free(s->buffer);
-    av_free(s->qscale_table);
-
-    for(i=0;i<2;i++) {
-        for(j=0;j<4;j++)
-            free_vlc(&s->vlcs[i][j]);
-    }
-    return 0;
-}
-
-AVCodec mjpeg_decoder = {
-    "mjpeg",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_MJPEG,
-    sizeof(MJpegDecodeContext),
-    mjpeg_decode_init,
-    NULL,
-    mjpeg_decode_end,
-    mjpeg_decode_frame,
-    CODEC_CAP_DR1,
-    NULL
-};
-
-AVCodec mjpegb_decoder = {
-    "mjpegb",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_MJPEGB,
-    sizeof(MJpegDecodeContext),
-    mjpeg_decode_init,
-    NULL,
-    mjpeg_decode_end,
-    mjpegb_decode_frame,
-    CODEC_CAP_DR1,
-    NULL
-};
-
-AVCodec sp5x_decoder = {
-    "sp5x",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_SP5X,
-    sizeof(MJpegDecodeContext),
-    mjpeg_decode_init,
-    NULL,
-    mjpeg_decode_end,
-    sp5x_decode_frame,
-    CODEC_CAP_DR1,
-    NULL
-};
-
-#ifdef CONFIG_ENCODERS
-AVCodec ljpeg_encoder = { //FIXME avoid MPV_* lossless jpeg shouldnt need them
-    "ljpeg",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_LJPEG,
-    sizeof(MpegEncContext),
-    MPV_encode_init,
-    encode_picture_lossless,
-    MPV_encode_end,
-};
-#endif
-
-AVCodecParser mjpeg_parser = {
-    { CODEC_ID_MJPEG },
-    sizeof(ParseContext),
-    NULL,
-    jpeg_parse,
-    ff_parse_close,
-};
-
--- a/src/ffmpeg/libavcodec/oggvorbis.c	Mon Mar 12 13:14:40 2007 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,381 +0,0 @@
-/*
- * copyright (c) 2002 Mark Hills <mark@pogo.org.uk>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-/**
- * @file oggvorbis.c
- * Ogg Vorbis codec support via libvorbisenc.
- * @author Mark Hills <mark@pogo.org.uk>
- */
-
-#include <vorbis/vorbisenc.h>
-
-#include "avcodec.h"
-
-#undef NDEBUG
-#include <assert.h>
-
-#define OGGVORBIS_FRAME_SIZE 64
-
-#define BUFFER_SIZE (1024*64)
-
-typedef struct OggVorbisContext {
-    vorbis_info vi ;
-    vorbis_dsp_state vd ;
-    vorbis_block vb ;
-    uint8_t buffer[BUFFER_SIZE];
-    int buffer_index;
-
-    /* decoder */
-    vorbis_comment vc ;
-    ogg_packet op;
-} OggVorbisContext ;
-
-
-static int oggvorbis_init_encoder(vorbis_info *vi, AVCodecContext *avccontext) {
-    double cfreq;
-
-    if(avccontext->flags & CODEC_FLAG_QSCALE) {
-        /* variable bitrate */
-        if(vorbis_encode_setup_vbr(vi, avccontext->channels,
-                avccontext->sample_rate,
-                avccontext->global_quality / (float)FF_QP2LAMBDA))
-            return -1;
-    } else {
-        /* constant bitrate */
-        if(vorbis_encode_setup_managed(vi, avccontext->channels,
-                avccontext->sample_rate, -1, avccontext->bit_rate, -1))
-            return -1;
-
-#ifdef OGGVORBIS_VBR_BY_ESTIMATE
-        /* variable bitrate by estimate */
-        if(vorbis_encode_ctl(vi, OV_ECTL_RATEMANAGE_AVG, NULL))
-            return -1;
-#endif
-    }
-
-    /* cutoff frequency */
-    if(avccontext->cutoff > 0) {
-        cfreq = avccontext->cutoff / 1000.0;
-        if(vorbis_encode_ctl(vi, OV_ECTL_LOWPASS_SET, &cfreq))
-            return -1;
-    }
-
-    return vorbis_encode_setup_init(vi);
-}
-
-static int oggvorbis_encode_init(AVCodecContext *avccontext) {
-    OggVorbisContext *context = avccontext->priv_data ;
-    ogg_packet header, header_comm, header_code;
-    uint8_t *p;
-    unsigned int offset, len;
-
-    vorbis_info_init(&context->vi) ;
-    if(oggvorbis_init_encoder(&context->vi, avccontext) < 0) {
-        av_log(avccontext, AV_LOG_ERROR, "oggvorbis_encode_init: init_encoder failed") ;
-        return -1 ;
-    }
-    vorbis_analysis_init(&context->vd, &context->vi) ;
-    vorbis_block_init(&context->vd, &context->vb) ;
-
-    vorbis_comment_init(&context->vc);
-    vorbis_comment_add_tag(&context->vc, "encoder", LIBAVCODEC_IDENT) ;
-
-    vorbis_analysis_headerout(&context->vd, &context->vc, &header,
-                                &header_comm, &header_code);
-
-    len = header.bytes + header_comm.bytes +  header_code.bytes;
-    avccontext->extradata_size= 64 + len + len/255;
-    p = avccontext->extradata= av_mallocz(avccontext->extradata_size);
-    p[0] = 2;
-    offset = 1;
-    offset += av_xiphlacing(&p[offset], header.bytes);
-    offset += av_xiphlacing(&p[offset], header_comm.bytes);
-    memcpy(&p[offset], header.packet, header.bytes);
-    offset += header.bytes;
-    memcpy(&p[offset], header_comm.packet, header_comm.bytes);
-    offset += header_comm.bytes;
-    memcpy(&p[offset], header_code.packet, header_code.bytes);
-    offset += header_code.bytes;
-    avccontext->extradata_size = offset;
-    avccontext->extradata= av_realloc(avccontext->extradata, avccontext->extradata_size);
-
-/*    vorbis_block_clear(&context->vb);
-    vorbis_dsp_clear(&context->vd);
-    vorbis_info_clear(&context->vi);*/
-    vorbis_comment_clear(&context->vc);
-
-    avccontext->frame_size = OGGVORBIS_FRAME_SIZE ;
-
-    avccontext->coded_frame= avcodec_alloc_frame();
-    avccontext->coded_frame->key_frame= 1;
-
-    return 0 ;
-}
-
-
-static int oggvorbis_encode_frame(AVCodecContext *avccontext,
-                                  unsigned char *packets,
-                           int buf_size, void *data)
-{
-    OggVorbisContext *context = avccontext->priv_data ;
-    float **buffer ;
-    ogg_packet op ;
-    signed short *audio = data ;
-    int l, samples = data ? OGGVORBIS_FRAME_SIZE : 0;
-
-    buffer = vorbis_analysis_buffer(&context->vd, samples) ;
-
-    if(context->vi.channels == 1) {
-        for(l = 0 ; l < samples ; l++)
-            buffer[0][l]=audio[l]/32768.f;
-    } else {
-        for(l = 0 ; l < samples ; l++){
-            buffer[0][l]=audio[l*2]/32768.f;
-            buffer[1][l]=audio[l*2+1]/32768.f;
-        }
-    }
-
-    vorbis_analysis_wrote(&context->vd, samples) ;
-
-    while(vorbis_analysis_blockout(&context->vd, &context->vb) == 1) {
-        vorbis_analysis(&context->vb, NULL);
-        vorbis_bitrate_addblock(&context->vb) ;
-
-        while(vorbis_bitrate_flushpacket(&context->vd, &op)) {
-            if(op.bytes==1) //id love to say this is a hack, bad sadly its not, appearently the end of stream decission is in libogg
-                continue;
-            memcpy(context->buffer + context->buffer_index, &op, sizeof(ogg_packet));
-            context->buffer_index += sizeof(ogg_packet);
-            memcpy(context->buffer + context->buffer_index, op.packet, op.bytes);
-            context->buffer_index += op.bytes;
-//            av_log(avccontext, AV_LOG_DEBUG, "e%d / %d\n", context->buffer_index, op.bytes);
-        }
-    }
-
-    l=0;
-    if(context->buffer_index){
-        ogg_packet *op2= (ogg_packet*)context->buffer;
-        op2->packet = context->buffer + sizeof(ogg_packet);
-
-        l=  op2->bytes;
-        avccontext->coded_frame->pts= av_rescale_q(op2->granulepos, (AVRational){1, avccontext->sample_rate}, avccontext->time_base);
-        //FIXME we should reorder the user supplied pts and not assume that they are spaced by 1/sample_rate
-
-        memcpy(packets, op2->packet, l);
-        context->buffer_index -= l + sizeof(ogg_packet);
-        memcpy(context->buffer, context->buffer + l + sizeof(ogg_packet), context->buffer_index);
-//        av_log(avccontext, AV_LOG_DEBUG, "E%d\n", l);
-    }
-
-    return l;
-}
-
-
-static int oggvorbis_encode_close(AVCodecContext *avccontext) {
-    OggVorbisContext *context = avccontext->priv_data ;
-/*  ogg_packet op ; */
-
-    vorbis_analysis_wrote(&context->vd, 0) ; /* notify vorbisenc this is EOF */
-
-    vorbis_block_clear(&context->vb);
-    vorbis_dsp_clear(&context->vd);
-    vorbis_info_clear(&context->vi);
-
-    av_freep(&avccontext->coded_frame);
-    av_freep(&avccontext->extradata);
-
-    return 0 ;
-}
-
-
-AVCodec oggvorbis_encoder = {
-    "vorbis",
-    CODEC_TYPE_AUDIO,
-    CODEC_ID_VORBIS,
-    sizeof(OggVorbisContext),
-    oggvorbis_encode_init,
-    oggvorbis_encode_frame,
-    oggvorbis_encode_close,
-    .capabilities= CODEC_CAP_DELAY,
-} ;
-
-static int oggvorbis_decode_init(AVCodecContext *avccontext) {
-    OggVorbisContext *context = avccontext->priv_data ;
-    uint8_t *p= avccontext->extradata;
-    int i, hsizes[3];
-    unsigned char *headers[3], *extradata = avccontext->extradata;
-
-    vorbis_info_init(&context->vi) ;
-    vorbis_comment_init(&context->vc) ;
-
-    if(! avccontext->extradata_size || ! p) {
-        av_log(avccontext, AV_LOG_ERROR, "vorbis extradata absent\n");
-        return -1;
-    }
-
-    if(p[0] == 0 && p[1] == 30) {
-        for(i = 0; i < 3; i++){
-            hsizes[i] = *p++ << 8;
-            hsizes[i] += *p++;
-            headers[i] = p;
-            p += hsizes[i];
-        }
-    } else if(*p == 2) {
-        unsigned int offset = 1;
-        p++;
-        for(i=0; i<2; i++) {
-            hsizes[i] = 0;
-            while((*p == 0xFF) && (offset < avccontext->extradata_size)) {
-                hsizes[i] += 0xFF;
-                offset++;
-                p++;
-            }
-            if(offset >= avccontext->extradata_size - 1) {
-                av_log(avccontext, AV_LOG_ERROR,
-                       "vorbis header sizes damaged\n");
-                return -1;
-            }
-            hsizes[i] += *p;
-            offset++;
-            p++;
-        }
-        hsizes[2] = avccontext->extradata_size - hsizes[0]-hsizes[1]-offset;
-#if 0
-        av_log(avccontext, AV_LOG_DEBUG,
-               "vorbis header sizes: %d, %d, %d, / extradata_len is %d \n",
-               hsizes[0], hsizes[1], hsizes[2], avccontext->extradata_size);
-#endif
-        headers[0] = extradata + offset;
-        headers[1] = extradata + offset + hsizes[0];
-        headers[2] = extradata + offset + hsizes[0] + hsizes[1];
-    } else {
-        av_log(avccontext, AV_LOG_ERROR,
-               "vorbis initial header len is wrong: %d\n", *p);
-        return -1;
-    }
-
-    for(i=0; i<3; i++){
-        context->op.b_o_s= i==0;
-        context->op.bytes = hsizes[i];
-        context->op.packet = headers[i];
-        if(vorbis_synthesis_headerin(&context->vi, &context->vc, &context->op)<0){
-            av_log(avccontext, AV_LOG_ERROR, "%d. vorbis header damaged\n", i+1);
-            return -1;
-        }
-    }
-
-    avccontext->channels = context->vi.channels;
-    avccontext->sample_rate = context->vi.rate;
-    avccontext->time_base= (AVRational){1, avccontext->sample_rate};
-
-    vorbis_synthesis_init(&context->vd, &context->vi);
-    vorbis_block_init(&context->vd, &context->vb);
-
-    return 0 ;
-}
-
-
-static inline int conv(int samples, float **pcm, char *buf, int channels) {
-    int i, j, val ;
-    ogg_int16_t *ptr, *data = (ogg_int16_t*)buf ;
-    float *mono ;
-
-    for(i = 0 ; i < channels ; i++){
-        ptr = &data[i];
-        mono = pcm[i] ;
-
-        for(j = 0 ; j < samples ; j++) {
-
-            val = mono[j] * 32767.f;
-
-            if(val > 32767) val = 32767 ;
-            if(val < -32768) val = -32768 ;
-
-            *ptr = val ;
-            ptr += channels;
-        }
-    }
-
-    return 0 ;
-}
-
-
-static int oggvorbis_decode_frame(AVCodecContext *avccontext,
-                        void *data, int *data_size,
-                        uint8_t *buf, int buf_size)
-{
-    OggVorbisContext *context = avccontext->priv_data ;
-    float **pcm ;
-    ogg_packet *op= &context->op;
-    int samples, total_samples, total_bytes;
-
-    if(!buf_size){
-    //FIXME flush
-        return 0;
-    }
-
-    op->packet = buf;
-    op->bytes  = buf_size;
-
-//    av_log(avccontext, AV_LOG_DEBUG, "%d %d %d %lld %lld %d %d\n", op->bytes, op->b_o_s, op->e_o_s, op->granulepos, op->packetno, buf_size, context->vi.rate);
-
-/*    for(i=0; i<op->bytes; i++)
-      av_log(avccontext, AV_LOG_DEBUG, "%02X ", op->packet[i]);
-    av_log(avccontext, AV_LOG_DEBUG, "\n");*/
-
-    if(vorbis_synthesis(&context->vb, op) == 0)
-        vorbis_synthesis_blockin(&context->vd, &context->vb) ;
-
-    total_samples = 0 ;
-    total_bytes = 0 ;
-
-    while((samples = vorbis_synthesis_pcmout(&context->vd, &pcm)) > 0) {
-        conv(samples, pcm, (char*)data + total_bytes, context->vi.channels) ;
-        total_bytes += samples * 2 * context->vi.channels ;
-        total_samples += samples ;
-        vorbis_synthesis_read(&context->vd, samples) ;
-    }
-
-    *data_size = total_bytes ;
-    return buf_size ;
-}
-
-
-static int oggvorbis_decode_close(AVCodecContext *avccontext) {
-    OggVorbisContext *context = avccontext->priv_data ;
-
-    vorbis_info_clear(&context->vi) ;
-    vorbis_comment_clear(&context->vc) ;
-
-    return 0 ;
-}
-
-
-AVCodec oggvorbis_decoder = {
-    "vorbis",
-    CODEC_TYPE_AUDIO,
-    CODEC_ID_VORBIS,
-    sizeof(OggVorbisContext),
-    oggvorbis_decode_init,
-    NULL,
-    oggvorbis_decode_close,
-    oggvorbis_decode_frame,
-    .capabilities= CODEC_CAP_DELAY,
-} ;
--- a/src/ffmpeg/libavcodec/parser.c	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/libavcodec/parser.c	Mon Mar 12 13:49:56 2007 -0700
@@ -48,14 +48,14 @@
     s->parser = parser;
     s->priv_data = av_mallocz(parser->priv_data_size);
     if (!s->priv_data) {
-        free(s);
+        av_free(s);
         return NULL;
     }
     if (parser->parser_init) {
         ret = parser->parser_init(s);
         if (ret != 0) {
-            free(s->priv_data);
-            free(s);
+            av_free(s->priv_data);
+            av_free(s);
             return NULL;
         }
     }
@@ -129,7 +129,7 @@
     	if (s->parser->parser_close)
         	s->parser->parser_close(s);
 	
-    	free(s->priv_data);
-	free(s);
+    	av_free(s->priv_data);
+	av_free(s);
 }
 
--- a/src/ffmpeg/libavcodec/png.c	Mon Mar 12 13:14:40 2007 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,965 +0,0 @@
-/*
- * PNG image format
- * Copyright (c) 2003 Fabrice Bellard.
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with FFmpeg; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-#include "avcodec.h"
-
-/* TODO:
- * - add 2, 4 and 16 bit depth support
- * - use filters when generating a png (better compression)
- */
-
-#ifdef CONFIG_ZLIB
-#include <zlib.h>
-
-//#define DEBUG
-
-#define PNG_COLOR_MASK_PALETTE    1
-#define PNG_COLOR_MASK_COLOR      2
-#define PNG_COLOR_MASK_ALPHA      4
-
-#define PNG_COLOR_TYPE_GRAY 0
-#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
-#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
-#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
-#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
-
-#define PNG_FILTER_VALUE_NONE  0
-#define PNG_FILTER_VALUE_SUB   1
-#define PNG_FILTER_VALUE_UP    2
-#define PNG_FILTER_VALUE_AVG   3
-#define PNG_FILTER_VALUE_PAETH 4
-
-#define PNG_IHDR      0x0001
-#define PNG_IDAT      0x0002
-#define PNG_ALLIMAGE  0x0004
-#define PNG_PLTE      0x0008
-
-#define NB_PASSES 7
-
-#define IOBUF_SIZE 4096
-
-typedef struct PNGContext {
-    uint8_t *bytestream;
-    uint8_t *bytestream_start;
-    uint8_t *bytestream_end;
-    AVFrame picture;
-
-    int state;
-    int width, height;
-    int bit_depth;
-    int color_type;
-    int compression_type;
-    int interlace_type;
-    int filter_type;
-    int channels;
-    int bits_per_pixel;
-    int bpp;
-
-    uint8_t *image_buf;
-    int image_linesize;
-    uint32_t palette[256];
-    uint8_t *crow_buf;
-    uint8_t *last_row;
-    uint8_t *tmp_row;
-    int pass;
-    int crow_size; /* compressed row size (include filter type) */
-    int row_size; /* decompressed row size */
-    int pass_row_size; /* decompress row size of the current pass */
-    int y;
-    z_stream zstream;
-    uint8_t buf[IOBUF_SIZE];
-} PNGContext;
-
-static unsigned int get32(uint8_t **b){
-    (*b) += 4;
-    return ((*b)[-4]<<24) + ((*b)[-3]<<16) + ((*b)[-2]<<8) + (*b)[-1];
-}
-
-#ifdef CONFIG_ENCODERS
-static void put32(uint8_t **b, unsigned int v){
-    *(*b)++= v>>24;
-    *(*b)++= v>>16;
-    *(*b)++= v>>8;
-    *(*b)++= v;
-}
-#endif
-
-static const uint8_t pngsig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
-
-/* Mask to determine which y pixels are valid in a pass */
-static const uint8_t png_pass_ymask[NB_PASSES] = {
-    0x80, 0x80, 0x08, 0x88, 0x22, 0xaa, 0x55,
-};
-
-/* Mask to determine which y pixels can be written in a pass */
-static const uint8_t png_pass_dsp_ymask[NB_PASSES] = {
-    0xff, 0xff, 0x0f, 0xcc, 0x33, 0xff, 0x55,
-};
-
-/* minimum x value */
-static const uint8_t png_pass_xmin[NB_PASSES] = {
-    0, 4, 0, 2, 0, 1, 0
-};
-
-/* x shift to get row width */
-static const uint8_t png_pass_xshift[NB_PASSES] = {
-    3, 3, 2, 2, 1, 1, 0
-};
-
-/* Mask to determine which pixels are valid in a pass */
-static const uint8_t png_pass_mask[NB_PASSES] = {
-    0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff
-};
-
-/* Mask to determine which pixels to overwrite while displaying */
-static const uint8_t png_pass_dsp_mask[NB_PASSES] = {
-    0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff
-};
-#if 0
-static int png_probe(AVProbeData *pd)
-{
-    if (pd->buf_size >= 8 &&
-        memcmp(pd->buf, pngsig, 8) == 0)
-        return AVPROBE_SCORE_MAX;
-    else
-        return 0;
-}
-#endif
-static void *png_zalloc(void *opaque, unsigned int items, unsigned int size)
-{
-    if(items >= UINT_MAX / size)
-        return NULL;
-    return av_malloc(items * size);
-}
-
-static void png_zfree(void *opaque, void *ptr)
-{
-    av_free(ptr);
-}
-
-static int png_get_nb_channels(int color_type)
-{
-    int channels;
-    channels = 1;
-    if ((color_type & (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)) ==
-        PNG_COLOR_MASK_COLOR)
-        channels = 3;
-    if (color_type & PNG_COLOR_MASK_ALPHA)
-        channels++;
-    return channels;
-}
-
-/* compute the row size of an interleaved pass */
-static int png_pass_row_size(int pass, int bits_per_pixel, int width)
-{
-    int shift, xmin, pass_width;
-
-    xmin = png_pass_xmin[pass];
-    if (width <= xmin)
-        return 0;
-    shift = png_pass_xshift[pass];
-    pass_width = (width - xmin + (1 << shift) - 1) >> shift;
-    return (pass_width * bits_per_pixel + 7) >> 3;
-}
-
-/* NOTE: we try to construct a good looking image at each pass. width
-   is the original image width. We also do pixel format convertion at
-   this stage */
-static void png_put_interlaced_row(uint8_t *dst, int width,
-                                   int bits_per_pixel, int pass,
-                                   int color_type, const uint8_t *src)
-{
-    int x, mask, dsp_mask, j, src_x, b, bpp;
-    uint8_t *d;
-    const uint8_t *s;
-
-    mask = png_pass_mask[pass];
-    dsp_mask = png_pass_dsp_mask[pass];
-    switch(bits_per_pixel) {
-    case 1:
-        /* we must intialize the line to zero before writing to it */
-        if (pass == 0)
-            memset(dst, 0, (width + 7) >> 3);
-        src_x = 0;
-        for(x = 0; x < width; x++) {
-            j = (x & 7);
-            if ((dsp_mask << j) & 0x80) {
-                b = (src[src_x >> 3] >> (7 - (src_x & 7))) & 1;
-                dst[x >> 3] |= b << (7 - j);
-            }
-            if ((mask << j) & 0x80)
-                src_x++;
-        }
-        break;
-    default:
-        bpp = bits_per_pixel >> 3;
-        d = dst;
-        s = src;
-        if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
-            for(x = 0; x < width; x++) {
-                j = x & 7;
-                if ((dsp_mask << j) & 0x80) {
-                    *(uint32_t *)d = (s[3] << 24) | (s[0] << 16) | (s[1] << 8) | s[2];
-                }
-                d += bpp;
-                if ((mask << j) & 0x80)
-                    s += bpp;
-            }
-        } else {
-            for(x = 0; x < width; x++) {
-                j = x & 7;
-                if ((dsp_mask << j) & 0x80) {
-                    memcpy(d, s, bpp);
-                }
-                d += bpp;
-                if ((mask << j) & 0x80)
-                    s += bpp;
-            }
-        }
-        break;
-    }
-}
-
-#ifdef CONFIG_ENCODERS
-static void png_get_interlaced_row(uint8_t *dst, int row_size,
-                                   int bits_per_pixel, int pass,
-                                   const uint8_t *src, int width)
-{
-    int x, mask, dst_x, j, b, bpp;
-    uint8_t *d;
-    const uint8_t *s;
-
-    mask = png_pass_mask[pass];
-    switch(bits_per_pixel) {
-    case 1:
-        memset(dst, 0, row_size);
-        dst_x = 0;
-        for(x = 0; x < width; x++) {
-            j = (x & 7);
-            if ((mask << j) & 0x80) {
-                b = (src[x >> 3] >> (7 - j)) & 1;
-                dst[dst_x >> 3] |= b << (7 - (dst_x & 7));
-                dst_x++;
-            }
-        }
-        break;
-    default:
-        bpp = bits_per_pixel >> 3;
-        d = dst;
-        s = src;
-        for(x = 0; x < width; x++) {
-            j = x & 7;
-            if ((mask << j) & 0x80) {
-                memcpy(d, s, bpp);
-                d += bpp;
-            }
-            s += bpp;
-        }
-        break;
-    }
-}
-#endif
-
-/* XXX: optimize */
-/* NOTE: 'dst' can be equal to 'last' */
-static void png_filter_row(uint8_t *dst, int filter_type,
-                           uint8_t *src, uint8_t *last, int size, int bpp)
-{
-    int i, p;
-
-    switch(filter_type) {
-    case PNG_FILTER_VALUE_NONE:
-        memcpy(dst, src, size);
-        break;
-    case PNG_FILTER_VALUE_SUB:
-        for(i = 0; i < bpp; i++) {
-            dst[i] = src[i];
-        }
-        for(i = bpp; i < size; i++) {
-            p = dst[i - bpp];
-            dst[i] = p + src[i];
-        }
-        break;
-    case PNG_FILTER_VALUE_UP:
-        for(i = 0; i < size; i++) {
-            p = last[i];
-            dst[i] = p + src[i];
-        }
-        break;
-    case PNG_FILTER_VALUE_AVG:
-        for(i = 0; i < bpp; i++) {
-            p = (last[i] >> 1);
-            dst[i] = p + src[i];
-        }
-        for(i = bpp; i < size; i++) {
-            p = ((dst[i - bpp] + last[i]) >> 1);
-            dst[i] = p + src[i];
-        }
-        break;
-    case PNG_FILTER_VALUE_PAETH:
-        for(i = 0; i < bpp; i++) {
-            p = last[i];
-            dst[i] = p + src[i];
-        }
-        for(i = bpp; i < size; i++) {
-            int a, b, c, pa, pb, pc;
-
-            a = dst[i - bpp];
-            b = last[i];
-            c = last[i - bpp];
-
-            p = b - c;
-            pc = a - c;
-
-            pa = abs(p);
-            pb = abs(pc);
-            pc = abs(p + pc);
-
-            if (pa <= pb && pa <= pc)
-                p = a;
-            else if (pb <= pc)
-                p = b;
-            else
-                p = c;
-            dst[i] = p + src[i];
-        }
-        break;
-    }
-}
-
-#ifdef CONFIG_ENCODERS
-static void convert_from_rgba32(uint8_t *dst, const uint8_t *src, int width)
-{
-    uint8_t *d;
-    int j;
-    unsigned int v;
-
-    d = dst;
-    for(j = 0; j < width; j++) {
-        v = ((const uint32_t *)src)[j];
-        d[0] = v >> 16;
-        d[1] = v >> 8;
-        d[2] = v;
-        d[3] = v >> 24;
-        d += 4;
-    }
-}
-#endif
-
-#ifdef CONFIG_DECODERS
-static void convert_to_rgba32(uint8_t *dst, const uint8_t *src, int width)
-{
-    int j;
-    unsigned int r, g, b, a;
-
-    for(j = 0;j < width; j++) {
-        r = src[0];
-        g = src[1];
-        b = src[2];
-        a = src[3];
-        *(uint32_t *)dst = (a << 24) | (r << 16) | (g << 8) | b;
-        dst += 4;
-        src += 4;
-    }
-}
-
-/* process exactly one decompressed row */
-static void png_handle_row(PNGContext *s)
-{
-    uint8_t *ptr, *last_row;
-    int got_line;
-
-    if (!s->interlace_type) {
-        ptr = s->image_buf + s->image_linesize * s->y;
-        /* need to swap bytes correctly for RGB_ALPHA */
-        if (s->color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
-            png_filter_row(s->tmp_row, s->crow_buf[0], s->crow_buf + 1,
-                           s->last_row, s->row_size, s->bpp);
-            memcpy(s->last_row, s->tmp_row, s->row_size);
-            convert_to_rgba32(ptr, s->tmp_row, s->width);
-        } else {
-            /* in normal case, we avoid one copy */
-            if (s->y == 0)
-                last_row = s->last_row;
-            else
-                last_row = ptr - s->image_linesize;
-
-            png_filter_row(ptr, s->crow_buf[0], s->crow_buf + 1,
-                           last_row, s->row_size, s->bpp);
-        }
-        s->y++;
-        if (s->y == s->height) {
-            s->state |= PNG_ALLIMAGE;
-        }
-    } else {
-        got_line = 0;
-        for(;;) {
-            ptr = s->image_buf + s->image_linesize * s->y;
-            if ((png_pass_ymask[s->pass] << (s->y & 7)) & 0x80) {
-                /* if we already read one row, it is time to stop to
-                   wait for the next one */
-                if (got_line)
-                    break;
-                png_filter_row(s->tmp_row, s->crow_buf[0], s->crow_buf + 1,
-                               s->last_row, s->pass_row_size, s->bpp);
-                memcpy(s->last_row, s->tmp_row, s->pass_row_size);
-                got_line = 1;
-            }
-            if ((png_pass_dsp_ymask[s->pass] << (s->y & 7)) & 0x80) {
-                /* NOTE: rgba32 is handled directly in png_put_interlaced_row */
-                png_put_interlaced_row(ptr, s->width, s->bits_per_pixel, s->pass,
-                                       s->color_type, s->last_row);
-            }
-            s->y++;
-            if (s->y == s->height) {
-                for(;;) {
-                    if (s->pass == NB_PASSES - 1) {
-                        s->state |= PNG_ALLIMAGE;
-                        goto the_end;
-                    } else {
-                        s->pass++;
-                        s->y = 0;
-                        s->pass_row_size = png_pass_row_size(s->pass,
-                                                             s->bits_per_pixel,
-                                                             s->width);
-                        s->crow_size = s->pass_row_size + 1;
-                        if (s->pass_row_size != 0)
-                            break;
-                        /* skip pass if empty row */
-                    }
-                }
-            }
-        }
-    the_end: ;
-    }
-}
-
-static int png_decode_idat(PNGContext *s, int length)
-{
-    int ret;
-    s->zstream.avail_in = length;
-    s->zstream.next_in = s->bytestream;
-    s->bytestream += length;
-
-    if(s->bytestream > s->bytestream_end)
-        return -1;
-
-    /* decode one line if possible */
-    while (s->zstream.avail_in > 0) {
-        ret = inflate(&s->zstream, Z_PARTIAL_FLUSH);
-        if (ret != Z_OK && ret != Z_STREAM_END) {
-            return -1;
-        }
-        if (s->zstream.avail_out == 0) {
-            if (!(s->state & PNG_ALLIMAGE)) {
-                png_handle_row(s);
-            }
-            s->zstream.avail_out = s->crow_size;
-            s->zstream.next_out = s->crow_buf;
-        }
-    }
-    return 0;
-}
-
-static int decode_frame(AVCodecContext *avctx,
-                        void *data, int *data_size,
-                        uint8_t *buf, int buf_size)
-{
-    PNGContext * const s = avctx->priv_data;
-    AVFrame *picture = data;
-    AVFrame * const p= (AVFrame*)&s->picture;
-    uint32_t tag, length;
-    int ret, crc;
-
-    s->bytestream_start=
-    s->bytestream= buf;
-    s->bytestream_end= buf + buf_size;
-
-    /* check signature */
-    if (memcmp(s->bytestream, pngsig, 8) != 0)
-        return -1;
-    s->bytestream+= 8;
-    s->y=
-    s->state=0;
-//    memset(s, 0, sizeof(PNGContext));
-    /* init the zlib */
-    s->zstream.zalloc = png_zalloc;
-    s->zstream.zfree = png_zfree;
-    s->zstream.opaque = NULL;
-    ret = inflateInit(&s->zstream);
-    if (ret != Z_OK)
-        return -1;
-    for(;;) {
-        int tag32;
-        if (s->bytestream >= s->bytestream_end)
-            goto fail;
-        length = get32(&s->bytestream);
-        if (length > 0x7fffffff)
-            goto fail;
-        tag32 = get32(&s->bytestream);
-        tag = bswap_32(tag32);
-#ifdef DEBUG
-        av_log(avctx, AV_LOG_DEBUG, "png: tag=%c%c%c%c length=%u\n",
-               (tag & 0xff),
-               ((tag >> 8) & 0xff),
-               ((tag >> 16) & 0xff),
-               ((tag >> 24) & 0xff), length);
-#endif
-        switch(tag) {
-        case MKTAG('I', 'H', 'D', 'R'):
-            if (length != 13)
-                goto fail;
-            s->width = get32(&s->bytestream);
-            s->height = get32(&s->bytestream);
-            if(avcodec_check_dimensions(avctx, s->width, s->height)){
-                s->width= s->height= 0;
-                goto fail;
-            }
-            s->bit_depth = *s->bytestream++;
-            s->color_type = *s->bytestream++;
-            s->compression_type = *s->bytestream++;
-            s->filter_type = *s->bytestream++;
-            s->interlace_type = *s->bytestream++;
-            crc = get32(&s->bytestream);
-            s->state |= PNG_IHDR;
-#ifdef DEBUG
-            av_log(avctx, AV_LOG_DEBUG, "width=%d height=%d depth=%d color_type=%d compression_type=%d filter_type=%d interlace_type=%d\n",
-                   s->width, s->height, s->bit_depth, s->color_type,
-                   s->compression_type, s->filter_type, s->interlace_type);
-#endif
-            break;
-        case MKTAG('I', 'D', 'A', 'T'):
-            if (!(s->state & PNG_IHDR))
-                goto fail;
-            if (!(s->state & PNG_IDAT)) {
-                /* init image info */
-                avctx->width = s->width;
-                avctx->height = s->height;
-
-                s->channels = png_get_nb_channels(s->color_type);
-                s->bits_per_pixel = s->bit_depth * s->channels;
-                s->bpp = (s->bits_per_pixel + 7) >> 3;
-                s->row_size = (avctx->width * s->bits_per_pixel + 7) >> 3;
-
-                if (s->bit_depth == 8 &&
-                    s->color_type == PNG_COLOR_TYPE_RGB) {
-                    avctx->pix_fmt = PIX_FMT_RGB24;
-                } else if (s->bit_depth == 8 &&
-                           s->color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
-                    avctx->pix_fmt = PIX_FMT_RGBA32;
-                } else if (s->bit_depth == 8 &&
-                           s->color_type == PNG_COLOR_TYPE_GRAY) {
-                    avctx->pix_fmt = PIX_FMT_GRAY8;
-                } else if (s->bit_depth == 1 &&
-                           s->color_type == PNG_COLOR_TYPE_GRAY) {
-                    avctx->pix_fmt = PIX_FMT_MONOBLACK;
-                } else if (s->color_type == PNG_COLOR_TYPE_PALETTE) {
-                    avctx->pix_fmt = PIX_FMT_PAL8;
-                } else {
-                    goto fail;
-                }
-                if(p->data[0])
-                    avctx->release_buffer(avctx, p);
-
-                p->reference= 0;
-                if(avctx->get_buffer(avctx, p) < 0){
-                    av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
-                    goto fail;
-                }
-                p->pict_type= FF_I_TYPE;
-                p->key_frame= 1;
-                p->interlaced_frame = !!s->interlace_type;
-
-                /* compute the compressed row size */
-                if (!s->interlace_type) {
-                    s->crow_size = s->row_size + 1;
-                } else {
-                    s->pass = 0;
-                    s->pass_row_size = png_pass_row_size(s->pass,
-                                                         s->bits_per_pixel,
-                                                         s->width);
-                    s->crow_size = s->pass_row_size + 1;
-                }
-#ifdef DEBUG
-                av_log(avctx, AV_LOG_DEBUG, "row_size=%d crow_size =%d\n",
-                       s->row_size, s->crow_size);
-#endif
-                s->image_buf = p->data[0];
-                s->image_linesize = p->linesize[0];
-                /* copy the palette if needed */
-                if (s->color_type == PNG_COLOR_TYPE_PALETTE)
-                    memcpy(p->data[1], s->palette, 256 * sizeof(uint32_t));
-                /* empty row is used if differencing to the first row */
-                s->last_row = av_mallocz(s->row_size);
-                if (!s->last_row)
-                    goto fail;
-                if (s->interlace_type ||
-                    s->color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
-                    s->tmp_row = av_malloc(s->row_size);
-                    if (!s->tmp_row)
-                        goto fail;
-                }
-                /* compressed row */
-                s->crow_buf = av_malloc(s->row_size + 1);
-                if (!s->crow_buf)
-                    goto fail;
-                s->zstream.avail_out = s->crow_size;
-                s->zstream.next_out = s->crow_buf;
-            }
-            s->state |= PNG_IDAT;
-            if (png_decode_idat(s, length) < 0)
-                goto fail;
-            /* skip crc */
-            crc = get32(&s->bytestream);
-            break;
-        case MKTAG('P', 'L', 'T', 'E'):
-            {
-                int n, i, r, g, b;
-
-                if ((length % 3) != 0 || length > 256 * 3)
-                    goto skip_tag;
-                /* read the palette */
-                n = length / 3;
-                for(i=0;i<n;i++) {
-                    r = *s->bytestream++;
-                    g = *s->bytestream++;
-                    b = *s->bytestream++;
-                    s->palette[i] = (0xff << 24) | (r << 16) | (g << 8) | b;
-                }
-                for(;i<256;i++) {
-                    s->palette[i] = (0xff << 24);
-                }
-                s->state |= PNG_PLTE;
-                crc = get32(&s->bytestream);
-            }
-            break;
-        case MKTAG('t', 'R', 'N', 'S'):
-            {
-                int v, i;
-
-                /* read the transparency. XXX: Only palette mode supported */
-                if (s->color_type != PNG_COLOR_TYPE_PALETTE ||
-                    length > 256 ||
-                    !(s->state & PNG_PLTE))
-                    goto skip_tag;
-                for(i=0;i<length;i++) {
-                    v = *s->bytestream++;
-                    s->palette[i] = (s->palette[i] & 0x00ffffff) | (v << 24);
-                }
-                crc = get32(&s->bytestream);
-            }
-            break;
-        case MKTAG('I', 'E', 'N', 'D'):
-            if (!(s->state & PNG_ALLIMAGE))
-                goto fail;
-            crc = get32(&s->bytestream);
-            goto exit_loop;
-        default:
-            /* skip tag */
-        skip_tag:
-            s->bytestream += length + 4;
-            break;
-        }
-    }
- exit_loop:
-    *picture= *(AVFrame*)&s->picture;
-    *data_size = sizeof(AVPicture);
-
-    ret = s->bytestream - s->bytestream_start;
- the_end:
-    inflateEnd(&s->zstream);
-    av_freep(&s->crow_buf);
-    av_freep(&s->last_row);
-    av_freep(&s->tmp_row);
-    return ret;
- fail:
-    ret = -1;
-    goto the_end;
-}
-#endif
-
-#ifdef CONFIG_ENCODERS
-static void png_write_chunk(uint8_t **f, uint32_t tag,
-                            const uint8_t *buf, int length)
-{
-    uint32_t crc;
-    uint8_t tagbuf[4];
-
-    put32(f, length);
-    crc = crc32(0, Z_NULL, 0);
-    tagbuf[0] = tag;
-    tagbuf[1] = tag >> 8;
-    tagbuf[2] = tag >> 16;
-    tagbuf[3] = tag >> 24;
-    crc = crc32(crc, tagbuf, 4);
-    put32(f, bswap_32(tag));
-    if (length > 0) {
-        crc = crc32(crc, buf, length);
-        memcpy(*f, buf, length);
-        *f += length;
-    }
-    put32(f, crc);
-}
-
-/* XXX: use avcodec generic function ? */
-static void to_be32(uint8_t *p, uint32_t v)
-{
-    p[0] = v >> 24;
-    p[1] = v >> 16;
-    p[2] = v >> 8;
-    p[3] = v;
-}
-
-/* XXX: do filtering */
-static int png_write_row(PNGContext *s, const uint8_t *data, int size)
-{
-    int ret;
-
-    s->zstream.avail_in = size;
-    s->zstream.next_in = (uint8_t *)data;
-    while (s->zstream.avail_in > 0) {
-        ret = deflate(&s->zstream, Z_NO_FLUSH);
-        if (ret != Z_OK)
-            return -1;
-        if (s->zstream.avail_out == 0) {
-            if(s->bytestream_end - s->bytestream > IOBUF_SIZE + 100)
-                png_write_chunk(&s->bytestream, MKTAG('I', 'D', 'A', 'T'), s->buf, IOBUF_SIZE);
-            s->zstream.avail_out = IOBUF_SIZE;
-            s->zstream.next_out = s->buf;
-        }
-    }
-    return 0;
-}
-#endif /* CONFIG_ENCODERS */
-
-static int common_init(AVCodecContext *avctx){
-    PNGContext *s = avctx->priv_data;
-
-    avcodec_get_frame_defaults((AVFrame*)&s->picture);
-    avctx->coded_frame= (AVFrame*)&s->picture;
-//    s->avctx= avctx;
-
-    return 0;
-}
-
-#ifdef CONFIG_ENCODERS
-static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size, void *data){
-    PNGContext *s = avctx->priv_data;
-    AVFrame *pict = data;
-    AVFrame * const p= (AVFrame*)&s->picture;
-    int bit_depth, color_type, y, len, row_size, ret, is_progressive;
-    int bits_per_pixel, pass_row_size;
-    uint8_t *ptr;
-    uint8_t *crow_buf = NULL;
-    uint8_t *tmp_buf = NULL;
-
-    *p = *pict;
-    p->pict_type= FF_I_TYPE;
-    p->key_frame= 1;
-
-    s->bytestream_start=
-    s->bytestream= buf;
-    s->bytestream_end= buf+buf_size;
-
-    is_progressive = !!(avctx->flags & CODEC_FLAG_INTERLACED_DCT);
-    switch(avctx->pix_fmt) {
-    case PIX_FMT_RGBA32:
-        bit_depth = 8;
-        color_type = PNG_COLOR_TYPE_RGB_ALPHA;
-        break;
-    case PIX_FMT_RGB24:
-        bit_depth = 8;
-        color_type = PNG_COLOR_TYPE_RGB;
-        break;
-    case PIX_FMT_GRAY8:
-        bit_depth = 8;
-        color_type = PNG_COLOR_TYPE_GRAY;
-        break;
-    case PIX_FMT_MONOBLACK:
-        bit_depth = 1;
-        color_type = PNG_COLOR_TYPE_GRAY;
-        break;
-    case PIX_FMT_PAL8:
-        bit_depth = 8;
-        color_type = PNG_COLOR_TYPE_PALETTE;
-        break;
-    default:
-        return -1;
-    }
-    bits_per_pixel = png_get_nb_channels(color_type) * bit_depth;
-    row_size = (avctx->width * bits_per_pixel + 7) >> 3;
-
-    s->zstream.zalloc = png_zalloc;
-    s->zstream.zfree = png_zfree;
-    s->zstream.opaque = NULL;
-    ret = deflateInit2(&s->zstream, Z_DEFAULT_COMPRESSION,
-                       Z_DEFLATED, 15, 8, Z_DEFAULT_STRATEGY);
-    if (ret != Z_OK)
-        return -1;
-    crow_buf = av_malloc(row_size + 1);
-    if (!crow_buf)
-        goto fail;
-    if (is_progressive) {
-        tmp_buf = av_malloc(row_size + 1);
-        if (!tmp_buf)
-            goto fail;
-    }
-
-    /* write png header */
-    memcpy(s->bytestream, pngsig, 8);
-    s->bytestream += 8;
-
-    to_be32(s->buf, avctx->width);
-    to_be32(s->buf + 4, avctx->height);
-    s->buf[8] = bit_depth;
-    s->buf[9] = color_type;
-    s->buf[10] = 0; /* compression type */
-    s->buf[11] = 0; /* filter type */
-    s->buf[12] = is_progressive; /* interlace type */
-
-    png_write_chunk(&s->bytestream, MKTAG('I', 'H', 'D', 'R'), s->buf, 13);
-
-    /* put the palette if needed */
-    if (color_type == PNG_COLOR_TYPE_PALETTE) {
-        int has_alpha, alpha, i;
-        unsigned int v;
-        uint32_t *palette;
-        uint8_t *alpha_ptr;
-
-        palette = (uint32_t *)p->data[1];
-        ptr = s->buf;
-        alpha_ptr = s->buf + 256 * 3;
-        has_alpha = 0;
-        for(i = 0; i < 256; i++) {
-            v = palette[i];
-            alpha = v >> 24;
-            if (alpha && alpha != 0xff)
-                has_alpha = 1;
-            *alpha_ptr++ = alpha;
-            ptr[0] = v >> 16;
-            ptr[1] = v >> 8;
-            ptr[2] = v;
-            ptr += 3;
-        }
-        png_write_chunk(&s->bytestream, MKTAG('P', 'L', 'T', 'E'), s->buf, 256 * 3);
-        if (has_alpha) {
-            png_write_chunk(&s->bytestream, MKTAG('t', 'R', 'N', 'S'), s->buf + 256 * 3, 256);
-        }
-    }
-
-    /* now put each row */
-    s->zstream.avail_out = IOBUF_SIZE;
-    s->zstream.next_out = s->buf;
-    if (is_progressive) {
-        uint8_t *ptr1;
-        int pass;
-
-        for(pass = 0; pass < NB_PASSES; pass++) {
-            /* NOTE: a pass is completely omited if no pixels would be
-               output */
-            pass_row_size = png_pass_row_size(pass, bits_per_pixel, avctx->width);
-            if (pass_row_size > 0) {
-                for(y = 0; y < avctx->height; y++) {
-                    if ((png_pass_ymask[pass] << (y & 7)) & 0x80) {
-                        ptr = p->data[0] + y * p->linesize[0];
-                        if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) {
-                            convert_from_rgba32(tmp_buf, ptr, avctx->width);
-                            ptr1 = tmp_buf;
-                        } else {
-                            ptr1 = ptr;
-                        }
-                        png_get_interlaced_row(crow_buf + 1, pass_row_size,
-                                               bits_per_pixel, pass,
-                                               ptr1, avctx->width);
-                        crow_buf[0] = PNG_FILTER_VALUE_NONE;
-                        png_write_row(s, crow_buf, pass_row_size + 1);
-                    }
-                }
-            }
-        }
-    } else {
-        for(y = 0; y < avctx->height; y++) {
-            ptr = p->data[0] + y * p->linesize[0];
-            if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
-                convert_from_rgba32(crow_buf + 1, ptr, avctx->width);
-            else
-                memcpy(crow_buf + 1, ptr, row_size);
-            crow_buf[0] = PNG_FILTER_VALUE_NONE;
-            png_write_row(s, crow_buf, row_size + 1);
-        }
-    }
-    /* compress last bytes */
-    for(;;) {
-        ret = deflate(&s->zstream, Z_FINISH);
-        if (ret == Z_OK || ret == Z_STREAM_END) {
-            len = IOBUF_SIZE - s->zstream.avail_out;
-            if (len > 0 && s->bytestream_end - s->bytestream > len + 100) {
-                png_write_chunk(&s->bytestream, MKTAG('I', 'D', 'A', 'T'), s->buf, len);
-            }
-            s->zstream.avail_out = IOBUF_SIZE;
-            s->zstream.next_out = s->buf;
-            if (ret == Z_STREAM_END)
-                break;
-        } else {
-            goto fail;
-        }
-    }
-    png_write_chunk(&s->bytestream, MKTAG('I', 'E', 'N', 'D'), NULL, 0);
-
-    ret = s->bytestream - s->bytestream_start;
- the_end:
-    av_free(crow_buf);
-    av_free(tmp_buf);
-    deflateEnd(&s->zstream);
-    return ret;
- fail:
-    ret = -1;
-    goto the_end;
-}
-#endif
-
-#ifdef CONFIG_PNG_DECODER
-AVCodec png_decoder = {
-    "png",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_PNG,
-    sizeof(PNGContext),
-    common_init,
-    NULL,
-    NULL, //decode_end,
-    decode_frame,
-    0 /*CODEC_CAP_DR1*/ /*| CODEC_CAP_DRAW_HORIZ_BAND*/,
-    NULL
-};
-#endif
-
-#ifdef CONFIG_PNG_ENCODER
-AVCodec png_encoder = {
-    "png",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_PNG,
-    sizeof(PNGContext),
-    common_init,
-    encode_frame,
-    NULL, //encode_end,
-    .pix_fmts= (enum PixelFormat[]){PIX_FMT_RGB24, PIX_FMT_RGBA32, PIX_FMT_PAL8, PIX_FMT_GRAY8, PIX_FMT_MONOBLACK, -1},
-};
-#endif // CONFIG_PNG_ENCODER
-#endif
--- a/src/ffmpeg/libavcodec/utils.c	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/libavcodec/utils.c	Mon Mar 12 13:49:56 2007 -0700
@@ -24,63 +24,6 @@
 #include "dsputil.h"
 #include <stdarg.h>
 
-void *av_mallocz(unsigned int size)
-{
-	void *ptr;
-    
-    	ptr = av_malloc(size);
-    	if (!ptr)
-        	return NULL;
-    
-	memset(ptr, 0, size);
-    
-	return ptr;
-}
-
-/* allocation of static arrays - do not use for normal allocation */
-static unsigned int last_static = 0;
-static char*** array_static = NULL;
-static const unsigned int grow_static = 64; // ^2
-void *__av_mallocz_static(void** location, unsigned int size)
-{
-    unsigned int l = (last_static + grow_static) & ~(grow_static - 1);
-    void *ptr = av_mallocz(size);
-    if (!ptr)
-	return NULL;
-
-    if (location)
-    {
-	if (l > last_static)
-	    array_static = realloc(array_static, l);
-	array_static[last_static++] = (char**) location;
-	*location = ptr;
-    }
-    return ptr;
-}
-/* free all static arrays and reset pointers to 0 */
-void av_free_static(void)
-{
-    if (array_static)
-    {
-	unsigned i;
-	for (i = 0; i < last_static; i++)
-	{
-	    free(*array_static[i]);
-            *array_static[i] = NULL;
-	}
-	free(array_static);
-	array_static = 0;
-    }
-    last_static = 0;
-}
-
-/* cannot call it directly because of 'void **' casting is not automatic */
-void __av_freep(void **ptr)
-{
-	free(*ptr);
-    	*ptr = NULL;
-}
-
 /* encoder management */
 AVCodec *first_avcodec;
 
@@ -100,6 +43,26 @@
     int linesize[4];
 }InternalBuffer;
 
+const uint8_t ff_reverse[256]={
+0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0,
+0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8,
+0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4,
+0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC,
+0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2,
+0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA,
+0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6,
+0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE,
+0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1,
+0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9,
+0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5,
+0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD,
+0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3,
+0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB,
+0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7,
+0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF,
+};
+
+
 #define INTERNAL_BUFFER_SIZE 32
 
 #undef ALIGN
@@ -136,6 +99,10 @@
     *height= ALIGN(*height, h_align);
 }
 
+enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt){
+    return fmt[0];
+}
+
 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){
     int i;
     InternalBuffer *buf, *last, temp;
@@ -380,7 +347,7 @@
                 strcpy(channels_str, "5:1");
                 break;
             default:
-                sprintf(channels_str, "%d channels", enc->channels);
+                snprintf(channels_str, 100, "%d channels", enc->channels);
                 break;
         }
         if (enc->sample_rate) {
--- a/src/ffmpeg/libavformat/utils.c	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/libavformat/utils.c	Mon Mar 12 13:49:56 2007 -0700
@@ -352,7 +352,7 @@
 
     s->av_class = &av_format_context_class;
 
-    av_opt_set_defaults(s);
+/*    av_opt_set_defaults(s); */
 }
 
 AVFormatContext *av_alloc_format_context(void)
--- a/src/ffmpeg/libavutil/avutil.h	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/libavutil/avutil.h	Mon Mar 12 13:49:56 2007 -0700
@@ -47,6 +47,7 @@
 #include "integer.h"
 #include "intfloat_readwrite.h"
 #include "log.h"
+#include "fifo.h"
 
 /**
  * Pixel format. Notes:
--- a/src/ffmpeg/libavutil/common.h	Mon Mar 12 13:14:40 2007 -0700
+++ b/src/ffmpeg/libavutil/common.h	Mon Mar 12 13:49:56 2007 -0700
@@ -198,6 +198,7 @@
 #define FFMAX(a,b) ((a) > (b) ? (a) : (b))
 #define FFMIN(a,b) ((a) > (b) ? (b) : (a))
 
+#undef SWAP
 #define SWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
 
 /* misc math functions */