Merge commit 'd6902070c52151ec1e8154ce9b22283a1d0bc192'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 6 Jul 2014 22:04:22 +0000 (00:04 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 6 Jul 2014 22:04:22 +0000 (00:04 +0200)
* commit 'd6902070c52151ec1e8154ce9b22283a1d0bc192':
  dsicin: Split audio and video decoder

Conflicts:
libavcodec/Makefile
libavcodec/dsicinvideo.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/Makefile
libavcodec/dsicinaudio.c
libavcodec/dsicinvideo.c

diff --combined libavcodec/Makefile
@@@ -1,11 -1,8 +1,11 @@@
 +include $(SUBDIR)../config.mak
 +
  NAME = avcodec
  
  HEADERS = avcodec.h                                                     \
            avfft.h                                                       \
            dxva2.h                                                       \
 +          old_codec_ids.h                                               \
            vaapi.h                                                       \
            vda.h                                                         \
            vdpau.h                                                       \
@@@ -13,7 -10,6 +13,7 @@@
            xvmc.h                                                        \
  
  OBJS = allcodecs.o                                                      \
 +       audioconvert.o                                                   \
         avpacket.o                                                       \
         avpicture.o                                                      \
         bitstream.o                                                      \
         codec_desc.o                                                     \
         fmtconvert.o                                                     \
         imgconvert.o                                                     \
 -       log2_tab.o                                                       \
         mathtables.o                                                     \
         options.o                                                        \
         parser.o                                                         \
         raw.o                                                            \
 +       resample.o                                                       \
 +       resample2.o                                                      \
         utils.o                                                          \
  
  # parts needed for many different codecs
@@@ -37,21 -32,18 +37,21 @@@ OBJS-$(CONFIG_AUDIODSP)                
  OBJS-$(CONFIG_BLOCKDSP)                += blockdsp.o
  OBJS-$(CONFIG_BSWAPDSP)                += bswapdsp.o
  OBJS-$(CONFIG_CABAC)                   += cabac.o
 +OBJS-$(CONFIG_CRYSTALHD)               += crystalhd.o
  OBJS-$(CONFIG_DCT)                     += dct.o dct32_fixed.o dct32_float.o
  OBJS-$(CONFIG_DSPUTIL)                 += dsputil.o
  OBJS-$(CONFIG_DXVA2)                   += dxva2.o
  OBJS-$(CONFIG_ENCODERS)                += faandct.o jfdctfst.o jfdctint.o
  OBJS-$(CONFIG_ERROR_RESILIENCE)        += error_resilience.o
 +OBJS-$(CONFIG_EXIF)                    += exif.o tiff_common.o
  FFT-OBJS-$(CONFIG_HARDCODED_TABLES)    += cos_tables.o cos_fixed_tables.o
  OBJS-$(CONFIG_FFT)                     += avfft.o fft_fixed.o fft_float.o \
 +                                          fft_fixed_32.o fft_init_table.o \
                                            $(FFT-OBJS-yes)
  OBJS-$(CONFIG_GOLOMB)                  += golomb.o
  OBJS-$(CONFIG_H263DSP)                 += h263dsp.o
  OBJS-$(CONFIG_H264CHROMA)              += h264chroma.o
 -OBJS-$(CONFIG_H264DSP)                 += h264dsp.o h264idct.o
 +OBJS-$(CONFIG_H264DSP)                 += h264dsp.o h264idct.o startcode.o
  OBJS-$(CONFIG_H264PRED)                += h264pred.o
  OBJS-$(CONFIG_H264QPEL)                += h264qpel.o
  OBJS-$(CONFIG_HPELDSP)                 += hpeldsp.o
@@@ -62,11 -54,9 +62,11 @@@ OBJS-$(CONFIG_IDCTDSP)                 
                                            simple_idct.o jrevdct.o
  OBJS-$(CONFIG_INTRAX8)                 += intrax8.o intrax8dsp.o
  OBJS-$(CONFIG_LIBXVID)                 += libxvid_rc.o
 +OBJS-$(CONFIG_LLAUDDSP)                += lossless_audiodsp.o
 +OBJS-$(CONFIG_LLVIDDSP)                += lossless_videodsp.o
  OBJS-$(CONFIG_LPC)                     += lpc.o
  OBJS-$(CONFIG_LSP)                     += lsp.o
 -OBJS-$(CONFIG_MDCT)                    += mdct_fixed.o mdct_float.o
 +OBJS-$(CONFIG_MDCT)                    += mdct_fixed.o mdct_float.o mdct_fixed_32.o
  OBJS-$(CONFIG_MPEG_ER)                 += mpeg_er.o
  OBJS-$(CONFIG_MPEGAUDIO)               += mpegaudio.o mpegaudiodata.o   \
                                            mpegaudiodecheader.o
@@@ -82,7 -72,6 +82,7 @@@ OBJS-$(CONFIG_QPELDSP)                 
  OBJS-$(CONFIG_RANGECODER)              += rangecoder.o
  RDFT-OBJS-$(CONFIG_HARDCODED_TABLES)   += sin_tables.o
  OBJS-$(CONFIG_RDFT)                    += rdft.o $(RDFT-OBJS-yes)
 +OBJS-$(CONFIG_SHARED)                  += log2_tab.o
  OBJS-$(CONFIG_SINEWIN)                 += sinewin.o
  OBJS-$(CONFIG_TPELDSP)                 += tpeldsp.o
  OBJS-$(CONFIG_VAAPI)                   += vaapi.o
@@@ -92,7 -81,6 +92,7 @@@ OBJS-$(CONFIG_VIDEODSP)                
  OBJS-$(CONFIG_VP3DSP)                  += vp3dsp.o
  
  # decoders/encoders
 +OBJS-$(CONFIG_ZERO12V_DECODER)         += 012v.o
  OBJS-$(CONFIG_A64MULTI_ENCODER)        += a64multienc.o elbg.o
  OBJS-$(CONFIG_A64MULTI5_ENCODER)       += a64multienc.o elbg.o
  OBJS-$(CONFIG_AAC_DECODER)             += aacdec.o aactab.o aacsbr.o aacps.o \
@@@ -103,8 -91,7 +103,8 @@@ OBJS-$(CONFIG_AAC_ENCODER)             
                                            psymodel.o iirfilter.o \
                                            mpeg4audio.o kbdwin.o
  OBJS-$(CONFIG_AASC_DECODER)            += aasc.o msrledec.o
 -OBJS-$(CONFIG_AC3_DECODER)             += ac3dec.o ac3dec_data.o ac3.o kbdwin.o
 +OBJS-$(CONFIG_AC3_DECODER)             += ac3dec_float.o ac3dec_data.o ac3.o kbdwin.o
 +OBJS-$(CONFIG_AC3_FIXED_DECODER)       += ac3dec_fixed.o ac3dec_data.o ac3.o kbdwin.o
  OBJS-$(CONFIG_AC3_ENCODER)             += ac3enc_float.o ac3enc.o ac3tab.o \
                                            ac3.o kbdwin.o
  OBJS-$(CONFIG_AC3_FIXED_ENCODER)       += ac3enc_fixed.o ac3enc.o ac3tab.o ac3.o
@@@ -122,16 -109,10 +122,16 @@@ OBJS-$(CONFIG_AMRWB_DECODER)           
                                            celp_math.o acelp_filters.o \
                                            acelp_vectors.o             \
                                            acelp_pitch_delay.o
 +OBJS-$(CONFIG_AMV_ENCODER)             += mjpegenc.o mjpeg.o mjpegenc_common.o \
 +                                          mpegvideo_enc.o motion_est.o \
 +                                          ratecontrol.o mpeg12data.o   \
 +                                          mpegvideo.o
  OBJS-$(CONFIG_ANM_DECODER)             += anm.o
  OBJS-$(CONFIG_ANSI_DECODER)            += ansi.o cga_data.o
  OBJS-$(CONFIG_APE_DECODER)             += apedec.o
 -OBJS-$(CONFIG_ASS_DECODER)             += assdec.o ass.o
 +OBJS-$(CONFIG_SSA_DECODER)             += assdec.o ass.o ass_split.o
 +OBJS-$(CONFIG_SSA_ENCODER)             += assenc.o ass.o
 +OBJS-$(CONFIG_ASS_DECODER)             += assdec.o ass.o ass_split.o
  OBJS-$(CONFIG_ASS_ENCODER)             += assenc.o ass.o
  OBJS-$(CONFIG_ASV1_DECODER)            += asvdec.o asv.o mpeg12data.o
  OBJS-$(CONFIG_ASV1_ENCODER)            += asvenc.o asv.o mpeg12data.o
@@@ -143,20 -124,12 +143,20 @@@ OBJS-$(CONFIG_ATRAC3P_DECODER)         
                                            atrac3plusdsp.o atrac.o
  OBJS-$(CONFIG_AURA_DECODER)            += cyuv.o
  OBJS-$(CONFIG_AURA2_DECODER)           += aura.o
 +OBJS-$(CONFIG_AVRN_DECODER)            += avrndec.o mjpegdec.o mjpeg.o
 +OBJS-$(CONFIG_AVRP_DECODER)            += r210dec.o
 +OBJS-$(CONFIG_AVRP_ENCODER)            += r210enc.o
  OBJS-$(CONFIG_AVS_DECODER)             += avs.o
 +OBJS-$(CONFIG_AVUI_DECODER)            += avuidec.o
 +OBJS-$(CONFIG_AVUI_ENCODER)            += avuienc.o
 +OBJS-$(CONFIG_AYUV_DECODER)            += v408dec.o
 +OBJS-$(CONFIG_AYUV_ENCODER)            += v408enc.o
  OBJS-$(CONFIG_BETHSOFTVID_DECODER)     += bethsoftvideo.o
  OBJS-$(CONFIG_BFI_DECODER)             += bfi.o
  OBJS-$(CONFIG_BINK_DECODER)            += bink.o binkdsp.o
  OBJS-$(CONFIG_BINKAUDIO_DCT_DECODER)   += binkaudio.o wma.o wma_common.o
  OBJS-$(CONFIG_BINKAUDIO_RDFT_DECODER)  += binkaudio.o wma.o wma_common.o
 +OBJS-$(CONFIG_BINTEXT_DECODER)         += bintext.o cga_data.o
  OBJS-$(CONFIG_BMP_DECODER)             += bmp.o msrledec.o
  OBJS-$(CONFIG_BMP_ENCODER)             += bmpenc.o
  OBJS-$(CONFIG_BMV_AUDIO_DECODER)       += bmvaudio.o
@@@ -168,32 -141,23 +168,32 @@@ OBJS-$(CONFIG_CAVS_DECODER)            
  OBJS-$(CONFIG_CDGRAPHICS_DECODER)      += cdgraphics.o
  OBJS-$(CONFIG_CDXL_DECODER)            += cdxl.o
  OBJS-$(CONFIG_CINEPAK_DECODER)         += cinepak.o
 +OBJS-$(CONFIG_CINEPAK_ENCODER)         += cinepakenc.o elbg.o
  OBJS-$(CONFIG_CLJR_DECODER)            += cljrdec.o
  OBJS-$(CONFIG_CLJR_ENCODER)            += cljrenc.o
  OBJS-$(CONFIG_CLLC_DECODER)            += cllc.o
  OBJS-$(CONFIG_COOK_DECODER)            += cook.o
  OBJS-$(CONFIG_COMFORTNOISE_DECODER)    += cngdec.o celp_filters.o
  OBJS-$(CONFIG_COMFORTNOISE_ENCODER)    += cngenc.o
 +OBJS-$(CONFIG_CPIA_DECODER)            += cpia.o
  OBJS-$(CONFIG_CSCD_DECODER)            += cscd.o
  OBJS-$(CONFIG_CYUV_DECODER)            += cyuv.o
  OBJS-$(CONFIG_DCA_DECODER)             += dcadec.o dca.o dcadsp.o      \
                                            synth_filter.o
 +OBJS-$(CONFIG_DCA_ENCODER)             += dcaenc.o dca.o
 +OBJS-$(CONFIG_DIRAC_DECODER)           += diracdec.o dirac.o diracdsp.o \
 +                                          dirac_arith.o mpeg12data.o dirac_dwt.o
  OBJS-$(CONFIG_DFA_DECODER)             += dfa.o
  OBJS-$(CONFIG_DNXHD_DECODER)           += dnxhddec.o dnxhddata.o
  OBJS-$(CONFIG_DNXHD_ENCODER)           += dnxhdenc.o dnxhddata.o
  OBJS-$(CONFIG_DPX_DECODER)             += dpx.o
  OBJS-$(CONFIG_DPX_ENCODER)             += dpxenc.o
- OBJS-$(CONFIG_DSICINAUDIO_DECODER)     += dsicinav.o
- OBJS-$(CONFIG_DSICINVIDEO_DECODER)     += dsicinav.o
 +OBJS-$(CONFIG_DSD_LSBF_DECODER)        += dsddec.o
 +OBJS-$(CONFIG_DSD_MSBF_DECODER)        += dsddec.o
 +OBJS-$(CONFIG_DSD_LSBF_PLANAR_DECODER) += dsddec.o
 +OBJS-$(CONFIG_DSD_MSBF_PLANAR_DECODER) += dsddec.o
+ OBJS-$(CONFIG_DSICINAUDIO_DECODER)     += dsicinaudio.o
+ OBJS-$(CONFIG_DSICINVIDEO_DECODER)     += dsicinvideo.o
  OBJS-$(CONFIG_DVBSUB_DECODER)          += dvbsubdec.o
  OBJS-$(CONFIG_DVBSUB_ENCODER)          += dvbsub.o
  OBJS-$(CONFIG_DVDSUB_DECODER)          += dvdsubdec.o
@@@ -215,17 -179,14 +215,17 @@@ OBJS-$(CONFIG_EIGHTSVX_EXP_DECODER)    
  OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o
  OBJS-$(CONFIG_ESCAPE124_DECODER)       += escape124.o
  OBJS-$(CONFIG_ESCAPE130_DECODER)       += escape130.o
 +OBJS-$(CONFIG_EVRC_DECODER)            += evrcdec.o acelp_vectors.o lsp.o
  OBJS-$(CONFIG_EXR_DECODER)             += exr.o
  OBJS-$(CONFIG_FFV1_DECODER)            += ffv1dec.o ffv1.o
  OBJS-$(CONFIG_FFV1_ENCODER)            += ffv1enc.o ffv1.o
 +OBJS-$(CONFIG_FFWAVESYNTH_DECODER)     += ffwavesynth.o
  OBJS-$(CONFIG_FIC_DECODER)             += fic.o
  OBJS-$(CONFIG_FLAC_DECODER)            += flacdec.o flacdata.o flac.o flacdsp.o
 -OBJS-$(CONFIG_FLAC_ENCODER)            += flacenc.o flacdata.o flac.o flacdsp.o
 +OBJS-$(CONFIG_FLAC_ENCODER)            += flacenc.o flacdata.o flac.o flacdsp.o vorbis_data.o
  OBJS-$(CONFIG_FLASHSV_DECODER)         += flashsv.o
  OBJS-$(CONFIG_FLASHSV_ENCODER)         += flashsvenc.o
 +OBJS-$(CONFIG_FLASHSV2_ENCODER)        += flashsv2enc.o
  OBJS-$(CONFIG_FLASHSV2_DECODER)        += flashsv.o
  OBJS-$(CONFIG_FLIC_DECODER)            += flicvideo.o
  OBJS-$(CONFIG_FOURXM_DECODER)          += 4xm.o
@@@ -233,9 -194,7 +233,9 @@@ OBJS-$(CONFIG_FRAPS_DECODER)           
  OBJS-$(CONFIG_FRWU_DECODER)            += frwu.o
  OBJS-$(CONFIG_G2M_DECODER)             += g2meet.o mjpeg.o
  OBJS-$(CONFIG_G723_1_DECODER)          += g723_1.o acelp_vectors.o \
 -                                          celp_filters.o
 +                                          celp_filters.o celp_math.o
 +OBJS-$(CONFIG_G723_1_ENCODER)          += g723_1.o acelp_vectors.o celp_math.o
 +OBJS-$(CONFIG_G729_DECODER)            += g729dec.o lsp.o celp_math.o acelp_filters.o acelp_pitch_delay.o acelp_vectors.o g729postfilter.o
  OBJS-$(CONFIG_GIF_DECODER)             += gifdec.o lzw.o
  OBJS-$(CONFIG_GIF_ENCODER)             += gif.o lzwenc.o
  OBJS-$(CONFIG_GSM_DECODER)             += gsmdec.o gsmdec_data.o msgsmdec.o
@@@ -251,7 -210,6 +251,7 @@@ OBJS-$(CONFIG_H264_DECODER)            
                                            h264_direct.o h264_loopfilter.o  \
                                            h264_mb.o h264_picture.o h264_ps.o \
                                            h264_refs.o h264_sei.o h264_slice.o
 +OBJS-$(CONFIG_H264_VDA_DECODER)        += vda_h264_dec.o
  OBJS-$(CONFIG_HEVC_DECODER)            += hevc.o hevc_mvs.o hevc_ps.o hevc_sei.o \
                                            hevc_cabac.o hevc_refs.o hevcpred.o    \
                                            hevcdsp.o hevc_filter.o
@@@ -259,7 -217,6 +259,7 @@@ OBJS-$(CONFIG_HNM4_VIDEO_DECODER)      
  OBJS-$(CONFIG_HUFFYUV_DECODER)         += huffyuv.o huffyuvdec.o
  OBJS-$(CONFIG_HUFFYUV_ENCODER)         += huffyuv.o huffyuvenc.o
  OBJS-$(CONFIG_IDCIN_DECODER)           += idcinvideo.o
 +OBJS-$(CONFIG_IDF_DECODER)             += bintext.o cga_data.o
  OBJS-$(CONFIG_IFF_BYTERUN1_DECODER)    += iff.o
  OBJS-$(CONFIG_IFF_ILBM_DECODER)        += iff.o
  OBJS-$(CONFIG_IMC_DECODER)             += imc.o
@@@ -269,9 -226,6 +269,9 @@@ OBJS-$(CONFIG_INDEO4_DECODER)          
  OBJS-$(CONFIG_INDEO5_DECODER)          += indeo5.o ivi_common.o ivi_dsp.o
  OBJS-$(CONFIG_INTERPLAY_DPCM_DECODER)  += dpcm.o
  OBJS-$(CONFIG_INTERPLAY_VIDEO_DECODER) += interplayvideo.o
 +OBJS-$(CONFIG_JACOSUB_DECODER)         += jacosubdec.o ass.o
 +OBJS-$(CONFIG_JPEG2000_ENCODER)        += j2kenc.o mqcenc.o mqc.o jpeg2000.o \
 +                                          jpeg2000dwt.o
  OBJS-$(CONFIG_JPEG2000_DECODER)        += jpeg2000dec.o jpeg2000.o      \
                                            jpeg2000dwt.o mqcdec.o mqc.o
  OBJS-$(CONFIG_JPEGLS_DECODER)          += jpeglsdec.o jpegls.o
@@@ -287,7 -241,6 +287,7 @@@ OBJS-$(CONFIG_MACE6_DECODER)           
  OBJS-$(CONFIG_MDEC_DECODER)            += mdec.o mpeg12.o mpeg12data.o
  OBJS-$(CONFIG_METASOUND_DECODER)       += metasound.o metasound_data.o \
                                            twinvq.o
 +OBJS-$(CONFIG_MICRODVD_DECODER)        += microdvddec.o ass.o
  OBJS-$(CONFIG_MIMIC_DECODER)           += mimic.o
  OBJS-$(CONFIG_MJPEG_DECODER)           += mjpegdec.o mjpeg.o
  OBJS-$(CONFIG_MJPEG_ENCODER)           += mjpegenc.o mjpeg.o mjpegenc_common.o
@@@ -295,14 -248,10 +295,14 @@@ OBJS-$(CONFIG_MJPEGB_DECODER)          
  OBJS-$(CONFIG_MLP_DECODER)             += mlpdec.o mlpdsp.o
  OBJS-$(CONFIG_MMVIDEO_DECODER)         += mmvideo.o
  OBJS-$(CONFIG_MOTIONPIXELS_DECODER)    += motionpixels.o
 +OBJS-$(CONFIG_MOVTEXT_DECODER)         += movtextdec.o ass.o
 +OBJS-$(CONFIG_MOVTEXT_ENCODER)         += movtextenc.o ass_split.o
  OBJS-$(CONFIG_MP1_DECODER)             += mpegaudiodec_fixed.o
  OBJS-$(CONFIG_MP1FLOAT_DECODER)        += mpegaudiodec_float.o
  OBJS-$(CONFIG_MP2_DECODER)             += mpegaudiodec_fixed.o
 -OBJS-$(CONFIG_MP2_ENCODER)             += mpegaudioenc.o mpegaudio.o \
 +OBJS-$(CONFIG_MP2_ENCODER)             += mpegaudioenc_float.o mpegaudio.o \
 +                                          mpegaudiodata.o mpegaudiodsp_data.o
 +OBJS-$(CONFIG_MP2FIXED_ENCODER)        += mpegaudioenc_fixed.o mpegaudio.o \
                                            mpegaudiodata.o mpegaudiodsp_data.o
  OBJS-$(CONFIG_MP2FLOAT_DECODER)        += mpegaudiodec_float.o
  OBJS-$(CONFIG_MP3_DECODER)             += mpegaudiodec_fixed.o
@@@ -313,13 -262,11 +313,13 @@@ OBJS-$(CONFIG_MP3ON4_DECODER)          
  OBJS-$(CONFIG_MP3ON4FLOAT_DECODER)     += mpegaudiodec_float.o mpeg4audio.o
  OBJS-$(CONFIG_MPC7_DECODER)            += mpc7.o mpc.o
  OBJS-$(CONFIG_MPC8_DECODER)            += mpc8.o mpc.o
 -OBJS-$(CONFIG_MPEG_XVMC_DECODER)       += mpegvideo_xvmc.o
 +OBJS-$(CONFIG_MPEGVIDEO_DECODER)       += mpeg12.o mpeg12data.o \
 +                                          mpegvideo.o error_resilience.o
  OBJS-$(CONFIG_MPEG1VIDEO_DECODER)      += mpeg12dec.o mpeg12.o mpeg12data.o
  OBJS-$(CONFIG_MPEG1VIDEO_ENCODER)      += mpeg12enc.o mpeg12.o
  OBJS-$(CONFIG_MPEG2VIDEO_DECODER)      += mpeg12dec.o mpeg12.o mpeg12data.o
  OBJS-$(CONFIG_MPEG2VIDEO_ENCODER)      += mpeg12enc.o mpeg12.o
 +OBJS-$(CONFIG_MPL2_DECODER)            += mpl2dec.o ass.o
  OBJS-$(CONFIG_MSMPEG4V1_DECODER)       += msmpeg4dec.o msmpeg4.o msmpeg4data.o
  OBJS-$(CONFIG_MSMPEG4V2_DECODER)       += msmpeg4dec.o msmpeg4.o msmpeg4data.o
  OBJS-$(CONFIG_MSMPEG4V2_ENCODER)       += msmpeg4enc.o msmpeg4.o msmpeg4data.o
@@@ -330,7 -277,6 +330,7 @@@ OBJS-$(CONFIG_MSA1_DECODER)            
  OBJS-$(CONFIG_MSS1_DECODER)            += mss1.o mss12.o
  OBJS-$(CONFIG_MSS2_DECODER)            += mss2.o mss12.o mss2dsp.o
  OBJS-$(CONFIG_MSVIDEO1_DECODER)        += msvideo1.o
 +OBJS-$(CONFIG_MSVIDEO1_ENCODER)        += msvideo1enc.o elbg.o
  OBJS-$(CONFIG_MSZH_DECODER)            += lcldec.o
  OBJS-$(CONFIG_MTS2_DECODER)            += mss4.o mss34dsp.o
  OBJS-$(CONFIG_MVC1_DECODER)            += mvcdec.o
@@@ -357,16 -303,12 +357,16 @@@ OBJS-$(CONFIG_PGMYUV_DECODER)          
  OBJS-$(CONFIG_PGMYUV_ENCODER)          += pnmenc.o
  OBJS-$(CONFIG_PGSSUB_DECODER)          += pgssubdec.o
  OBJS-$(CONFIG_PICTOR_DECODER)          += pictordec.o cga_data.o
 +OBJS-$(CONFIG_PJS_DECODER)             += textdec.o ass.o
  OBJS-$(CONFIG_PNG_DECODER)             += png.o pngdec.o pngdsp.o
  OBJS-$(CONFIG_PNG_ENCODER)             += png.o pngenc.o
  OBJS-$(CONFIG_PPM_DECODER)             += pnmdec.o pnm.o
  OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o
 -OBJS-$(CONFIG_PRORES_DECODER)          += proresdec.o proresdata.o proresdsp.o
 -OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc.o proresdata.o
 +OBJS-$(CONFIG_PRORES_DECODER)          += proresdec2.o proresdsp.o proresdata.o
 +OBJS-$(CONFIG_PRORES_LGPL_DECODER)     += proresdec_lgpl.o proresdsp.o proresdata.o
 +OBJS-$(CONFIG_PRORES_ENCODER)          += proresenc_anatoliy.o
 +OBJS-$(CONFIG_PRORES_AW_ENCODER)       += proresenc_anatoliy.o
 +OBJS-$(CONFIG_PRORES_KS_ENCODER)       += proresenc_kostya.o proresdata.o
  OBJS-$(CONFIG_PTX_DECODER)             += ptx.o
  OBJS-$(CONFIG_QCELP_DECODER)           += qcelpdec.o                     \
                                            celp_filters.o acelp_vectors.o \
@@@ -377,16 -319,13 +377,16 @@@ OBJS-$(CONFIG_QPEG_DECODER)            
  OBJS-$(CONFIG_QTRLE_DECODER)           += qtrle.o
  OBJS-$(CONFIG_QTRLE_ENCODER)           += qtrleenc.o
  OBJS-$(CONFIG_R10K_DECODER)            += r210dec.o
 +OBJS-$(CONFIG_R10K_ENCODER)            += r210enc.o
  OBJS-$(CONFIG_R210_DECODER)            += r210dec.o
 +OBJS-$(CONFIG_R210_ENCODER)            += r210enc.o
  OBJS-$(CONFIG_RA_144_DECODER)          += ra144dec.o ra144.o celp_filters.o
  OBJS-$(CONFIG_RA_144_ENCODER)          += ra144enc.o ra144.o celp_filters.o
  OBJS-$(CONFIG_RA_288_DECODER)          += ra288.o celp_filters.o
  OBJS-$(CONFIG_RALF_DECODER)            += ralf.o
  OBJS-$(CONFIG_RAWVIDEO_DECODER)        += rawdec.o
  OBJS-$(CONFIG_RAWVIDEO_ENCODER)        += rawenc.o
 +OBJS-$(CONFIG_REALTEXT_DECODER)        += realtextdec.o ass.o
  OBJS-$(CONFIG_RL2_DECODER)             += rl2.o
  OBJS-$(CONFIG_ROQ_DECODER)             += roqvideodec.o roqvideo.o
  OBJS-$(CONFIG_ROQ_ENCODER)             += roqvideoenc.o roqvideo.o elbg.o
@@@ -399,9 -338,7 +399,9 @@@ OBJS-$(CONFIG_RV20_DECODER)            
  OBJS-$(CONFIG_RV20_ENCODER)            += rv20enc.o
  OBJS-$(CONFIG_RV30_DECODER)            += rv30.o rv34.o rv30dsp.o rv34dsp.o
  OBJS-$(CONFIG_RV40_DECODER)            += rv40.o rv34.o rv34dsp.o rv40dsp.o
 +OBJS-$(CONFIG_SAMI_DECODER)            += samidec.o ass.o
  OBJS-$(CONFIG_S302M_DECODER)           += s302m.o
 +OBJS-$(CONFIG_S302M_ENCODER)           += s302menc.o
  OBJS-$(CONFIG_SANM_DECODER)            += sanm.o
  OBJS-$(CONFIG_SGI_DECODER)             += sgidec.o
  OBJS-$(CONFIG_SGI_ENCODER)             += sgienc.o rle.o
@@@ -414,45 -351,29 +414,45 @@@ OBJS-$(CONFIG_SIPR_DECODER)            
  OBJS-$(CONFIG_SMACKAUD_DECODER)        += smacker.o
  OBJS-$(CONFIG_SMACKER_DECODER)         += smacker.o
  OBJS-$(CONFIG_SMC_DECODER)             += smc.o
 +OBJS-$(CONFIG_SMVJPEG_DECODER)         += smvjpegdec.o
 +OBJS-$(CONFIG_SNOW_DECODER)            += snowdec.o snow.o snow_dwt.o
 +OBJS-$(CONFIG_SNOW_ENCODER)            += snowenc.o snow.o snow_dwt.o             \
 +                                          h263.o ituh263enc.o
  OBJS-$(CONFIG_SOL_DPCM_DECODER)        += dpcm.o
 +OBJS-$(CONFIG_SONIC_DECODER)           += sonic.o
 +OBJS-$(CONFIG_SONIC_ENCODER)           += sonic.o
 +OBJS-$(CONFIG_SONIC_LS_ENCODER)        += sonic.o
  OBJS-$(CONFIG_SP5X_DECODER)            += sp5xdec.o
  OBJS-$(CONFIG_SRT_DECODER)             += srtdec.o ass.o
 +OBJS-$(CONFIG_SRT_ENCODER)             += srtenc.o ass_split.o
 +OBJS-$(CONFIG_SUBRIP_DECODER)          += srtdec.o ass.o
 +OBJS-$(CONFIG_SUBRIP_ENCODER)          += srtenc.o ass_split.o
 +OBJS-$(CONFIG_SUBVIEWER1_DECODER)      += textdec.o ass.o
 +OBJS-$(CONFIG_SUBVIEWER_DECODER)       += subviewerdec.o ass.o
  OBJS-$(CONFIG_SUNRAST_DECODER)         += sunrast.o
  OBJS-$(CONFIG_SUNRAST_ENCODER)         += sunrastenc.o
  OBJS-$(CONFIG_SVQ1_DECODER)            += svq1dec.o svq1.o svq13.o h263.o
  OBJS-$(CONFIG_SVQ1_ENCODER)            += svq1enc.o svq1.o    \
                                            h263.o ituh263enc.o
  OBJS-$(CONFIG_SVQ3_DECODER)            += svq3.o svq13.o mpegutils.o
 +OBJS-$(CONFIG_TEXT_DECODER)            += textdec.o ass.o
  OBJS-$(CONFIG_TAK_DECODER)             += takdec.o tak.o
  OBJS-$(CONFIG_TARGA_DECODER)           += targa.o
  OBJS-$(CONFIG_TARGA_ENCODER)           += targaenc.o rle.o
 +OBJS-$(CONFIG_TARGA_Y216_DECODER)      += targa_y216dec.o
  OBJS-$(CONFIG_THEORA_DECODER)          += xiph.o
  OBJS-$(CONFIG_TIERTEXSEQVIDEO_DECODER) += tiertexseqv.o
 -OBJS-$(CONFIG_TIFF_DECODER)            += tiff.o lzw.o faxcompr.o
 -OBJS-$(CONFIG_TIFF_ENCODER)            += tiffenc.o rle.o lzwenc.o
 +OBJS-$(CONFIG_TIFF_DECODER)            += tiff.o lzw.o faxcompr.o tiff_data.o tiff_common.o
 +OBJS-$(CONFIG_TIFF_ENCODER)            += tiffenc.o rle.o lzwenc.o tiff_data.o
  OBJS-$(CONFIG_TMV_DECODER)             += tmv.o cga_data.o
 +OBJS-$(CONFIG_TRUEHD_DECODER)          += mlpdec.o mlpdsp.o
  OBJS-$(CONFIG_TRUEMOTION1_DECODER)     += truemotion1.o
  OBJS-$(CONFIG_TRUEMOTION2_DECODER)     += truemotion2.o
  OBJS-$(CONFIG_TRUESPEECH_DECODER)      += truespeech.o
  OBJS-$(CONFIG_TSCC_DECODER)            += tscc.o msrledec.o
  OBJS-$(CONFIG_TSCC2_DECODER)           += tscc2.o
 -OBJS-$(CONFIG_TTA_DECODER)             += tta.o
 +OBJS-$(CONFIG_TTA_DECODER)             += tta.o ttadata.o ttadsp.o
 +OBJS-$(CONFIG_TTA_ENCODER)             += ttaenc.o ttadata.o
  OBJS-$(CONFIG_TWINVQ_DECODER)          += twinvqdec.o twinvq.o
  OBJS-$(CONFIG_TXD_DECODER)             += txd.o s3tc.o
  OBJS-$(CONFIG_ULTI_DECODER)            += ulti.o
@@@ -460,18 -381,13 +460,18 @@@ OBJS-$(CONFIG_UTVIDEO_DECODER)         
  OBJS-$(CONFIG_UTVIDEO_ENCODER)         += utvideoenc.o utvideo.o
  OBJS-$(CONFIG_V210_DECODER)            += v210dec.o
  OBJS-$(CONFIG_V210_ENCODER)            += v210enc.o
 +OBJS-$(CONFIG_V308_DECODER)            += v308dec.o
 +OBJS-$(CONFIG_V308_ENCODER)            += v308enc.o
 +OBJS-$(CONFIG_V408_DECODER)            += v408dec.o
 +OBJS-$(CONFIG_V408_ENCODER)            += v408enc.o
  OBJS-$(CONFIG_V410_DECODER)            += v410dec.o
  OBJS-$(CONFIG_V410_ENCODER)            += v410enc.o
  OBJS-$(CONFIG_V210X_DECODER)           += v210x.o
  OBJS-$(CONFIG_VB_DECODER)              += vb.o
  OBJS-$(CONFIG_VBLE_DECODER)            += vble.o
  OBJS-$(CONFIG_VC1_DECODER)             += vc1dec.o vc1.o vc1data.o vc1dsp.o \
 -                                          msmpeg4dec.o msmpeg4.o msmpeg4data.o
 +                                          msmpeg4dec.o msmpeg4.o msmpeg4data.o \
 +                                          wmv2dsp.o startcode.o
  OBJS-$(CONFIG_VCR1_DECODER)            += vcr1.o
  OBJS-$(CONFIG_VMDAUDIO_DECODER)        += vmdav.o
  OBJS-$(CONFIG_VMDVIDEO_DECODER)        += vmdav.o
@@@ -487,15 -403,11 +487,15 @@@ OBJS-$(CONFIG_VP6_DECODER)             
                                            vp6dsp.o vp56rac.o
  OBJS-$(CONFIG_VP7_DECODER)             += vp8.o vp8dsp.o vp56rac.o
  OBJS-$(CONFIG_VP8_DECODER)             += vp8.o vp8dsp.o vp56rac.o
 -OBJS-$(CONFIG_VP9_DECODER)             += vp9.o vp9data.o vp9dsp.o \
 -                                          vp9block.o vp9prob.o vp9mvs.o vp56rac.o
 +OBJS-$(CONFIG_VP9_DECODER)             += vp9.o vp9dsp.o vp56rac.o
 +OBJS-$(CONFIG_VPLAYER_DECODER)         += textdec.o ass.o
  OBJS-$(CONFIG_VQA_DECODER)             += vqavideo.o
  OBJS-$(CONFIG_WAVPACK_DECODER)         += wavpack.o
 -OBJS-$(CONFIG_WEBP_DECODER)            += webp.o
 +OBJS-$(CONFIG_WAVPACK_ENCODER)         += wavpackenc.o
 +OBJS-$(CONFIG_WEBP_DECODER)            += vp8.o vp8dsp.o vp56rac.o
 +OBJS-$(CONFIG_WEBP_DECODER)            += webp.o exif.o tiff_common.o
 +OBJS-$(CONFIG_WEBVTT_DECODER)          += webvttdec.o
 +OBJS-$(CONFIG_WEBVTT_ENCODER)          += webvttenc.o ass_split.o
  OBJS-$(CONFIG_WMALOSSLESS_DECODER)     += wmalosslessdec.o wma_common.o
  OBJS-$(CONFIG_WMAPRO_DECODER)          += wmaprodec.o wma.o wma_common.o
  OBJS-$(CONFIG_WMAV1_DECODER)           += wmadec.o wma.o wma_common.o aactab.o
@@@ -515,21 -427,14 +515,21 @@@ OBJS-$(CONFIG_WS_SND1_DECODER)         
  OBJS-$(CONFIG_XAN_DPCM_DECODER)        += dpcm.o
  OBJS-$(CONFIG_XAN_WC3_DECODER)         += xan.o
  OBJS-$(CONFIG_XAN_WC4_DECODER)         += xxan.o
 +OBJS-$(CONFIG_XBIN_DECODER)            += bintext.o cga_data.o
  OBJS-$(CONFIG_XBM_DECODER)             += xbmdec.o
  OBJS-$(CONFIG_XBM_ENCODER)             += xbmenc.o
 +OBJS-$(CONFIG_XFACE_DECODER)           += xfacedec.o xface.o
 +OBJS-$(CONFIG_XFACE_ENCODER)           += xfaceenc.o xface.o
  OBJS-$(CONFIG_XL_DECODER)              += xl.o
  OBJS-$(CONFIG_XSUB_DECODER)            += xsubdec.o
  OBJS-$(CONFIG_XSUB_ENCODER)            += xsubenc.o
  OBJS-$(CONFIG_XWD_DECODER)             += xwddec.o
  OBJS-$(CONFIG_XWD_ENCODER)             += xwdenc.o
 +OBJS-$(CONFIG_Y41P_DECODER)            += y41pdec.o
 +OBJS-$(CONFIG_Y41P_ENCODER)            += y41penc.o
  OBJS-$(CONFIG_YOP_DECODER)             += yop.o
 +OBJS-$(CONFIG_YUV4_DECODER)            += yuv4dec.o
 +OBJS-$(CONFIG_YUV4_ENCODER)            += yuv4enc.o
  OBJS-$(CONFIG_ZEROCODEC_DECODER)       += zerocodec.o
  OBJS-$(CONFIG_ZLIB_DECODER)            += lcldec.o
  OBJS-$(CONFIG_ZLIB_ENCODER)            += lclenc.o
@@@ -554,16 -459,12 +554,16 @@@ OBJS-$(CONFIG_PCM_MULAW_DECODER
  OBJS-$(CONFIG_PCM_MULAW_ENCODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S8_DECODER)             += pcm.o
  OBJS-$(CONFIG_PCM_S8_ENCODER)             += pcm.o
 -OBJS-$(CONFIG_PCM_S8_PLANAR_DECODER)      += 8svx.o
 +OBJS-$(CONFIG_PCM_S8_PLANAR_DECODER)      += pcm.o
 +OBJS-$(CONFIG_PCM_S8_PLANAR_ENCODER)      += pcm.o
  OBJS-$(CONFIG_PCM_S16BE_DECODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S16BE_ENCODER)          += pcm.o
 +OBJS-$(CONFIG_PCM_S16BE_PLANAR_DECODER)   += pcm.o
 +OBJS-$(CONFIG_PCM_S16BE_PLANAR_ENCODER)   += pcm.o
  OBJS-$(CONFIG_PCM_S16LE_DECODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S16LE_ENCODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S16LE_PLANAR_DECODER)   += pcm.o
 +OBJS-$(CONFIG_PCM_S16LE_PLANAR_ENCODER)   += pcm.o
  OBJS-$(CONFIG_PCM_S24BE_DECODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S24BE_ENCODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S24DAUD_DECODER)        += pcm.o
@@@ -571,13 -472,11 +571,13 @@@ OBJS-$(CONFIG_PCM_S24DAUD_ENCODER
  OBJS-$(CONFIG_PCM_S24LE_DECODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S24LE_ENCODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S24LE_PLANAR_DECODER)   += pcm.o
 +OBJS-$(CONFIG_PCM_S24LE_PLANAR_ENCODER)   += pcm.o
  OBJS-$(CONFIG_PCM_S32BE_DECODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S32BE_ENCODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S32LE_DECODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S32LE_ENCODER)          += pcm.o
  OBJS-$(CONFIG_PCM_S32LE_PLANAR_DECODER)   += pcm.o
 +OBJS-$(CONFIG_PCM_S32LE_PLANAR_ENCODER)   += pcm.o
  OBJS-$(CONFIG_PCM_U8_DECODER)             += pcm.o
  OBJS-$(CONFIG_PCM_U8_ENCODER)             += pcm.o
  OBJS-$(CONFIG_PCM_U16BE_DECODER)          += pcm.o
@@@ -597,9 -496,7 +597,9 @@@ OBJS-$(CONFIG_PCM_ZORK_DECODER
  OBJS-$(CONFIG_ADPCM_4XM_DECODER)          += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_ADX_DECODER)          += adxdec.o adx.o
  OBJS-$(CONFIG_ADPCM_ADX_ENCODER)          += adxenc.o adx.o
 +OBJS-$(CONFIG_ADPCM_AFC_DECODER)          += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_CT_DECODER)           += adpcm.o adpcm_data.o
 +OBJS-$(CONFIG_ADPCM_DTK_DECODER)          += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_EA_DECODER)           += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_EA_MAXIS_XA_DECODER)  += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_EA_R1_DECODER)        += adpcm.o adpcm_data.o
@@@ -610,7 -507,6 +610,7 @@@ OBJS-$(CONFIG_ADPCM_G722_DECODER
  OBJS-$(CONFIG_ADPCM_G722_ENCODER)         += g722.o g722enc.o
  OBJS-$(CONFIG_ADPCM_G726_DECODER)         += g726.o
  OBJS-$(CONFIG_ADPCM_G726_ENCODER)         += g726.o
 +OBJS-$(CONFIG_ADPCM_G726LE_DECODER)       += g726.o
  OBJS-$(CONFIG_ADPCM_IMA_AMV_DECODER)      += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_APC_DECODER)      += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_DK3_DECODER)      += adpcm.o adpcm_data.o
@@@ -618,10 -514,8 +618,10 @@@ OBJS-$(CONFIG_ADPCM_IMA_DK4_DECODER
  OBJS-$(CONFIG_ADPCM_IMA_EA_EACS_DECODER)  += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_EA_SEAD_DECODER)  += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_ISS_DECODER)      += adpcm.o adpcm_data.o
 +OBJS-$(CONFIG_ADPCM_IMA_OKI_DECODER)      += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_QT_DECODER)       += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_QT_ENCODER)       += adpcmenc.o adpcm_data.o
 +OBJS-$(CONFIG_ADPCM_IMA_RAD_DECODER)      += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_SMJPEG_DECODER)   += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_WAV_DECODER)      += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_IMA_WAV_ENCODER)      += adpcmenc.o adpcm_data.o
@@@ -638,25 -532,22 +638,25 @@@ OBJS-$(CONFIG_ADPCM_VIMA_DECODER
  OBJS-$(CONFIG_ADPCM_XA_DECODER)           += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_YAMAHA_DECODER)       += adpcm.o adpcm_data.o
  OBJS-$(CONFIG_ADPCM_YAMAHA_ENCODER)       += adpcmenc.o adpcm_data.o
 +OBJS-$(CONFIG_VIMA_DECODER)               += vima.o adpcm_data.o
  
  # hardware accelerators
 -OBJS-$(CONFIG_H263_VAAPI_HWACCEL)         += vaapi_mpeg4.o
 +OBJS-$(CONFIG_H263_VAAPI_HWACCEL)         += vaapi_mpeg4.o vaapi_mpeg.o
  OBJS-$(CONFIG_H263_VDPAU_HWACCEL)         += vdpau_mpeg4.o
  OBJS-$(CONFIG_H264_DXVA2_HWACCEL)         += dxva2_h264.o
  OBJS-$(CONFIG_H264_VAAPI_HWACCEL)         += vaapi_h264.o
  OBJS-$(CONFIG_H264_VDA_HWACCEL)           += vda_h264.o
  OBJS-$(CONFIG_H264_VDPAU_HWACCEL)         += vdpau_h264.o
  OBJS-$(CONFIG_MPEG1_VDPAU_HWACCEL)        += vdpau_mpeg12.o
 +OBJS-$(CONFIG_MPEG1_XVMC_HWACCEL)         += mpegvideo_xvmc.o
  OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL)        += dxva2_mpeg2.o
 -OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL)        += vaapi_mpeg2.o
 +OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL)        += vaapi_mpeg2.o vaapi_mpeg.o
  OBJS-$(CONFIG_MPEG2_VDPAU_HWACCEL)        += vdpau_mpeg12.o
 -OBJS-$(CONFIG_MPEG4_VAAPI_HWACCEL)        += vaapi_mpeg4.o
 +OBJS-$(CONFIG_MPEG2_XVMC_HWACCEL)         += mpegvideo_xvmc.o
 +OBJS-$(CONFIG_MPEG4_VAAPI_HWACCEL)        += vaapi_mpeg4.o vaapi_mpeg.o
  OBJS-$(CONFIG_MPEG4_VDPAU_HWACCEL)        += vdpau_mpeg4.o
  OBJS-$(CONFIG_VC1_DXVA2_HWACCEL)          += dxva2_vc1.o
 -OBJS-$(CONFIG_VC1_VAAPI_HWACCEL)          += vaapi_vc1.o
 +OBJS-$(CONFIG_VC1_VAAPI_HWACCEL)          += vaapi_vc1.o vaapi_mpeg.o
  OBJS-$(CONFIG_VC1_VDPAU_HWACCEL)          += vdpau_vc1.o
  
  # libavformat dependencies
@@@ -666,50 -557,41 +666,50 @@@ OBJS-$(CONFIG_CAF_DEMUXER)             
                                            ac3tab.o
  OBJS-$(CONFIG_DV_DEMUXER)              += dv_profile.o
  OBJS-$(CONFIG_DV_MUXER)                += dv_profile.o
 -OBJS-$(CONFIG_FLAC_DEMUXER)            += flac.o flacdata.o             \
 +OBJS-$(CONFIG_FLAC_DEMUXER)            += flac.o flacdata.o vorbis_data.o \
                                            vorbis_parser.o xiph.o
 -OBJS-$(CONFIG_FLAC_MUXER)              += flac.o flacdata.o
 +OBJS-$(CONFIG_FLAC_MUXER)              += flac.o flacdata.o vorbis_data.o
  OBJS-$(CONFIG_FLV_DEMUXER)             += mpeg4audio.o
  OBJS-$(CONFIG_GXF_DEMUXER)             += mpeg12data.o
  OBJS-$(CONFIG_IFF_DEMUXER)             += iff.o
  OBJS-$(CONFIG_ISMV_MUXER)              += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_LATM_MUXER)              += mpeg4audio.o
 -OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER)    += xiph.o mpeg4audio.o           \
 +OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER)    += xiph.o mpeg4audio.o vorbis_data.o \
                                            flac.o flacdata.o
  OBJS-$(CONFIG_MATROSKA_DEMUXER)        += mpeg4audio.o mpegaudiodata.o  \
                                            vorbis_parser.o xiph.o
  OBJS-$(CONFIG_MATROSKA_MUXER)          += mpeg4audio.o mpegaudiodata.o  \
 -                                          flac.o flacdata.o xiph.o
 +                                          flac.o flacdata.o vorbis_data.o xiph.o
  OBJS-$(CONFIG_MP2_MUXER)               += mpegaudiodata.o mpegaudiodecheader.o
  OBJS-$(CONFIG_MP3_MUXER)               += mpegaudiodata.o mpegaudiodecheader.o
  OBJS-$(CONFIG_MOV_DEMUXER)             += mpeg4audio.o mpegaudiodata.o ac3tab.o
  OBJS-$(CONFIG_MOV_MUXER)               += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_MPEGTS_MUXER)            += mpeg4audio.o
  OBJS-$(CONFIG_MPEGTS_DEMUXER)          += mpeg4audio.o mpegaudiodata.o
 +OBJS-$(CONFIG_MXF_MUXER)               += dnxhddata.o
  OBJS-$(CONFIG_NUT_MUXER)               += mpegaudiodata.o
 +OBJS-$(CONFIG_OGA_MUXER)               += xiph.o flac.o flacdata.o
  OBJS-$(CONFIG_OGG_DEMUXER)             += xiph.o flac.o flacdata.o     \
                                            mpeg12data.o vorbis_parser.o \
 -                                          dirac.o
 -OBJS-$(CONFIG_OGG_MUXER)               += xiph.o flac.o flacdata.o
 +                                          dirac.o vorbis_data.o
 +OBJS-$(CONFIG_OGG_MUXER)               += xiph.o flac.o flacdata.o \
 +                                          vorbis_data.o
  OBJS-$(CONFIG_RTP_MUXER)               += mpeg4audio.o xiph.o
  OBJS-$(CONFIG_RTPDEC)                  += mjpeg.o
  OBJS-$(CONFIG_SPDIF_DEMUXER)           += aacadtsdec.o mpeg4audio.o
  OBJS-$(CONFIG_SPDIF_MUXER)             += dca.o
  OBJS-$(CONFIG_TAK_DEMUXER)             += tak.o
  OBJS-$(CONFIG_WEBM_MUXER)              += mpeg4audio.o mpegaudiodata.o  \
 -                                          xiph.o flac.o flacdata.o
 +                                          xiph.o flac.o flacdata.o \
 +                                          vorbis_data.o
  OBJS-$(CONFIG_WTV_DEMUXER)             += mpeg4audio.o mpegaudiodata.o
  
 +# libavfilter dependencies
 +OBJS-$(CONFIG_ELBG_FILTER)             += elbg.o
 +
  # external codec libraries
 +OBJS-$(CONFIG_LIBAACPLUS_ENCODER)         += libaacplus.o
 +OBJS-$(CONFIG_LIBCELT_DECODER)            += libcelt_dec.o
  OBJS-$(CONFIG_LIBFAAC_ENCODER)            += libfaac.o
  OBJS-$(CONFIG_LIBFDK_AAC_DECODER)         += libfdk-aacdec.o
  OBJS-$(CONFIG_LIBFDK_AAC_ENCODER)         += libfdk-aacenc.o
@@@ -733,19 -615,14 +733,19 @@@ OBJS-$(CONFIG_LIBSCHROEDINGER_DECODER
                                               libschroedinger.o
  OBJS-$(CONFIG_LIBSCHROEDINGER_ENCODER)    += libschroedingerenc.o \
                                               libschroedinger.o
 +OBJS-$(CONFIG_LIBSHINE_ENCODER)           += libshine.o
  OBJS-$(CONFIG_LIBSPEEX_DECODER)           += libspeexdec.o
  OBJS-$(CONFIG_LIBSPEEX_ENCODER)           += libspeexenc.o
 +OBJS-$(CONFIG_LIBSTAGEFRIGHT_H264_DECODER)+= libstagefright.o
  OBJS-$(CONFIG_LIBTHEORA_ENCODER)          += libtheoraenc.o
  OBJS-$(CONFIG_LIBTWOLAME_ENCODER)         += libtwolame.o
 +OBJS-$(CONFIG_LIBUTVIDEO_DECODER)         += libutvideodec.o
 +OBJS-$(CONFIG_LIBUTVIDEO_ENCODER)         += libutvideoenc.o
  OBJS-$(CONFIG_LIBVO_AACENC_ENCODER)       += libvo-aacenc.o mpeg4audio.o
  OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER)     += libvo-amrwbenc.o
 -OBJS-$(CONFIG_LIBVORBIS_ENCODER)          += libvorbis.o \
 -                                             vorbis_data.o vorbis_parser.o
 +OBJS-$(CONFIG_LIBVORBIS_DECODER)          += libvorbisdec.o
 +OBJS-$(CONFIG_LIBVORBIS_ENCODER)          += libvorbisenc.o \
 +                                             vorbis_data.o vorbis_parser.o xiph.o
  OBJS-$(CONFIG_LIBVPX_VP8_DECODER)         += libvpxdec.o
  OBJS-$(CONFIG_LIBVPX_VP8_ENCODER)         += libvpxenc.o
  OBJS-$(CONFIG_LIBVPX_VP9_DECODER)         += libvpxdec.o libvpx.o
@@@ -756,7 -633,6 +756,7 @@@ OBJS-$(CONFIG_LIBX264_ENCODER
  OBJS-$(CONFIG_LIBX265_ENCODER)            += libx265.o
  OBJS-$(CONFIG_LIBXAVS_ENCODER)            += libxavs.o
  OBJS-$(CONFIG_LIBXVID_ENCODER)            += libxvid.o
 +OBJS-$(CONFIG_LIBZVBI_TELETEXT_DECODER)   += libzvbi-teletextdec.o
  
  # parsers
  OBJS-$(CONFIG_AAC_PARSER)              += aac_parser.o aac_ac3_parser.o \
@@@ -771,12 -647,9 +771,12 @@@ OBJS-$(CONFIG_COOK_PARSER)             
  OBJS-$(CONFIG_DCA_PARSER)              += dca_parser.o dca.o
  OBJS-$(CONFIG_DIRAC_PARSER)            += dirac_parser.o
  OBJS-$(CONFIG_DNXHD_PARSER)            += dnxhd_parser.o
 +OBJS-$(CONFIG_DPX_PARSER)              += dpx_parser.o
  OBJS-$(CONFIG_DVBSUB_PARSER)           += dvbsub_parser.o
 +OBJS-$(CONFIG_DVD_NAV_PARSER)          += dvd_nav_parser.o
  OBJS-$(CONFIG_DVDSUB_PARSER)           += dvdsub_parser.o
 -OBJS-$(CONFIG_FLAC_PARSER)             += flac_parser.o flacdata.o flac.o
 +OBJS-$(CONFIG_FLAC_PARSER)             += flac_parser.o flacdata.o flac.o \
 +                                          vorbis_data.o
  OBJS-$(CONFIG_GSM_PARSER)              += gsm_parser.o
  OBJS-$(CONFIG_H261_PARSER)             += h261_parser.o
  OBJS-$(CONFIG_H263_PARSER)             += h263_parser.o
@@@ -787,7 -660,6 +787,7 @@@ OBJS-$(CONFIG_MLP_PARSER)              
  OBJS-$(CONFIG_MPEG4VIDEO_PARSER)       += mpeg4video_parser.o h263.o \
                                            mpeg4videodec.o mpeg4video.o \
                                            ituh263dec.o h263dec.o
 +OBJS-$(CONFIG_PNG_PARSER)              += png_parser.o
  OBJS-$(CONFIG_MPEGAUDIO_PARSER)        += mpegaudio_parser.o \
                                            mpegaudiodecheader.o mpegaudiodata.o
  OBJS-$(CONFIG_MPEGVIDEO_PARSER)        += mpegvideo_parser.o    \
@@@ -798,13 -670,12 +798,13 @@@ OBJS-$(CONFIG_PNM_PARSER)              
  OBJS-$(CONFIG_RV30_PARSER)             += rv34_parser.o
  OBJS-$(CONFIG_RV40_PARSER)             += rv34_parser.o
  OBJS-$(CONFIG_TAK_PARSER)              += tak_parser.o tak.o
 -OBJS-$(CONFIG_VC1_PARSER)              += vc1_parser.o vc1.o vc1data.o \
 +OBJS-$(CONFIG_VC1_PARSER)              += vc1_parser.o vc1.o vc1data.o vc1dsp.o \
                                            msmpeg4.o msmpeg4data.o mpeg4video.o \
 -                                          h263.o
 +                                          h263.o startcode.o
  OBJS-$(CONFIG_VORBIS_PARSER)           += vorbis_parser.o xiph.o
  OBJS-$(CONFIG_VP3_PARSER)              += vp3_parser.o
  OBJS-$(CONFIG_VP8_PARSER)              += vp8_parser.o
 +OBJS-$(CONFIG_VP9_PARSER)              += vp9_parser.o
  
  # bitstream filters
  OBJS-$(CONFIG_AAC_ADTSTOASC_BSF)          += aac_adtstoasc_bsf.o aacadtsdec.o \
@@@ -816,8 -687,6 +816,8 @@@ OBJS-$(CONFIG_IMX_DUMP_HEADER_BSF
  OBJS-$(CONFIG_MJPEG2JPEG_BSF)             += mjpeg2jpeg_bsf.o mjpeg.o
  OBJS-$(CONFIG_MJPEGA_DUMP_HEADER_BSF)     += mjpega_dump_header_bsf.o
  OBJS-$(CONFIG_MOV2TEXTSUB_BSF)            += movsub_bsf.o
 +OBJS-$(CONFIG_MP3_HEADER_DECOMPRESS_BSF)  += mp3_header_decompress_bsf.o \
 +                                             mpegaudiodata.o
  OBJS-$(CONFIG_NOISE_BSF)                  += noise_bsf.o
  OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF)       += remove_extradata_bsf.o
  OBJS-$(CONFIG_TEXT2MOVSUB_BSF)            += movsub_bsf.o
  OBJS-$(HAVE_LIBC_MSVCRT)               += file_open.o
  OBJS-$(HAVE_THREADS)                   += pthread.o pthread_slice.o pthread_frame.o
  
 +OBJS-$(CONFIG_FRAME_THREAD_ENCODER)    += frame_thread_encoder.o
 +
 +# Windows resource file
 +SLIBOBJS-$(HAVE_GNU_WINDRES)           += avcodecres.o
 +
  SKIPHEADERS                            += %_tablegen.h                  \
                                            %_tables.h                    \
                                            aac_tablegen_decl.h           \
                                            fft-internal.h                \
 +                                          libutvideo.h                  \
 +                                          old_codec_ids.h               \
                                            tableprint.h                  \
                                            $(ARCH)/vp56_arith.h          \
  
  SKIPHEADERS-$(CONFIG_DXVA2)            += dxva2.h dxva2_internal.h
  SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER)  += libschroedinger.h
 -SKIPHEADERS-$(CONFIG_MPEG_XVMC_DECODER) += xvmc.h
 +SKIPHEADERS-$(CONFIG_LIBUTVIDEO)       += libutvideo.h
 +SKIPHEADERS-$(CONFIG_XVMC)             += xvmc.h
  SKIPHEADERS-$(CONFIG_VAAPI)            += vaapi_internal.h
  SKIPHEADERS-$(CONFIG_VDA)              += vda.h vda_internal.h
  SKIPHEADERS-$(CONFIG_VDPAU)            += vdpau.h vdpau_internal.h
  
 -TESTPROGS = dct                                                         \
 +TESTPROGS = cabac                                                       \
              fft                                                         \
              fft-fixed                                                   \
 +            fft-fixed32                                                 \
              golomb                                                      \
              iirfilter                                                   \
 +            imgconvert                                                  \
              rangecoder                                                  \
 +            snowenc                                                     \
  
 +TESTPROGS-$(CONFIG_DCT) += dct
 +TESTPROGS-$(HAVE_MMX) += motion
  TESTOBJS = dctref.o
  
 +TOOLS = fourcc2pixfmt
 +
  HOSTPROGS = aac_tablegen                                                \
              aacps_tablegen                                              \
              cbrt_tablegen                                               \
              cos_tablegen                                                \
 +            dsd_tablegen                                                \
              dv_tablegen                                                 \
              motionpixels_tablegen                                       \
              mpegaudio_tablegen                                          \
@@@ -893,7 -746,7 +893,7 @@@ els
  $(SUBDIR)%_tablegen$(HOSTEXESUF): HOSTCFLAGS += -DCONFIG_SMALL=0
  endif
  
 -GEN_HEADERS = cbrt_tables.h aacps_tables.h aac_tables.h dv_tables.h     \
 +GEN_HEADERS = cbrt_tables.h aacps_tables.h aac_tables.h dsd_tables.h dv_tables.h     \
                sinewin_tables.h mpegaudio_tables.h motionpixels_tables.h \
                pcm_tables.h qdm2_tables.h
  GEN_HEADERS := $(addprefix $(SUBDIR), $(GEN_HEADERS))
@@@ -905,7 -758,6 +905,7 @@@ ifdef CONFIG_HARDCODED_TABLE
  $(SUBDIR)aacdec.o: $(SUBDIR)cbrt_tables.h
  $(SUBDIR)aacps.o: $(SUBDIR)aacps_tables.h
  $(SUBDIR)aactab.o: $(SUBDIR)aac_tables.h
 +$(SUBDIR)dsddec.o: $(SUBDIR)dsd_tables.h
  $(SUBDIR)dvenc.o: $(SUBDIR)dv_tables.h
  $(SUBDIR)sinewin.o: $(SUBDIR)sinewin_tables.h
  $(SUBDIR)mpegaudiodec_fixed.o: $(SUBDIR)mpegaudio_tables.h
diff --combined libavcodec/dsicinaudio.c
index 0000000,969e4ae..b336d2c
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,135 +1,133 @@@
 - * This file is part of Libav.
+ /*
+  * Delphine Software International CIN audio decoder
+  * Copyright (c) 2006 Gregory Montoir (cyx@users.sourceforge.net)
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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
 -    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) {
 -        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ /**
+  * @file
+  * Delphine Software International CIN audio decoder
+  */
+ #include "libavutil/channel_layout.h"
+ #include "avcodec.h"
+ #include "bytestream.h"
+ #include "internal.h"
+ #include "mathops.h"
+ typedef struct CinAudioContext {
+     int initial_decode_frame;
+     int delta;
+ } CinAudioContext;
+ /* table defining a geometric sequence with multiplier = 32767 ^ (1 / 128) */
+ static const int16_t cinaudio_delta16_table[256] = {
+          0,      0,      0,      0,      0,      0,      0,      0,
+          0,      0,      0,      0,      0,      0,      0,      0,
+          0,      0,      0, -30210, -27853, -25680, -23677, -21829,
+     -20126, -18556, -17108, -15774, -14543, -13408, -12362, -11398,
+     -10508,  -9689,  -8933,  -8236,  -7593,  -7001,  -6455,  -5951,
+      -5487,  -5059,  -4664,  -4300,  -3964,  -3655,  -3370,  -3107,
+      -2865,  -2641,  -2435,  -2245,  -2070,  -1908,  -1759,  -1622,
+      -1495,  -1379,  -1271,  -1172,  -1080,   -996,   -918,   -847,
+       -781,   -720,   -663,   -612,   -564,   -520,   -479,   -442,
+       -407,   -376,   -346,   -319,   -294,   -271,   -250,   -230,
+       -212,   -196,   -181,   -166,   -153,   -141,   -130,   -120,
+       -111,   -102,    -94,    -87,    -80,    -74,    -68,    -62,
+        -58,    -53,    -49,    -45,    -41,    -38,    -35,    -32,
+        -30,    -27,    -25,    -23,    -21,    -20,    -18,    -17,
+        -15,    -14,    -13,    -12,    -11,    -10,     -9,     -8,
+         -7,     -6,     -5,     -4,     -3,     -2,     -1,      0,
+          0,      1,      2,      3,      4,      5,      6,      7,
+          8,      9,     10,     11,     12,     13,     14,     15,
+         17,     18,     20,     21,     23,     25,     27,     30,
+         32,     35,     38,     41,     45,     49,     53,     58,
+         62,     68,     74,     80,     87,     94,    102,    111,
+        120,    130,    141,    153,    166,    181,    196,    212,
+        230,    250,    271,    294,    319,    346,    376,    407,
+        442,    479,    520,    564,    612,    663,    720,    781,
+        847,    918,    996,   1080,   1172,   1271,   1379,   1495,
+       1622,   1759,   1908,   2070,   2245,   2435,   2641,   2865,
+       3107,   3370,   3655,   3964,   4300,   4664,   5059,   5487,
+       5951,   6455,   7001,   7593,   8236,   8933,   9689,  10508,
+      11398,  12362,  13408,  14543,  15774,  17108,  18556,  20126,
+      21829,  23677,  25680,  27853,  30210,      0,      0,      0,
+          0,      0,      0,      0,      0,      0,      0,      0,
+          0,      0,      0,      0,      0,      0,      0,      0
+ };
+ static av_cold int cinaudio_decode_init(AVCodecContext *avctx)
+ {
+     CinAudioContext *cin = avctx->priv_data;
+     cin->initial_decode_frame = 1;
+     cin->delta                = 0;
+     avctx->sample_fmt         = AV_SAMPLE_FMT_S16;
+     avctx->channels           = 1;
+     avctx->channel_layout     = AV_CH_LAYOUT_MONO;
+     return 0;
+ }
+ static int cinaudio_decode_frame(AVCodecContext *avctx, void *data,
+                                  int *got_frame_ptr, AVPacket *avpkt)
+ {
+     AVFrame *frame         = data;
+     const uint8_t *buf     = avpkt->data;
+     CinAudioContext *cin   = avctx->priv_data;
+     const uint8_t *buf_end = buf + avpkt->size;
+     int16_t *samples;
+     int delta, ret;
+     /* get output buffer */
+     frame->nb_samples = avpkt->size - cin->initial_decode_frame;
 -    }
++    if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
+         return ret;
+     samples = (int16_t *)frame->data[0];
+     delta = cin->delta;
+     if (cin->initial_decode_frame) {
+         cin->initial_decode_frame = 0;
+         delta                     = sign_extend(AV_RL16(buf), 16);
+         buf                      += 2;
+         *samples++                = delta;
+     }
+     while (buf < buf_end) {
+         delta     += cinaudio_delta16_table[*buf++];
+         delta      = av_clip_int16(delta);
+         *samples++ = delta;
+     }
+     cin->delta = delta;
+     *got_frame_ptr = 1;
+     return avpkt->size;
+ }
+ AVCodec ff_dsicinaudio_decoder = {
+     .name           = "dsicinaudio",
+     .long_name      = NULL_IF_CONFIG_SMALL("Delphine Software International CIN audio"),
+     .type           = AVMEDIA_TYPE_AUDIO,
+     .id             = AV_CODEC_ID_DSICINAUDIO,
+     .priv_data_size = sizeof(CinAudioContext),
+     .init           = cinaudio_decode_init,
+     .decode         = cinaudio_decode_frame,
+     .capabilities   = CODEC_CAP_DR1,
+ };
diff --combined libavcodec/dsicinvideo.c
index 0000000,b56a581..48fb635
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,301 +1,317 @@@
 - * This file is part of Libav.
+ /*
+  * Delphine Software International CIN video decoder
+  * Copyright (c) 2006 Gregory Montoir (cyx@users.sourceforge.net)
+  *
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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
 -    unsigned int i;
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ /**
+  * @file
+  * Delphine Software International CIN video decoder
+  */
+ #include "avcodec.h"
+ #include "bytestream.h"
+ #include "internal.h"
+ typedef enum CinVideoBitmapIndex {
+     CIN_CUR_BMP = 0, /* current */
+     CIN_PRE_BMP = 1, /* previous */
+     CIN_INT_BMP = 2  /* intermediate */
+ } CinVideoBitmapIndex;
+ typedef struct CinVideoContext {
+     AVCodecContext *avctx;
+     AVFrame *frame;
+     unsigned int bitmap_size;
+     uint32_t palette[256];
+     uint8_t *bitmap_table[3];
+ } CinVideoContext;
++static av_cold void destroy_buffers(CinVideoContext *cin)
++{
++    int i;
++
++    for (i = 0; i < 3; ++i)
++        av_freep(&cin->bitmap_table[i]);
++}
++
++static av_cold int allocate_buffers(CinVideoContext *cin)
++{
++    int i;
++
++    for (i = 0; i < 3; ++i) {
++        cin->bitmap_table[i] = av_mallocz(cin->bitmap_size);
++        if (!cin->bitmap_table[i]) {
++            av_log(cin->avctx, AV_LOG_ERROR, "Can't allocate bitmap buffers.\n");
++            destroy_buffers(cin);
++            return AVERROR(ENOMEM);
++        }
++    }
++
++    return 0;
++}
++
+ static av_cold int cinvideo_decode_init(AVCodecContext *avctx)
+ {
+     CinVideoContext *cin = avctx->priv_data;
 -    for (i = 0; i < 3; ++i) {
 -        cin->bitmap_table[i] = av_mallocz(cin->bitmap_size);
 -        if (!cin->bitmap_table[i])
 -            av_log(avctx, AV_LOG_ERROR, "Can't allocate bitmap buffers.\n");
 -    }
+     cin->avctx = avctx;
+     avctx->pix_fmt = AV_PIX_FMT_PAL8;
+     cin->frame = av_frame_alloc();
+     if (!cin->frame)
+         return AVERROR(ENOMEM);
+     cin->bitmap_size = avctx->width * avctx->height;
 -static void cin_decode_rle(const unsigned char *src, int src_size,
++    if (allocate_buffers(cin))
++        return AVERROR(ENOMEM);
+     return 0;
+ }
+ static void cin_apply_delta_data(const unsigned char *src, unsigned char *dst,
+                                  int size)
+ {
+     while (size--)
+         *dst++ += *src++;
+ }
+ static int cin_decode_huffman(const unsigned char *src, int src_size,
+                               unsigned char *dst, int dst_size)
+ {
+     int b, huff_code = 0;
+     unsigned char huff_code_table[15];
+     unsigned char *dst_cur       = dst;
+     unsigned char *dst_end       = dst + dst_size;
+     const unsigned char *src_end = src + src_size;
+     memcpy(huff_code_table, src, 15);
+     src += 15;
+     while (src < src_end) {
+         huff_code = *src++;
+         if ((huff_code >> 4) == 15) {
+             b          = huff_code << 4;
+             huff_code  = *src++;
+             *dst_cur++ = b | (huff_code >> 4);
+         } else
+             *dst_cur++ = huff_code_table[huff_code >> 4];
+         if (dst_cur >= dst_end)
+             break;
+         huff_code &= 15;
+         if (huff_code == 15) {
+             *dst_cur++ = *src++;
+         } else
+             *dst_cur++ = huff_code_table[huff_code];
+         if (dst_cur >= dst_end)
+             break;
+     }
+     return dst_cur - dst;
+ }
+ static int cin_decode_lzss(const unsigned char *src, int src_size,
+                            unsigned char *dst, int dst_size)
+ {
+     uint16_t cmd;
+     int i, sz, offset, code;
+     unsigned char *dst_end       = dst + dst_size, *dst_start = dst;
+     const unsigned char *src_end = src + src_size;
+     while (src < src_end && dst < dst_end) {
+         code = *src++;
+         for (i = 0; i < 8 && src < src_end && dst < dst_end; ++i) {
+             if (code & (1 << i)) {
+                 *dst++ = *src++;
+             } else {
+                 cmd    = AV_RL16(src);
+                 src   += 2;
+                 offset = cmd >> 4;
+                 if ((int)(dst - dst_start) < offset + 1)
+                     return AVERROR_INVALIDDATA;
+                 sz = (cmd & 0xF) + 2;
+                 /* don't use memcpy/memmove here as the decoding routine
+                  * (ab)uses buffer overlappings to repeat bytes in the
+                  * destination */
+                 sz = FFMIN(sz, dst_end - dst);
+                 while (sz--) {
+                     *dst = *(dst - offset - 1);
+                     ++dst;
+                 }
+             }
+         }
+     }
+     return 0;
+ }
 -    while (src < src_end && dst < dst_end) {
++static int cin_decode_rle(const unsigned char *src, int src_size,
+                            unsigned char *dst, int dst_size)
+ {
+     int len, code;
+     unsigned char *dst_end       = dst + dst_size;
+     const unsigned char *src_end = src + src_size;
 -            if (src >= src_end)
 -                break;
++    while (src + 1 < src_end && dst < dst_end) {
+         code = *src++;
+         if (code & 0x80) {
 -            cin->palette[i]    = bytestream_get_le24(&buf);
+             len = code - 0x7F;
+             memset(dst, *src++, FFMIN(len, dst_end - dst));
+         } else {
+             len = code + 1;
++            if (len > src_end-src) {
++                av_log(NULL, AV_LOG_ERROR, "RLE overread\n");
++                return AVERROR_INVALIDDATA;
++            }
+             memcpy(dst, src, FFMIN3(len, dst_end - dst, src_end - src));
+             src += len;
+         }
+         dst += len;
+     }
++    return 0;
+ }
+ static int cinvideo_decode_frame(AVCodecContext *avctx,
+                                  void *data, int *got_frame,
+                                  AVPacket *avpkt)
+ {
+     const uint8_t *buf   = avpkt->data;
+     int buf_size         = avpkt->size;
+     CinVideoContext *cin = avctx->priv_data;
+     int i, y, palette_type, palette_colors_count,
+         bitmap_frame_type, bitmap_frame_size, res = 0;
+     palette_type         = buf[0];
+     palette_colors_count = AV_RL16(buf + 1);
+     bitmap_frame_type    = buf[3];
+     buf                 += 4;
+     bitmap_frame_size = buf_size - 4;
+     /* handle palette */
+     if (bitmap_frame_size < palette_colors_count * (3 + (palette_type != 0)))
+         return AVERROR_INVALIDDATA;
+     if (palette_type == 0) {
+         if (palette_colors_count > 256)
+             return AVERROR_INVALIDDATA;
+         for (i = 0; i < palette_colors_count; ++i) {
 -            cin->palette[buf[0]] = AV_RL24(buf + 1);
++            cin->palette[i]    = 0xFFU << 24 | bytestream_get_le24(&buf);
+             bitmap_frame_size -= 3;
+         }
+     } else {
+         for (i = 0; i < palette_colors_count; ++i) {
 -    bitmap_frame_size = FFMIN(cin->bitmap_size, bitmap_frame_size);
 -
++            cin->palette[buf[0]] = 0xFFU << 24 | AV_RL24(buf + 1);
+             buf                 += 4;
+             bitmap_frame_size   -= 4;
+         }
+     }
 -        cin_decode_huffman(buf, bitmap_frame_size,
+     /* note: the decoding routines below assumes that
+      * surface.width = surface.pitch */
+     switch (bitmap_frame_type) {
+     case 9:
+         cin_decode_rle(buf, bitmap_frame_size,
+                        cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_size);
+         break;
+     case 34:
+         cin_decode_rle(buf, bitmap_frame_size,
+                        cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_size);
+         cin_apply_delta_data(cin->bitmap_table[CIN_PRE_BMP],
+                              cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_size);
+         break;
+     case 35:
 -    if ((res = ff_reget_buffer(avctx, cin->frame)) < 0) {
 -        av_log(cin->avctx, AV_LOG_ERROR,
 -               "delphinecinvideo: reget_buffer() failed to allocate a frame\n");
++        bitmap_frame_size = cin_decode_huffman(buf, bitmap_frame_size,
+                            cin->bitmap_table[CIN_INT_BMP], cin->bitmap_size);
+         cin_decode_rle(cin->bitmap_table[CIN_INT_BMP], bitmap_frame_size,
+                        cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_size);
+         break;
+     case 36:
+         bitmap_frame_size = cin_decode_huffman(buf, bitmap_frame_size,
+                                                cin->bitmap_table[CIN_INT_BMP],
+                                                cin->bitmap_size);
+         cin_decode_rle(cin->bitmap_table[CIN_INT_BMP], bitmap_frame_size,
+                        cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_size);
+         cin_apply_delta_data(cin->bitmap_table[CIN_PRE_BMP],
+                              cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_size);
+         break;
+     case 37:
+         cin_decode_huffman(buf, bitmap_frame_size,
+                            cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_size);
+         break;
+     case 38:
+         res = cin_decode_lzss(buf, bitmap_frame_size,
+                               cin->bitmap_table[CIN_CUR_BMP],
+                               cin->bitmap_size);
+         if (res < 0)
+             return res;
+         break;
+     case 39:
+         res = cin_decode_lzss(buf, bitmap_frame_size,
+                               cin->bitmap_table[CIN_CUR_BMP],
+                               cin->bitmap_size);
+         if (res < 0)
+             return res;
+         cin_apply_delta_data(cin->bitmap_table[CIN_PRE_BMP],
+                              cin->bitmap_table[CIN_CUR_BMP], cin->bitmap_size);
+         break;
+     }
 -    }
++    if ((res = ff_reget_buffer(avctx, cin->frame)) < 0)
+         return res;
 -    int i;
+     memcpy(cin->frame->data[1], cin->palette, sizeof(cin->palette));
+     cin->frame->palette_has_changed = 1;
+     for (y = 0; y < cin->avctx->height; ++y)
+         memcpy(cin->frame->data[0] + (cin->avctx->height - 1 - y) * cin->frame->linesize[0],
+                cin->bitmap_table[CIN_CUR_BMP] + y * cin->avctx->width,
+                cin->avctx->width);
+     FFSWAP(uint8_t *, cin->bitmap_table[CIN_CUR_BMP],
+                       cin->bitmap_table[CIN_PRE_BMP]);
+     if ((res = av_frame_ref(data, cin->frame)) < 0)
+         return res;
+     *got_frame = 1;
+     return buf_size;
+ }
+ static av_cold int cinvideo_decode_end(AVCodecContext *avctx)
+ {
+     CinVideoContext *cin = avctx->priv_data;
 -    for (i = 0; i < 3; ++i)
 -        av_free(cin->bitmap_table[i]);
+     av_frame_free(&cin->frame);
++    destroy_buffers(cin);
+     return 0;
+ }
+ AVCodec ff_dsicinvideo_decoder = {
+     .name           = "dsicinvideo",
+     .long_name      = NULL_IF_CONFIG_SMALL("Delphine Software International CIN video"),
+     .type           = AVMEDIA_TYPE_VIDEO,
+     .id             = AV_CODEC_ID_DSICINVIDEO,
+     .priv_data_size = sizeof(CinVideoContext),
+     .init           = cinvideo_decode_init,
+     .close          = cinvideo_decode_end,
+     .decode         = cinvideo_decode_frame,
+     .capabilities   = CODEC_CAP_DR1,
+ };