Merge commit 'a062a55d37720abc8c704aa0e8682efd3cdc9c9b'
authorMichael Niedermayer <michael@niedermayer.cc>
Mon, 13 Jul 2015 15:04:13 +0000 (17:04 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Mon, 13 Jul 2015 15:04:13 +0000 (17:04 +0200)
* commit 'a062a55d37720abc8c704aa0e8682efd3cdc9c9b':
  hevc_parser: fix standalone build with the hevc decoder disabled

Conflicts:
libavcodec/Makefile
libavcodec/hevc.c

Merged-by: Michael Niedermayer <michael@niedermayer.cc>
1  2 
libavcodec/Makefile
libavcodec/hevc_cabac.c
libavcodec/hevc_data.c

diff --combined libavcodec/Makefile
@@@ -1,5 -1,3 +1,5 @@@
 +include $(SUBDIR)../config.mak
 +
  NAME = avcodec
  
  HEADERS = avcodec.h                                                     \
@@@ -7,7 -5,6 +7,7 @@@
            dv_profile.h                                                  \
            d3d11va.h                                                     \
            dxva2.h                                                       \
 +          old_codec_ids.h                                               \
            qsv.h                                                         \
            vaapi.h                                                       \
            vda.h                                                         \
@@@ -17,8 -14,6 +17,8 @@@
            xvmc.h                                                        \
  
  OBJS = allcodecs.o                                                      \
 +       audioconvert.o                                                   \
 +       avdct.o                                                          \
         avpacket.o                                                       \
         avpicture.o                                                      \
         bitstream.o                                                      \
         codec_desc.o                                                     \
         dv_profile.o                                                     \
         imgconvert.o                                                     \
 -       log2_tab.o                                                       \
         mathtables.o                                                     \
         options.o                                                        \
         parser.o                                                         \
         qsv_api.o                                                        \
         raw.o                                                            \
 +       resample.o                                                       \
 +       resample2.o                                                      \
         utils.o                                                          \
         vorbis_parser.o                                                  \
         xiph.o                                                           \
@@@ -45,16 -39,13 +45,16 @@@ 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_ERROR_RESILIENCE)        += error_resilience.o
 +OBJS-$(CONFIG_EXIF)                    += exif.o tiff_common.o
  OBJS-$(CONFIG_FAANDCT)                 += faandct.o
  OBJS-$(CONFIG_FAANIDCT)                += faanidct.o
  OBJS-$(CONFIG_FDCTDSP)                 += fdctdsp.o jfdctfst.o jfdctint.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_FMTCONVERT)              += fmtconvert.o
  OBJS-$(CONFIG_GOLOMB)                  += golomb.o
@@@ -73,11 -64,9 +73,11 @@@ OBJS-$(CONFIG_IMDCT15)                 
  OBJS-$(CONFIG_INTRAX8)                 += intrax8.o intrax8dsp.o
  OBJS-$(CONFIG_JPEGTABLES)              += jpegtables.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_ME_CMP)                  += me_cmp.o
  OBJS-$(CONFIG_MPEG_ER)                 += mpeg_er.o
  OBJS-$(CONFIG_MPEGAUDIO)               += mpegaudio.o mpegaudiodata.o   \
@@@ -92,8 -81,8 +92,8 @@@ OBJS-$(CONFIG_MPEGVIDEO)               
  OBJS-$(CONFIG_MPEGVIDEOENC)            += mpegvideo_enc.o mpeg12data.o  \
                                            motion_est.o ratecontrol.o    \
                                            mpegvideoencdsp.o
 +OBJS-$(CONFIG_NVENC)                   += nvenc.o
  OBJS-$(CONFIG_PIXBLOCKDSP)             += pixblockdsp.o
 -OBJS-${CONFIG_NVENC}                   += nvenc.o
  OBJS-$(CONFIG_QPELDSP)                 += qpeldsp.o
  OBJS-$(CONFIG_QSV)                     += qsv.o
  OBJS-$(CONFIG_QSVDEC)                  += qsvdec.o
@@@ -101,8 -90,7 +101,8 @@@ OBJS-$(CONFIG_QSVENC)                  
  OBJS-$(CONFIG_RANGECODER)              += rangecoder.o
  RDFT-OBJS-$(CONFIG_HARDCODED_TABLES)   += sin_tables.o
  OBJS-$(CONFIG_RDFT)                    += rdft.o $(RDFT-OBJS-yes)
 -OBJS-$(CONFIG_SINEWIN)                 += sinewin.o
 +OBJS-$(CONFIG_SHARED)                  += log2_tab.o
 +OBJS-$(CONFIG_SINEWIN)                 += sinewin.o sinewin_fixed.o
  OBJS-$(CONFIG_SNAPPY)                  += snappy.o
  OBJS-$(CONFIG_STARTCODE)               += startcode.o
  OBJS-$(CONFIG_TEXTUREDSP)              += texturedsp.o
@@@ -113,20 -101,16 +113,20 @@@ OBJS-$(CONFIG_VP3DSP)                  
  OBJS-$(CONFIG_WMA_FREQS)               += wma_freqs.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 \
                                            aacadtsdec.o mpeg4audio.o kbdwin.o \
                                            sbrdsp.o aacpsdsp.o
 +OBJS-$(CONFIG_AAC_FIXED_DECODER)       += aacdec_fixed.o aactab.o \
 +                                          aacadtsdec.o mpeg4audio.o kbdwin.o
  OBJS-$(CONFIG_AAC_ENCODER)             += aacenc.o aaccoder.o    \
                                            aacpsy.o aactab.o      \
                                            psymodel.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
@@@ -144,18 -128,10 +144,18 @@@ OBJS-$(CONFIG_AMRWB_DECODER)           
                                            celp_math.o acelp_filters.o \
                                            acelp_vectors.o             \
                                            acelp_pitch_delay.o
 +OBJS-$(CONFIG_AMV_ENCODER)             += mjpegenc.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_APNG_DECODER)            += png.o pngdec.o pngdsp.o
 +OBJS-$(CONFIG_APNG_ENCODER)            += png.o pngenc.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
@@@ -167,20 -143,12 +167,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
 +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
  OBJS-$(CONFIG_BINKAUDIO_RDFT_DECODER)  += binkaudio.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
@@@ -189,36 -157,26 +189,36 @@@ OBJS-$(CONFIG_BRENDER_PIX_DECODER)     
  OBJS-$(CONFIG_C93_DECODER)             += c93.o
  OBJS-$(CONFIG_CAVS_DECODER)            += cavs.o cavsdec.o cavsdsp.o \
                                            cavsdata.o mpeg12data.o
 +OBJS-$(CONFIG_CCAPTION_DECODER)        += ccaption_dec.o
  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 canopus.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      \
                                            dcadata.o dca_exss.o         \
                                            dca_xll.o synth_filter.o
 +OBJS-$(CONFIG_DCA_ENCODER)             += dcaenc.o dca.o dcadata.o
  OBJS-$(CONFIG_DDS_DECODER)             += dds.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_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_DSS_SP_DECODER)          += dss_sp.o
@@@ -230,7 -188,7 +230,7 @@@ OBJS-$(CONFIG_DVVIDEO_DECODER)         
  OBJS-$(CONFIG_DVVIDEO_ENCODER)         += dvenc.o dv.o dvdata.o
  OBJS-$(CONFIG_DXA_DECODER)             += dxa.o
  OBJS-$(CONFIG_DXTORY_DECODER)          += dxtory.o
 -OBJS-$(CONFIG_EAC3_DECODER)            += eac3dec.o eac3_data.o
 +OBJS-$(CONFIG_EAC3_DECODER)            += eac3_data.o
  OBJS-$(CONFIG_EAC3_ENCODER)            += eac3enc.o eac3_data.o
  OBJS-$(CONFIG_EACMV_DECODER)           += eacmv.o
  OBJS-$(CONFIG_EAMAD_DECODER)           += eamad.o eaidct.o mpeg12.o \
@@@ -243,17 -201,14 +243,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
@@@ -261,9 -216,7 +261,9 @@@ OBJS-$(CONFIG_FRAPS_DECODER)           
  OBJS-$(CONFIG_FRWU_DECODER)            += frwu.o
  OBJS-$(CONFIG_G2M_DECODER)             += g2meet.o elsdec.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
@@@ -280,14 -233,15 +280,14 @@@ OBJS-$(CONFIG_H264_DECODER)            
                                            h264_mb.o h264_picture.o h264_ps.o \
                                            h264_refs.o h264_sei.o h264_slice.o
  OBJS-$(CONFIG_H264_MMAL_DECODER)       += mmaldec.o
 -OBJS-$(CONFIG_H264_NVENC_ENCODER)      += nvenc_h264.o
 +OBJS-$(CONFIG_H264_VDA_DECODER)        += vda_h264_dec.o
  OBJS-$(CONFIG_H264_QSV_DECODER)        += qsvdec_h264.o
  OBJS-$(CONFIG_H264_QSV_ENCODER)        += qsvenc_h264.o
  OBJS-$(CONFIG_HAP_DECODER)             += hapdec.o
  OBJS-$(CONFIG_HAP_ENCODER)             += hapenc.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 hevc_parse.o
+                                           hevcdsp.o hevc_filter.o hevc_parse.o hevc_data.o
 -OBJS-$(CONFIG_HEVC_NVENC_ENCODER)      += nvenc_hevc.o
  OBJS-$(CONFIG_HEVC_QSV_ENCODER)        += qsvenc_hevc.o hevc_ps_enc.o hevc_parse.o
  OBJS-$(CONFIG_HNM4_VIDEO_DECODER)      += hnm4video.o
  OBJS-$(CONFIG_HQ_HQA_DECODER)          += hq_hqa.o hq_hqadata.o hq_hqadsp.o \
@@@ -296,7 -250,6 +296,7 @@@ OBJS-$(CONFIG_HQX_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
@@@ -306,9 -259,6 +306,9 @@@ OBJS-$(CONFIG_INDEO4_DECODER)          
  OBJS-$(CONFIG_INDEO5_DECODER)          += indeo5.o ivi.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 jpeg2000dsp.o \
                                            jpeg2000dwt.o mqcdec.o mqc.o
  OBJS-$(CONFIG_JPEGLS_DECODER)          += jpeglsdec.o jpegls.o
@@@ -324,7 -274,6 +324,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
  OBJS-$(CONFIG_MJPEG_ENCODER)           += mjpegenc.o mjpegenc_common.o
@@@ -332,14 -281,10 +332,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
@@@ -350,14 -295,13 +350,14 @@@ 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)       += mpeg12dec.o mpeg12.o mpeg12data.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_MPEG2_QSV_ENCODER)       += qsvenc_mpeg2.o
  OBJS-$(CONFIG_MPEG4_DECODER)           += xvididct.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
@@@ -368,7 -312,6 +368,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
@@@ -394,16 -337,12 +394,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 \
@@@ -414,16 -353,13 +414,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
@@@ -436,9 -372,7 +436,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
@@@ -451,46 -385,29 +451,46 @@@ 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_STL_DECODER)             += textdec.o ass.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_TDSC_DECODER)            += tdsc.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
  OBJS-$(CONFIG_ULTI_DECODER)            += ulti.o
@@@ -498,10 -415,6 +498,10 @@@ 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
@@@ -510,8 -423,7 +510,8 @@@ OBJS-$(CONFIG_VBLE_DECODER)            
  OBJS-$(CONFIG_VC1_DECODER)             += vc1dec.o vc1_block.o vc1_loopfilter.o \
                                            vc1_mc.o vc1_pred.o vc1.o vc1data.o \
                                            vc1dsp.o \
 -                                          msmpeg4dec.o msmpeg4.o msmpeg4data.o
 +                                          msmpeg4dec.o msmpeg4.o msmpeg4data.o \
 +                                          wmv2dsp.o
  OBJS-$(CONFIG_VCR1_DECODER)            += vcr1.o
  OBJS-$(CONFIG_VMDAUDIO_DECODER)        += vmdaudio.o
  OBJS-$(CONFIG_VMDVIDEO_DECODER)        += vmdvideo.o
@@@ -527,16 -439,11 +527,16 @@@ 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 vp9dsp_8bpp.o \
 +                                          vp9dsp_10bpp.o vp9dsp_12bpp.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 ass.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
@@@ -547,7 -454,6 +547,7 @@@ OBJS-$(CONFIG_WMAVOICE_DECODER)        
                                            celp_filters.o \
                                            acelp_vectors.o acelp_filters.o
  OBJS-$(CONFIG_WMV1_DECODER)            += msmpeg4dec.o msmpeg4.o msmpeg4data.o
 +OBJS-$(CONFIG_WMV1_ENCODER)            += msmpeg4enc.o
  OBJS-$(CONFIG_WMV2_DECODER)            += wmv2dec.o wmv2.o wmv2dsp.o \
                                            msmpeg4dec.o msmpeg4.o msmpeg4data.o
  OBJS-$(CONFIG_WMV2_ENCODER)            += wmv2enc.o wmv2.o wmv2dsp.o \
@@@ -557,21 -463,14 +557,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
@@@ -596,16 -495,13 +596,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
@@@ -613,13 -509,11 +613,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
@@@ -639,9 -533,7 +639,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
@@@ -652,7 -544,6 +652,7 @@@ OBJS-$(CONFIG_ADPCM_G722_DECODER
  OBJS-$(CONFIG_ADPCM_G722_ENCODER)         += g722.o g722dsp.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
@@@ -660,10 -551,8 +660,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
@@@ -680,7 -569,6 +680,7 @@@ 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_D3D11VA)                    += dxva2.o
@@@ -698,14 -586,11 +698,14 @@@ OBJS-$(CONFIG_H264_VDA_HWACCEL
  OBJS-$(CONFIG_H264_VDPAU_HWACCEL)         += vdpau_h264.o
  OBJS-$(CONFIG_HEVC_D3D11VA_HWACCEL)       += dxva2_hevc.o
  OBJS-$(CONFIG_HEVC_DXVA2_HWACCEL)         += dxva2_hevc.o
 +OBJS-$(CONFIG_HEVC_VDPAU_HWACCEL)         += vdpau_hevc.o
  OBJS-$(CONFIG_MPEG1_VDPAU_HWACCEL)        += vdpau_mpeg12.o
 +OBJS-$(CONFIG_MPEG1_XVMC_HWACCEL)         += mpegvideo_xvmc.o
  OBJS-$(CONFIG_MPEG2_D3D11VA_HWACCEL)      += dxva2_mpeg2.o
  OBJS-$(CONFIG_MPEG2_DXVA2_HWACCEL)        += dxva2_mpeg2.o
  OBJS-$(CONFIG_MPEG2_VAAPI_HWACCEL)        += vaapi_mpeg2.o
  OBJS-$(CONFIG_MPEG2_VDPAU_HWACCEL)        += vdpau_mpeg12.o
 +OBJS-$(CONFIG_MPEG2_XVMC_HWACCEL)         += mpegvideo_xvmc.o
  OBJS-$(CONFIG_MPEG4_VAAPI_HWACCEL)        += vaapi_mpeg4.o
  OBJS-$(CONFIG_MPEG4_VDPAU_HWACCEL)        += vdpau_mpeg4.o
  OBJS-$(CONFIG_VC1_D3D11VA_HWACCEL)        += dxva2_vc1.o
@@@ -717,47 -602,36 +717,47 @@@ OBJS-$(CONFIG_VC1_VDPAU_HWACCEL
  OBJS-$(CONFIG_ADTS_MUXER)              += mpeg4audio.o
  OBJS-$(CONFIG_CAF_DEMUXER)             += mpeg4audio.o mpegaudiodata.o  \
                                            ac3tab.o
 -OBJS-$(CONFIG_FLAC_MUXER)              += flac.o flacdata.o
 +OBJS-$(CONFIG_FLAC_DEMUXER)            += flac.o flacdata.o vorbis_data.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)    += mpeg4audio.o                  \
 +OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER)    += mpeg4audio.o vorbis_data.o    \
                                            flac.o flacdata.o
  OBJS-$(CONFIG_MATROSKA_DEMUXER)        += mpeg4audio.o mpegaudiodata.o
  OBJS-$(CONFIG_MATROSKA_MUXER)          += mpeg4audio.o mpegaudiodata.o  \
 -                                          flac.o flacdata.o
 +                                          flac.o flacdata.o vorbis_data.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_NUT_DEMUXER)             += mpegaudiodata.o mpeg4audio.o
 +OBJS-$(CONFIG_OGA_MUXER)               += flac.o flacdata.o
  OBJS-$(CONFIG_OGG_DEMUXER)             += mpeg12data.o \
 -                                          dirac.o
 -OBJS-$(CONFIG_OGG_MUXER)               += flac.o flacdata.o
 +                                          dirac.o vorbis_data.o
 +OBJS-$(CONFIG_OGG_MUXER)               += flac.o flacdata.o \
 +                                          vorbis_data.o
  OBJS-$(CONFIG_RTP_MUXER)               += mpeg4audio.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  \
 -                                          flac.o flacdata.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_LIBDCADEC_DECODER)          += libdcadec.o dca.o
  OBJS-$(CONFIG_LIBFAAC_ENCODER)            += libfaac.o
  OBJS-$(CONFIG_LIBFDK_AAC_DECODER)         += libfdk-aacdec.o
@@@ -783,31 -657,24 +783,31 @@@ 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 \
 +OBJS-$(CONFIG_LIBVORBIS_DECODER)          += libvorbisdec.o
 +OBJS-$(CONFIG_LIBVORBIS_ENCODER)          += libvorbisenc.o \
                                               vorbis_data.o
 -OBJS-$(CONFIG_LIBVPX_VP8_DECODER)         += libvpxdec.o libvpx.o
 -OBJS-$(CONFIG_LIBVPX_VP8_ENCODER)         += libvpxenc.o libvpx.o
 +OBJS-$(CONFIG_LIBVPX_VP8_DECODER)         += libvpxdec.o
 +OBJS-$(CONFIG_LIBVPX_VP8_ENCODER)         += libvpxenc.o
  OBJS-$(CONFIG_LIBVPX_VP9_DECODER)         += libvpxdec.o libvpx.o
  OBJS-$(CONFIG_LIBVPX_VP9_ENCODER)         += libvpxenc.o libvpx.o
  OBJS-$(CONFIG_LIBWAVPACK_ENCODER)         += libwavpackenc.o
 -OBJS-$(CONFIG_LIBWEBP_ENCODER)            += libwebpenc.o
 +OBJS-$(CONFIG_LIBWEBP_ENCODER)            += libwebpenc_common.o libwebpenc.o
 +OBJS-$(CONFIG_LIBWEBP_ANIM_ENCODER)       += libwebpenc_common.o libwebpenc_animencoder.o
  OBJS-$(CONFIG_LIBX264_ENCODER)            += libx264.o
  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 \
@@@ -824,21 -691,18 +824,21 @@@ OBJS-$(CONFIG_DIRAC_PARSER)            
  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
  OBJS-$(CONFIG_H264_PARSER)             += h264_parser.o
- OBJS-$(CONFIG_HEVC_PARSER)             += hevc_parser.o hevc_parse.o
+ OBJS-$(CONFIG_HEVC_PARSER)             += hevc_parser.o hevc_parse.o hevc_ps.o hevc_data.o
  OBJS-$(CONFIG_MJPEG_PARSER)            += mjpeg_parser.o
  OBJS-$(CONFIG_MLP_PARSER)              += mlp_parser.o mlp.o
  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    \
@@@ -852,7 -716,6 +852,7 @@@ OBJS-$(CONFIG_TAK_PARSER)              
  OBJS-$(CONFIG_VC1_PARSER)              += vc1_parser.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 \
@@@ -863,10 -726,7 +863,10 @@@ OBJS-$(CONFIG_H264_MP4TOANNEXB_BSF
  OBJS-$(CONFIG_IMX_DUMP_HEADER_BSF)        += imx_dump_header_bsf.o
  OBJS-$(CONFIG_MJPEG2JPEG_BSF)             += mjpeg2jpeg_bsf.o
  OBJS-$(CONFIG_MJPEGA_DUMP_HEADER_BSF)     += mjpega_dump_header_bsf.o
 +OBJS-$(CONFIG_MPEG4_UNPACK_BFRAMES_BSF)   += mpeg4_unpack_bframes_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                  \
 +                                          tableprint_vlc.h              \
                                            $(ARCH)/vp56_arith.h          \
  
  SKIPHEADERS-$(CONFIG_D3D11VA)          += d3d11va.h dxva2_internal.h
  SKIPHEADERS-$(CONFIG_DXVA2)            += dxva2.h dxva2_internal.h
  SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER)  += libschroedinger.h
 -SKIPHEADERS-$(CONFIG_MPEG_XVMC_DECODER) += xvmc.h
 -SKIPHEADERS-$(CONFIG_NVENC)            += nvenc.h
 +SKIPHEADERS-$(CONFIG_LIBUTVIDEO)       += libutvideo.h
  SKIPHEADERS-$(CONFIG_QSV)              += qsv.h qsv_internal.h
  SKIPHEADERS-$(CONFIG_QSVDEC)           += qsvdec.h
  SKIPHEADERS-$(CONFIG_QSVENC)           += qsvenc.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-$(CONFIG_FFT)                   += fft fft-fixed
 +TESTPROGS = imgconvert                                                  \
 +            jpeg2000dwt                                                 \
 +            mathops                                                    \
 +            options                                                     \
 +            avfft                                                       \
 +
 +TESTPROGS-$(CONFIG_CABAC)                 += cabac
 +TESTPROGS-$(CONFIG_FFT)                   += fft fft-fixed fft-fixed32
  TESTPROGS-$(CONFIG_IDCTDSP)               += dct
  TESTPROGS-$(CONFIG_IIRFILTER)             += iirfilter
 +TESTPROGS-$(HAVE_MMX)                     += motion
  TESTPROGS-$(CONFIG_GOLOMB)                += golomb
  TESTPROGS-$(CONFIG_RANGECODER)            += rangecoder
 +TESTPROGS-$(CONFIG_SNOW_ENCODER)          += snowenc
  
  TESTOBJS = dctref.o
  
 +TOOLS = fourcc2pixfmt
 +
  HOSTPROGS = aac_tablegen                                                \
              aacps_tablegen                                              \
 +            aacsbr_tablegen                                             \
 +            cabac_tablegen                                              \
              cbrt_tablegen                                               \
 +            cbrt_fixed_tablegen                                         \
              cos_tablegen                                                \
 +            dsd_tablegen                                                \
              dv_tablegen                                                 \
              motionpixels_tablegen                                       \
              mpegaudio_tablegen                                          \
              pcm_tablegen                                                \
              qdm2_tablegen                                               \
              sinewin_tablegen                                            \
 +            sinewin_fixed_tablegen                                      \
  
  CLEANFILES = *_tables.c *_tables.h *_tablegen$(HOSTEXESUF)
  
@@@ -954,8 -790,8 +954,8 @@@ els
  $(SUBDIR)%_tablegen$(HOSTEXESUF): HOSTCFLAGS += -DCONFIG_SMALL=0
  endif
  
 -GEN_HEADERS = cbrt_tables.h aacps_tables.h aac_tables.h dv_tables.h     \
 -              sinewin_tables.h mpegaudio_tables.h motionpixels_tables.h \
 +GEN_HEADERS = cabac_tables.h cbrt_tables.h cbrt_fixed_tables.h aacps_tables.h aacsbr_tables.h aac_tables.h dsd_tables.h dv_tables.h     \
 +              sinewin_tables.h sinewin_fixed_tables.h mpegaudio_tables.h motionpixels_tables.h \
                pcm_tables.h qdm2_tables.h
  GEN_HEADERS := $(addprefix $(SUBDIR), $(GEN_HEADERS))
  
@@@ -964,16 -800,10 +964,16 @@@ $(GEN_HEADERS): $(SUBDIR)%_tables.h: $(
  
  ifdef CONFIG_HARDCODED_TABLES
  $(SUBDIR)aacdec.o: $(SUBDIR)cbrt_tables.h
 +$(SUBDIR)aacdec_fixed.o: $(SUBDIR)cbrt_fixed_tables.h
  $(SUBDIR)aacps.o: $(SUBDIR)aacps_tables.h
 +$(SUBDIR)aacsbr.o: $(SUBDIR)aacsbr_tables.h
  $(SUBDIR)aactab.o: $(SUBDIR)aac_tables.h
 +$(SUBDIR)aactab_fixed.o: $(SUBDIR)aac_fixed_tables.h
 +$(SUBDIR)cabac.o: $(SUBDIR)cabac_tables.h
 +$(SUBDIR)dsddec.o: $(SUBDIR)dsd_tables.h
  $(SUBDIR)dvenc.o: $(SUBDIR)dv_tables.h
  $(SUBDIR)sinewin.o: $(SUBDIR)sinewin_tables.h
 +$(SUBDIR)sinewin_fixed.o: $(SUBDIR)sinewin_fixed_tables.h
  $(SUBDIR)mpegaudiodec_fixed.o: $(SUBDIR)mpegaudio_tables.h
  $(SUBDIR)mpegaudiodec_float.o: $(SUBDIR)mpegaudio_tables.h
  $(SUBDIR)motionpixels.o: $(SUBDIR)motionpixels_tables.h
diff --combined libavcodec/hevc_cabac.c
@@@ -4,20 -4,20 +4,20 @@@
   * Copyright (C) 2012 - 2013 Guillaume Martres
   * Copyright (C) 2012 - 2013 Gildas Cocherel
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -66,77 -66,65 +66,77 @@@ av_unused static const int8_t num_bins_
       2, // cbf_luma
       4, // cbf_cb, cbf_cr
       2, // transform_skip_flag[][]
 +     2, // explicit_rdpcm_flag[][]
 +     2, // explicit_rdpcm_dir_flag[][]
      18, // last_significant_coeff_x_prefix
      18, // last_significant_coeff_y_prefix
       0, // last_significant_coeff_x_suffix
       0, // last_significant_coeff_y_suffix
       4, // significant_coeff_group_flag
 -    42, // significant_coeff_flag
 +    44, // significant_coeff_flag
      24, // coeff_abs_level_greater1_flag
       6, // coeff_abs_level_greater2_flag
       0, // coeff_abs_level_remaining
       0, // coeff_sign_flag
 +     8, // log2_res_scale_abs
 +     2, // res_scale_sign_flag
 +     1, // cu_chroma_qp_offset_flag
 +     1, // cu_chroma_qp_offset_idx
  };
  
  /**
   * Offset to ctxIdx 0 in init_values and states, indexed by SyntaxElement.
   */
  static const int elem_offset[sizeof(num_bins_in_se)] = {
 -      0,
 -      1,
 -      2,
 -      2,
 -      2,
 -      2,
 -      2,
 -      2,
 -      5,
 -      6,
 -      9,
 -     12,
 -     13,
 -     17,
 -     17,
 -     18,
 -     18,
 -     18,
 -     20,
 -     21,
 -     22,
 -     27,
 -     29,
 -     31,
 -     33,
 -     35,
 -     35,
 -     35,
 -     36,
 -     37,
 -     40,
 -     42,
 -     46,
 -     48,
 -     66,
 -     84,
 -     84,
 -     84,
 -     88,
 -    130,
 -    154,
 -    160,
 -    160,
 +    0, // sao_merge_flag
 +    1, // sao_type_idx
 +    2, // sao_eo_class
 +    2, // sao_band_position
 +    2, // sao_offset_abs
 +    2, // sao_offset_sign
 +    2, // end_of_slice_flag
 +    2, // split_coding_unit_flag
 +    5, // cu_transquant_bypass_flag
 +    6, // skip_flag
 +    9, // cu_qp_delta
 +    12, // pred_mode
 +    13, // part_mode
 +    17, // pcm_flag
 +    17, // prev_intra_luma_pred_mode
 +    18, // mpm_idx
 +    18, // rem_intra_luma_pred_mode
 +    18, // intra_chroma_pred_mode
 +    20, // merge_flag
 +    21, // merge_idx
 +    22, // inter_pred_idc
 +    27, // ref_idx_l0
 +    29, // ref_idx_l1
 +    31, // abs_mvd_greater0_flag
 +    33, // abs_mvd_greater1_flag
 +    35, // abs_mvd_minus2
 +    35, // mvd_sign_flag
 +    35, // mvp_lx_flag
 +    36, // no_residual_data_flag
 +    37, // split_transform_flag
 +    40, // cbf_luma
 +    42, // cbf_cb, cbf_cr
 +    46, // transform_skip_flag[][]
 +    48, // explicit_rdpcm_flag[][]
 +    50, // explicit_rdpcm_dir_flag[][]
 +    52, // last_significant_coeff_x_prefix
 +    70, // last_significant_coeff_y_prefix
 +    88, // last_significant_coeff_x_suffix
 +    88, // last_significant_coeff_y_suffix
 +    88, // significant_coeff_group_flag
 +    92, // significant_coeff_flag
 +    136, // coeff_abs_level_greater1_flag
 +    160, // coeff_abs_level_greater2_flag
 +    166, // coeff_abs_level_remaining
 +    166, // coeff_sign_flag
 +    166, // log2_res_scale_abs
 +    174, // res_scale_sign_flag
 +    176, // cu_chroma_qp_offset_flag
 +    177, // cu_chroma_qp_offset_idx
  };
  
  #define CNU 154
@@@ -190,10 -178,6 +190,10 @@@ static const uint8_t init_values[3][HEV
        94, 138, 182, 154,
        // transform_skip_flag
        139, 139,
 +      // explicit_rdpcm_flag
 +      139, 139,
 +      // explicit_rdpcm_dir_flag
 +      139, 139,
        // last_significant_coeff_x_prefix
        110, 110, 124, 125, 140, 153, 125, 127, 140, 109, 111, 143, 127, 111,
         79, 108, 123,  63,
        111, 111, 125, 110, 110,  94, 124, 108, 124, 107, 125, 141, 179, 153,
        125, 107, 125, 141, 179, 153, 125, 107, 125, 141, 179, 153, 125, 140,
        139, 182, 182, 152, 136, 152, 136, 153, 136, 139, 111, 136, 139, 111,
 +      141, 111,
        // coeff_abs_level_greater1_flag
        140,  92, 137, 138, 140, 152, 138, 139, 153,  74, 149,  92, 139, 107,
        122, 152, 140, 179, 166, 182, 140, 227, 122, 197,
        // coeff_abs_level_greater2_flag
 -      138, 153, 136, 167, 152, 152, },
 +      138, 153, 136, 167, 152, 152,
 +      // log2_res_scale_abs
 +      154, 154, 154, 154, 154, 154, 154, 154,
 +      // res_scale_sign_flag
 +      154, 154,
 +      // cu_chroma_qp_offset_flag
 +      154,
 +      // cu_chroma_qp_offset_idx
 +      154,
 +    },
      { // sao_merge_flag
        153,
        // sao_type_idx
        149, 107, 167, 154,
        // transform_skip_flag
        139, 139,
 +      // explicit_rdpcm_flag
 +      139, 139,
 +      // explicit_rdpcm_dir_flag
 +      139, 139,
        // last_significant_coeff_x_prefix
        125, 110,  94, 110,  95,  79, 125, 111, 110,  78, 110, 111, 111,  95,
         94, 108, 123, 108,
        155, 154, 139, 153, 139, 123, 123,  63, 153, 166, 183, 140, 136, 153,
        154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
        153, 123, 123, 107, 121, 107, 121, 167, 151, 183, 140, 151, 183, 140,
 +      140, 140,
        // coeff_abs_level_greater1_flag
        154, 196, 196, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
        136, 137, 169, 194, 166, 167, 154, 167, 137, 182,
        // coeff_abs_level_greater2_flag
 -      107, 167, 91, 122, 107, 167, },
 +      107, 167, 91, 122, 107, 167,
 +      // log2_res_scale_abs
 +      154, 154, 154, 154, 154, 154, 154, 154,
 +      // res_scale_sign_flag
 +      154, 154,
 +      // cu_chroma_qp_offset_flag
 +      154,
 +      // cu_chroma_qp_offset_idx
 +      154,
 +    },
      { // sao_merge_flag
        153,
        // sao_type_idx
        149, 92, 167, 154,
        // transform_skip_flag
        139, 139,
 +      // explicit_rdpcm_flag
 +      139, 139,
 +      // explicit_rdpcm_dir_flag
 +      139, 139,
        // last_significant_coeff_x_prefix
        125, 110, 124, 110,  95,  94, 125, 111, 111,  79, 125, 126, 111, 111,
         79, 108, 123,  93,
        170, 154, 139, 153, 139, 123, 123,  63, 124, 166, 183, 140, 136, 153,
        154, 166, 183, 140, 136, 153, 154, 166, 183, 140, 136, 153, 154, 170,
        153, 138, 138, 122, 121, 122, 121, 167, 151, 183, 140, 151, 183, 140,
 +      140, 140,
        // coeff_abs_level_greater1_flag
        154, 196, 167, 167, 154, 152, 167, 182, 182, 134, 149, 136, 153, 121,
        136, 122, 169, 208, 166, 167, 154, 152, 167, 182,
        // coeff_abs_level_greater2_flag
 -      107, 167, 91, 107, 107, 167, },
 +      107, 167, 91, 107, 107, 167,
 +      // log2_res_scale_abs
 +      154, 154, 154, 154, 154, 154, 154, 154,
 +      // res_scale_sign_flag
 +      154, 154,
 +      // cu_chroma_qp_offset_flag
 +      154,
 +      // cu_chroma_qp_offset_idx
 +      154,
 +    },
 +};
 +
 +static const uint8_t scan_1x1[1] = {
 +    0,
 +};
 +
 +static const uint8_t horiz_scan2x2_x[4] = {
 +    0, 1, 0, 1,
 +};
 +
 +static const uint8_t horiz_scan2x2_y[4] = {
 +    0, 0, 1, 1
 +};
 +
 +static const uint8_t horiz_scan4x4_x[16] = {
 +    0, 1, 2, 3,
 +    0, 1, 2, 3,
 +    0, 1, 2, 3,
 +    0, 1, 2, 3,
 +};
 +
 +static const uint8_t horiz_scan4x4_y[16] = {
 +    0, 0, 0, 0,
 +    1, 1, 1, 1,
 +    2, 2, 2, 2,
 +    3, 3, 3, 3,
 +};
 +
 +static const uint8_t horiz_scan8x8_inv[8][8] = {
 +    {  0,  1,  2,  3, 16, 17, 18, 19, },
 +    {  4,  5,  6,  7, 20, 21, 22, 23, },
 +    {  8,  9, 10, 11, 24, 25, 26, 27, },
 +    { 12, 13, 14, 15, 28, 29, 30, 31, },
 +    { 32, 33, 34, 35, 48, 49, 50, 51, },
 +    { 36, 37, 38, 39, 52, 53, 54, 55, },
 +    { 40, 41, 42, 43, 56, 57, 58, 59, },
 +    { 44, 45, 46, 47, 60, 61, 62, 63, },
 +};
 +
 +static const uint8_t diag_scan2x2_x[4] = {
 +    0, 0, 1, 1,
 +};
 +
 +static const uint8_t diag_scan2x2_y[4] = {
 +    0, 1, 0, 1,
 +};
 +
 +static const uint8_t diag_scan2x2_inv[2][2] = {
 +    { 0, 2, },
 +    { 1, 3, },
 +};
 +
- const uint8_t ff_hevc_diag_scan4x4_x[16] = {
-     0, 0, 1, 0,
-     1, 2, 0, 1,
-     2, 3, 1, 2,
-     3, 2, 3, 3,
- };
- const uint8_t ff_hevc_diag_scan4x4_y[16] = {
-     0, 1, 0, 2,
-     1, 0, 3, 2,
-     1, 0, 3, 2,
-     1, 3, 2, 3,
- };
 +static const uint8_t diag_scan4x4_inv[4][4] = {
 +    { 0,  2,  5,  9, },
 +    { 1,  4,  8, 12, },
 +    { 3,  7, 11, 14, },
 +    { 6, 10, 13, 15, },
 +};
 +
- const uint8_t ff_hevc_diag_scan8x8_x[64] = {
-     0, 0, 1, 0,
-     1, 2, 0, 1,
-     2, 3, 0, 1,
-     2, 3, 4, 0,
-     1, 2, 3, 4,
-     5, 0, 1, 2,
-     3, 4, 5, 6,
-     0, 1, 2, 3,
-     4, 5, 6, 7,
-     1, 2, 3, 4,
-     5, 6, 7, 2,
-     3, 4, 5, 6,
-     7, 3, 4, 5,
-     6, 7, 4, 5,
-     6, 7, 5, 6,
-     7, 6, 7, 7,
- };
- const uint8_t ff_hevc_diag_scan8x8_y[64] = {
-     0, 1, 0, 2,
-     1, 0, 3, 2,
-     1, 0, 4, 3,
-     2, 1, 0, 5,
-     4, 3, 2, 1,
-     0, 6, 5, 4,
-     3, 2, 1, 0,
-     7, 6, 5, 4,
-     3, 2, 1, 0,
-     7, 6, 5, 4,
-     3, 2, 1, 7,
-     6, 5, 4, 3,
-     2, 7, 6, 5,
-     4, 3, 7, 6,
-     5, 4, 7, 6,
-     5, 7, 6, 7,
- };
 +static const uint8_t diag_scan8x8_inv[8][8] = {
 +    {  0,  2,  5,  9, 14, 20, 27, 35, },
 +    {  1,  4,  8, 13, 19, 26, 34, 42, },
 +    {  3,  7, 12, 18, 25, 33, 41, 48, },
 +    {  6, 11, 17, 24, 32, 40, 47, 53, },
 +    { 10, 16, 23, 31, 39, 46, 52, 57, },
 +    { 15, 22, 30, 38, 45, 51, 56, 60, },
 +    { 21, 29, 37, 44, 50, 55, 59, 62, },
 +    { 28, 36, 43, 49, 54, 58, 61, 63, },
  };
  
  void ff_hevc_save_states(HEVCContext *s, int ctb_addr_ts)
          (ctb_addr_ts % s->ps.sps->ctb_width == 2 ||
           (s->ps.sps->ctb_width == 2 &&
            ctb_addr_ts % s->ps.sps->ctb_width == 0))) {
 -        memcpy(s->cabac_state, s->HEVClc.cabac_state, HEVC_CONTEXTS);
 +        memcpy(s->cabac_state, s->HEVClc->cabac_state, HEVC_CONTEXTS);
      }
  }
  
  static void load_states(HEVCContext *s)
  {
 -    memcpy(s->HEVClc.cabac_state, s->cabac_state, HEVC_CONTEXTS);
 +    memcpy(s->HEVClc->cabac_state, s->cabac_state, HEVC_CONTEXTS);
  }
  
  static void cabac_reinit(HEVCLocalContext *lc)
  
  static void cabac_init_decoder(HEVCContext *s)
  {
 -    GetBitContext *gb = &s->HEVClc.gb;
 +    GetBitContext *gb = &s->HEVClc->gb;
      skip_bits(gb, 1);
      align_get_bits(gb);
 -    ff_init_cabac_decoder(&s->HEVClc.cc,
 +    ff_init_cabac_decoder(&s->HEVClc->cc,
                            gb->buffer + get_bits_count(gb) / 8,
                            (get_bits_left(gb) + 7) / 8);
  }
@@@ -544,11 -370,8 +492,11 @@@ static void cabac_init_state(HEVCContex
          pre ^= pre >> 31;
          if (pre > 124)
              pre = 124 + (pre & 1);
 -        s->HEVClc.cabac_state[i] = pre;
 +        s->HEVClc->cabac_state[i] = pre;
      }
 +
 +    for (i = 0; i < 4; i++)
 +        s->HEVClc->stat_coeff[i] = 0;
  }
  
  void ff_hevc_cabac_init(HEVCContext *s, int ctb_addr_ts)
      } else {
          if (s->ps.pps->tiles_enabled_flag &&
              s->ps.pps->tile_id[ctb_addr_ts] != s->ps.pps->tile_id[ctb_addr_ts - 1]) {
 -            cabac_reinit(&s->HEVClc);
 +            if (s->threads_number == 1)
 +                cabac_reinit(s->HEVClc);
 +            else
 +                cabac_init_decoder(s);
              cabac_init_state(s);
          }
          if (s->ps.pps->entropy_coding_sync_enabled_flag) {
              if (ctb_addr_ts % s->ps.sps->ctb_width == 0) {
 -                get_cabac_terminate(&s->HEVClc.cc);
 -                cabac_reinit(&s->HEVClc);
 +                get_cabac_terminate(&s->HEVClc->cc);
 +                if (s->threads_number == 1)
 +                    cabac_reinit(s->HEVClc);
 +                else
 +                    cabac_init_decoder(s);
  
                  if (s->ps.sps->ctb_width == 1)
                      cabac_init_state(s);
      }
  }
  
 -#define GET_CABAC(ctx) get_cabac(&s->HEVClc.cc, &s->HEVClc.cabac_state[ctx])
 +#define GET_CABAC(ctx) get_cabac(&s->HEVClc->cc, &s->HEVClc->cabac_state[ctx])
  
  int ff_hevc_sao_merge_flag_decode(HEVCContext *s)
  {
@@@ -607,7 -424,7 +555,7 @@@ int ff_hevc_sao_type_idx_decode(HEVCCon
      if (!GET_CABAC(elem_offset[SAO_TYPE_IDX]))
          return 0;
  
 -    if (!get_cabac_bypass(&s->HEVClc.cc))
 +    if (!get_cabac_bypass(&s->HEVClc->cc))
          return SAO_BAND;
      return SAO_EDGE;
  }
  int ff_hevc_sao_band_position_decode(HEVCContext *s)
  {
      int i;
 -    int value = get_cabac_bypass(&s->HEVClc.cc);
 +    int value = get_cabac_bypass(&s->HEVClc->cc);
  
      for (i = 0; i < 4; i++)
 -        value = (value << 1) | get_cabac_bypass(&s->HEVClc.cc);
 +        value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
      return value;
  }
  
@@@ -627,26 -444,26 +575,26 @@@ int ff_hevc_sao_offset_abs_decode(HEVCC
      int i = 0;
      int length = (1 << (FFMIN(s->ps.sps->bit_depth, 10) - 5)) - 1;
  
 -    while (i < length && get_cabac_bypass(&s->HEVClc.cc))
 +    while (i < length && get_cabac_bypass(&s->HEVClc->cc))
          i++;
      return i;
  }
  
  int ff_hevc_sao_offset_sign_decode(HEVCContext *s)
  {
 -    return get_cabac_bypass(&s->HEVClc.cc);
 +    return get_cabac_bypass(&s->HEVClc->cc);
  }
  
  int ff_hevc_sao_eo_class_decode(HEVCContext *s)
  {
 -    int ret = get_cabac_bypass(&s->HEVClc.cc) << 1;
 -    ret    |= get_cabac_bypass(&s->HEVClc.cc);
 +    int ret = get_cabac_bypass(&s->HEVClc->cc) << 1;
 +    ret    |= get_cabac_bypass(&s->HEVClc->cc);
      return ret;
  }
  
  int ff_hevc_end_of_slice_flag_decode(HEVCContext *s)
  {
 -    return get_cabac_terminate(&s->HEVClc.cc);
 +    return get_cabac_terminate(&s->HEVClc->cc);
  }
  
  int ff_hevc_cu_transquant_bypass_flag_decode(HEVCContext *s)
@@@ -658,12 -475,12 +606,12 @@@ int ff_hevc_skip_flag_decode(HEVCContex
  {
      int min_cb_width = s->ps.sps->min_cb_width;
      int inc = 0;
 -    int x0b = x0 & ((1 << s->ps.sps->log2_ctb_size) - 1);
 -    int y0b = y0 & ((1 << s->ps.sps->log2_ctb_size) - 1);
 +    int x0b = av_mod_uintp2(x0, s->ps.sps->log2_ctb_size);
 +    int y0b = av_mod_uintp2(y0, s->ps.sps->log2_ctb_size);
  
 -    if (s->HEVClc.ctb_left_flag || x0b)
 +    if (s->HEVClc->ctb_left_flag || x0b)
          inc = !!SAMPLE_CTB(s->skip_flag, x_cb - 1, y_cb);
 -    if (s->HEVClc.ctb_up_flag || y0b)
 +    if (s->HEVClc->ctb_up_flag || y0b)
          inc += !!SAMPLE_CTB(s->skip_flag, x_cb, y_cb - 1);
  
      return GET_CABAC(elem_offset[SKIP_FLAG] + inc);
@@@ -681,7 -498,7 +629,7 @@@ int ff_hevc_cu_qp_delta_abs(HEVCContex
      }
      if (prefix_val >= 5) {
          int k = 0;
 -        while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc.cc)) {
 +        while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc)) {
              suffix_val += 1 << k;
              k++;
          }
              av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k);
  
          while (k--)
 -            suffix_val += get_cabac_bypass(&s->HEVClc.cc) << k;
 +            suffix_val += get_cabac_bypass(&s->HEVClc->cc) << k;
      }
      return prefix_val + suffix_val;
  }
  
  int ff_hevc_cu_qp_delta_sign_flag(HEVCContext *s)
  {
 -    return get_cabac_bypass(&s->HEVClc.cc);
 +    return get_cabac_bypass(&s->HEVClc->cc);
 +}
 +
 +int ff_hevc_cu_chroma_qp_offset_flag(HEVCContext *s)
 +{
 +    return GET_CABAC(elem_offset[CU_CHROMA_QP_OFFSET_FLAG]);
 +}
 +
 +int ff_hevc_cu_chroma_qp_offset_idx(HEVCContext *s)
 +{
 +    int c_max= FFMAX(5, s->ps.pps->chroma_qp_offset_list_len_minus1);
 +    int i = 0;
 +
 +    while (i < c_max && GET_CABAC(elem_offset[CU_CHROMA_QP_OFFSET_IDX]))
 +        i++;
 +
 +    return i;
  }
  
  int ff_hevc_pred_mode_decode(HEVCContext *s)
  int ff_hevc_split_coding_unit_flag_decode(HEVCContext *s, int ct_depth, int x0, int y0)
  {
      int inc = 0, depth_left = 0, depth_top = 0;
 -    int x0b  = x0 & ((1 << s->ps.sps->log2_ctb_size) - 1);
 -    int y0b  = y0 & ((1 << s->ps.sps->log2_ctb_size) - 1);
 +    int x0b  = av_mod_uintp2(x0, s->ps.sps->log2_ctb_size);
 +    int y0b  = av_mod_uintp2(y0, s->ps.sps->log2_ctb_size);
      int x_cb = x0 >> s->ps.sps->log2_min_cb_size;
      int y_cb = y0 >> s->ps.sps->log2_min_cb_size;
  
 -    if (s->HEVClc.ctb_left_flag || x0b)
 +    if (s->HEVClc->ctb_left_flag || x0b)
          depth_left = s->tab_ct_depth[(y_cb) * s->ps.sps->min_cb_width + x_cb - 1];
 -    if (s->HEVClc.ctb_up_flag || y0b)
 +    if (s->HEVClc->ctb_up_flag || y0b)
          depth_top = s->tab_ct_depth[(y_cb - 1) * s->ps.sps->min_cb_width + x_cb];
  
      inc += (depth_left > ct_depth);
@@@ -744,7 -545,7 +692,7 @@@ int ff_hevc_part_mode_decode(HEVCContex
      if (GET_CABAC(elem_offset[PART_MODE])) // 1
          return PART_2Nx2N;
      if (log2_cb_size == s->ps.sps->log2_min_cb_size) {
 -        if (s->HEVClc.cu.pred_mode == MODE_INTRA) // 0
 +        if (s->HEVClc->cu.pred_mode == MODE_INTRA) // 0
              return PART_NxN;
          if (GET_CABAC(elem_offset[PART_MODE] + 1)) // 01
              return PART_2NxN;
      if (GET_CABAC(elem_offset[PART_MODE] + 1)) { // 01X, 01XX
          if (GET_CABAC(elem_offset[PART_MODE] + 3)) // 011
              return PART_2NxN;
 -        if (get_cabac_bypass(&s->HEVClc.cc)) // 0101
 +        if (get_cabac_bypass(&s->HEVClc->cc)) // 0101
              return PART_2NxnD;
          return PART_2NxnU; // 0100
      }
  
      if (GET_CABAC(elem_offset[PART_MODE] + 3)) // 001
          return PART_Nx2N;
 -    if (get_cabac_bypass(&s->HEVClc.cc)) // 0001
 +    if (get_cabac_bypass(&s->HEVClc->cc)) // 0001
          return PART_nRx2N;
      return PART_nLx2N;  // 0000
  }
  
  int ff_hevc_pcm_flag_decode(HEVCContext *s)
  {
 -    return get_cabac_terminate(&s->HEVClc.cc);
 +    return get_cabac_terminate(&s->HEVClc->cc);
  }
  
  int ff_hevc_prev_intra_luma_pred_flag_decode(HEVCContext *s)
  int ff_hevc_mpm_idx_decode(HEVCContext *s)
  {
      int i = 0;
 -    while (i < 2 && get_cabac_bypass(&s->HEVClc.cc))
 +    while (i < 2 && get_cabac_bypass(&s->HEVClc->cc))
          i++;
      return i;
  }
  int ff_hevc_rem_intra_luma_pred_mode_decode(HEVCContext *s)
  {
      int i;
 -    int value = get_cabac_bypass(&s->HEVClc.cc);
 +    int value = get_cabac_bypass(&s->HEVClc->cc);
  
      for (i = 0; i < 4; i++)
 -        value = (value << 1) | get_cabac_bypass(&s->HEVClc.cc);
 +        value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
      return value;
  }
  
@@@ -810,8 -611,8 +758,8 @@@ int ff_hevc_intra_chroma_pred_mode_deco
      if (!GET_CABAC(elem_offset[INTRA_CHROMA_PRED_MODE]))
          return 4;
  
 -    ret  = get_cabac_bypass(&s->HEVClc.cc) << 1;
 -    ret |= get_cabac_bypass(&s->HEVClc.cc);
 +    ret  = get_cabac_bypass(&s->HEVClc->cc) << 1;
 +    ret |= get_cabac_bypass(&s->HEVClc->cc);
      return ret;
  }
  
@@@ -820,7 -621,7 +768,7 @@@ int ff_hevc_merge_idx_decode(HEVCContex
      int i = GET_CABAC(elem_offset[MERGE_IDX]);
  
      if (i != 0) {
 -        while (i < s->sh.max_num_merge_cand-1 && get_cabac_bypass(&s->HEVClc.cc))
 +        while (i < s->sh.max_num_merge_cand-1 && get_cabac_bypass(&s->HEVClc->cc))
              i++;
      }
      return i;
@@@ -835,7 -636,7 +783,7 @@@ int ff_hevc_inter_pred_idc_decode(HEVCC
  {
      if (nPbW + nPbH == 12)
          return GET_CABAC(elem_offset[INTER_PRED_IDC] + 4);
 -    if (GET_CABAC(elem_offset[INTER_PRED_IDC] + s->HEVClc.ct.depth))
 +    if (GET_CABAC(elem_offset[INTER_PRED_IDC] + s->HEVClc->ct_depth))
          return PRED_BI;
  
      return GET_CABAC(elem_offset[INTER_PRED_IDC] + 4);
@@@ -850,7 -651,7 +798,7 @@@ int ff_hevc_ref_idx_lx_decode(HEVCConte
      while (i < max_ctx && GET_CABAC(elem_offset[REF_IDX_L0] + i))
          i++;
      if (i == 2) {
 -        while (i < max && get_cabac_bypass(&s->HEVClc.cc))
 +        while (i < max && get_cabac_bypass(&s->HEVClc->cc))
              i++;
      }
  
@@@ -867,35 -668,35 +815,35 @@@ int ff_hevc_no_residual_syntax_flag_dec
      return GET_CABAC(elem_offset[NO_RESIDUAL_DATA_FLAG]);
  }
  
 -int ff_hevc_abs_mvd_greater0_flag_decode(HEVCContext *s)
 +static av_always_inline int abs_mvd_greater0_flag_decode(HEVCContext *s)
  {
      return GET_CABAC(elem_offset[ABS_MVD_GREATER0_FLAG]);
  }
  
 -int ff_hevc_abs_mvd_greater1_flag_decode(HEVCContext *s)
 +static av_always_inline int abs_mvd_greater1_flag_decode(HEVCContext *s)
  {
      return GET_CABAC(elem_offset[ABS_MVD_GREATER1_FLAG] + 1);
  }
  
 -int ff_hevc_mvd_decode(HEVCContext *s)
 +static av_always_inline int mvd_decode(HEVCContext *s)
  {
      int ret = 2;
      int k = 1;
  
 -    while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc.cc)) {
 +    while (k < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc)) {
          ret += 1 << k;
          k++;
      }
      if (k == CABAC_MAX_BIN)
          av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", k);
      while (k--)
 -        ret += get_cabac_bypass(&s->HEVClc.cc) << k;
 -    return get_cabac_bypass_sign(&s->HEVClc.cc, -ret);
 +        ret += get_cabac_bypass(&s->HEVClc->cc) << k;
 +    return get_cabac_bypass_sign(&s->HEVClc->cc, -ret);
  }
  
 -int ff_hevc_mvd_sign_flag_decode(HEVCContext *s)
 +static av_always_inline int mvd_sign_flag_decode(HEVCContext *s)
  {
 -    return get_cabac_bypass_sign(&s->HEVClc.cc, -1);
 +    return get_cabac_bypass_sign(&s->HEVClc->cc, -1);
  }
  
  int ff_hevc_split_transform_flag_decode(HEVCContext *s, int log2_trafo_size)
@@@ -913,73 -714,53 +861,73 @@@ int ff_hevc_cbf_luma_decode(HEVCContex
      return GET_CABAC(elem_offset[CBF_LUMA] + !trafo_depth);
  }
  
 -int ff_hevc_transform_skip_flag_decode(HEVCContext *s, int c_idx)
 +static int hevc_transform_skip_flag_decode(HEVCContext *s, int c_idx)
  {
      return GET_CABAC(elem_offset[TRANSFORM_SKIP_FLAG] + !!c_idx);
  }
  
 -#define LAST_SIG_COEFF(elem)                                                    \
 -    int i = 0;                                                                  \
 -    int max = (log2_size << 1) - 1;                                             \
 -    int ctx_offset, ctx_shift;                                                  \
 -                                                                                \
 -    if (c_idx == 0) {                                                           \
 -        ctx_offset = 3 * (log2_size - 2)  + ((log2_size - 1) >> 2);             \
 -        ctx_shift = (log2_size + 1) >> 2;                                       \
 -    } else {                                                                    \
 -        ctx_offset = 15;                                                        \
 -        ctx_shift = log2_size - 2;                                              \
 -    }                                                                           \
 -    while (i < max &&                                                           \
 -           GET_CABAC(elem_offset[elem] + (i >> ctx_shift) + ctx_offset))        \
 -        i++;                                                                    \
 -    return i;
 +static int explicit_rdpcm_flag_decode(HEVCContext *s, int c_idx)
 +{
 +    return GET_CABAC(elem_offset[EXPLICIT_RDPCM_FLAG] + !!c_idx);
 +}
  
 -int ff_hevc_last_significant_coeff_x_prefix_decode(HEVCContext *s, int c_idx,
 -                                                   int log2_size)
 +static int explicit_rdpcm_dir_flag_decode(HEVCContext *s, int c_idx)
  {
 -    LAST_SIG_COEFF(LAST_SIGNIFICANT_COEFF_X_PREFIX)
 +    return GET_CABAC(elem_offset[EXPLICIT_RDPCM_DIR_FLAG] + !!c_idx);
  }
  
 -int ff_hevc_last_significant_coeff_y_prefix_decode(HEVCContext *s, int c_idx,
 -                                                   int log2_size)
 +int ff_hevc_log2_res_scale_abs(HEVCContext *s, int idx) {
 +    int i =0;
 +
 +    while (i < 4 && GET_CABAC(elem_offset[LOG2_RES_SCALE_ABS] + 4 * idx + i))
 +        i++;
 +
 +    return i;
 +}
 +
 +int ff_hevc_res_scale_sign_flag(HEVCContext *s, int idx) {
 +    return GET_CABAC(elem_offset[RES_SCALE_SIGN_FLAG] + idx);
 +}
 +
 +static av_always_inline void last_significant_coeff_xy_prefix_decode(HEVCContext *s, int c_idx,
 +                                                   int log2_size, int *last_scx_prefix, int *last_scy_prefix)
  {
 -    LAST_SIG_COEFF(LAST_SIGNIFICANT_COEFF_Y_PREFIX)
 +    int i = 0;
 +    int max = (log2_size << 1) - 1;
 +    int ctx_offset, ctx_shift;
 +
 +    if (!c_idx) {
 +        ctx_offset = 3 * (log2_size - 2)  + ((log2_size - 1) >> 2);
 +        ctx_shift = (log2_size + 1) >> 2;
 +    } else {
 +        ctx_offset = 15;
 +        ctx_shift = log2_size - 2;
 +    }
 +    while (i < max &&
 +           GET_CABAC(elem_offset[LAST_SIGNIFICANT_COEFF_X_PREFIX] + (i >> ctx_shift) + ctx_offset))
 +        i++;
 +    *last_scx_prefix = i;
 +
 +    i = 0;
 +    while (i < max &&
 +           GET_CABAC(elem_offset[LAST_SIGNIFICANT_COEFF_Y_PREFIX] + (i >> ctx_shift) + ctx_offset))
 +        i++;
 +    *last_scy_prefix = i;
  }
  
 -int ff_hevc_last_significant_coeff_suffix_decode(HEVCContext *s,
 +static av_always_inline int last_significant_coeff_suffix_decode(HEVCContext *s,
                                                   int last_significant_coeff_prefix)
  {
      int i;
      int length = (last_significant_coeff_prefix >> 1) - 1;
 -    int value = get_cabac_bypass(&s->HEVClc.cc);
 +    int value = get_cabac_bypass(&s->HEVClc->cc);
  
      for (i = 1; i < length; i++)
 -        value = (value << 1) | get_cabac_bypass(&s->HEVClc.cc);
 +        value = (value << 1) | get_cabac_bypass(&s->HEVClc->cc);
      return value;
  }
  
 -int ff_hevc_significant_coeff_group_flag_decode(HEVCContext *s, int c_idx, int ctx_cg)
 +static av_always_inline int significant_coeff_group_flag_decode(HEVCContext *s, int c_idx, int ctx_cg)
  {
      int inc;
  
  
      return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_GROUP_FLAG] + inc);
  }
 -
 -int ff_hevc_significant_coeff_flag_decode(HEVCContext *s, int c_idx, int x_c, int y_c,
 -                                          int log2_trafo_size, int scan_idx, int prev_sig)
 +static av_always_inline int significant_coeff_flag_decode(HEVCContext *s, int x_c, int y_c,
 +                                           int offset, const uint8_t *ctx_idx_map)
  {
 -    static const uint8_t ctx_idx_map[] = {
 -        0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8
 -    };
 -    int x_cg = x_c >> 2;
 -    int y_cg = y_c >> 2;
 -    int sig_ctx, inc;
 -
 -    if (x_c + y_c == 0) {
 -        sig_ctx = 0;
 -    } else if (log2_trafo_size == 2) {
 -        sig_ctx = ctx_idx_map[(y_c << 2) + x_c];
 -    } else {
 -        switch (prev_sig) {
 -        case 0: {
 -                int x_off = x_c & 3;
 -                int y_off = y_c & 3;
 -                sig_ctx   = ((x_off + y_off) == 0) ? 2 : ((x_off + y_off) <= 2) ? 1 : 0;
 -            }
 -            break;
 -        case 1:
 -            sig_ctx = 2 - FFMIN(y_c & 3, 2);
 -            break;
 -        case 2:
 -            sig_ctx = 2 - FFMIN(x_c & 3, 2);
 -            break;
 -        default:
 -            sig_ctx = 2;
 -        }
 -
 -        if (c_idx == 0 && (x_cg > 0 || y_cg > 0))
 -            sig_ctx += 3;
 -
 -        if (log2_trafo_size == 3) {
 -            sig_ctx += (scan_idx == SCAN_DIAG) ? 9 : 15;
 -        } else {
 -            sig_ctx += c_idx ? 12 : 21;
 -        }
 -    }
 -
 -    if (c_idx == 0)
 -        inc = sig_ctx;
 -    else
 -        inc = sig_ctx + 27;
 -
 +    int inc = ctx_idx_map[(y_c << 2) + x_c] + offset;
      return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_FLAG] + inc);
  }
  
 -int ff_hevc_coeff_abs_level_greater1_flag_decode(HEVCContext *s, int c_idx, int inc)
 +static av_always_inline int significant_coeff_flag_decode_0(HEVCContext *s, int c_idx, int offset)
 +{
 +    return GET_CABAC(elem_offset[SIGNIFICANT_COEFF_FLAG] + offset);
 +}
 +
 +static av_always_inline int coeff_abs_level_greater1_flag_decode(HEVCContext *s, int c_idx, int inc)
  {
  
      if (c_idx > 0)
      return GET_CABAC(elem_offset[COEFF_ABS_LEVEL_GREATER1_FLAG] + inc);
  }
  
 -int ff_hevc_coeff_abs_level_greater2_flag_decode(HEVCContext *s, int c_idx, int inc)
 +static av_always_inline int coeff_abs_level_greater2_flag_decode(HEVCContext *s, int c_idx, int inc)
  {
      if (c_idx > 0)
          inc += 4;
      return GET_CABAC(elem_offset[COEFF_ABS_LEVEL_GREATER2_FLAG] + inc);
  }
  
 -int ff_hevc_coeff_abs_level_remaining(HEVCContext *s, int base_level, int rc_rice_param)
 +static av_always_inline int coeff_abs_level_remaining_decode(HEVCContext *s, int rc_rice_param)
  {
      int prefix = 0;
      int suffix = 0;
      int last_coeff_abs_level_remaining;
      int i;
  
 -    while (prefix < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc.cc))
 +    while (prefix < CABAC_MAX_BIN && get_cabac_bypass(&s->HEVClc->cc))
          prefix++;
      if (prefix == CABAC_MAX_BIN)
          av_log(s->avctx, AV_LOG_ERROR, "CABAC_MAX_BIN : %d\n", prefix);
      if (prefix < 3) {
          for (i = 0; i < rc_rice_param; i++)
 -            suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc.cc);
 +            suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc->cc);
          last_coeff_abs_level_remaining = (prefix << rc_rice_param) + suffix;
      } else {
          int prefix_minus3 = prefix - 3;
          for (i = 0; i < prefix_minus3 + rc_rice_param; i++)
 -            suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc.cc);
 +            suffix = (suffix << 1) | get_cabac_bypass(&s->HEVClc->cc);
          last_coeff_abs_level_remaining = (((1 << prefix_minus3) + 3 - 1)
                                                << rc_rice_param) + suffix;
      }
      return last_coeff_abs_level_remaining;
  }
  
 -int ff_hevc_coeff_sign_flag(HEVCContext *s, uint8_t nb)
 +static av_always_inline int coeff_sign_flag_decode(HEVCContext *s, uint8_t nb)
  {
      int i;
      int ret = 0;
  
      for (i = 0; i < nb; i++)
 -        ret = (ret << 1) | get_cabac_bypass(&s->HEVClc.cc);
 +        ret = (ret << 1) | get_cabac_bypass(&s->HEVClc->cc);
      return ret;
  }
 +
 +void ff_hevc_hls_residual_coding(HEVCContext *s, int x0, int y0,
 +                                int log2_trafo_size, enum ScanType scan_idx,
 +                                int c_idx)
 +{
 +#define GET_COORD(offset, n)                                    \
 +    do {                                                        \
 +        x_c = (x_cg << 2) + scan_x_off[n];                      \
 +        y_c = (y_cg << 2) + scan_y_off[n];                      \
 +    } while (0)
 +    HEVCLocalContext *lc = s->HEVClc;
 +    int transform_skip_flag = 0;
 +
 +    int last_significant_coeff_x, last_significant_coeff_y;
 +    int last_scan_pos;
 +    int n_end;
 +    int num_coeff = 0;
 +    int greater1_ctx = 1;
 +
 +    int num_last_subset;
 +    int x_cg_last_sig, y_cg_last_sig;
 +
 +    const uint8_t *scan_x_cg, *scan_y_cg, *scan_x_off, *scan_y_off;
 +
 +    ptrdiff_t stride = s->frame->linesize[c_idx];
 +    int hshift = s->ps.sps->hshift[c_idx];
 +    int vshift = s->ps.sps->vshift[c_idx];
 +    uint8_t *dst = &s->frame->data[c_idx][(y0 >> vshift) * stride +
 +                                          ((x0 >> hshift) << s->ps.sps->pixel_shift)];
 +    int16_t *coeffs = (int16_t*)(c_idx ? lc->edge_emu_buffer2 : lc->edge_emu_buffer);
 +    uint8_t significant_coeff_group_flag[8][8] = {{0}};
 +    int explicit_rdpcm_flag = 0;
 +    int explicit_rdpcm_dir_flag;
 +
 +    int trafo_size = 1 << log2_trafo_size;
 +    int i;
 +    int qp,shift,add,scale,scale_m;
 +    const uint8_t level_scale[] = { 40, 45, 51, 57, 64, 72 };
 +    const uint8_t *scale_matrix = NULL;
 +    uint8_t dc_scale;
 +    int pred_mode_intra = (c_idx == 0) ? lc->tu.intra_pred_mode :
 +                                         lc->tu.intra_pred_mode_c;
 +
 +    memset(coeffs, 0, trafo_size * trafo_size * sizeof(int16_t));
 +
 +    // Derive QP for dequant
 +    if (!lc->cu.cu_transquant_bypass_flag) {
 +        static const int qp_c[] = { 29, 30, 31, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37 };
 +        static const uint8_t rem6[51 + 4 * 6 + 1] = {
 +            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2,
 +            3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5,
 +            0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3,
 +            4, 5, 0, 1, 2, 3, 4, 5, 0, 1
 +        };
 +
 +        static const uint8_t div6[51 + 4 * 6 + 1] = {
 +            0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3,  3,  3,
 +            3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6,  6,  6,
 +            7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10,
 +            10, 10, 11, 11, 11, 11, 11, 11, 12, 12
 +        };
 +        int qp_y = lc->qp_y;
 +
 +        if (s->ps.pps->transform_skip_enabled_flag &&
 +            log2_trafo_size <= s->ps.pps->log2_max_transform_skip_block_size) {
 +            transform_skip_flag = hevc_transform_skip_flag_decode(s, c_idx);
 +        }
 +
 +        if (c_idx == 0) {
 +            qp = qp_y + s->ps.sps->qp_bd_offset;
 +        } else {
 +            int qp_i, offset;
 +
 +            if (c_idx == 1)
 +                offset = s->ps.pps->cb_qp_offset + s->sh.slice_cb_qp_offset +
 +                         lc->tu.cu_qp_offset_cb;
 +            else
 +                offset = s->ps.pps->cr_qp_offset + s->sh.slice_cr_qp_offset +
 +                         lc->tu.cu_qp_offset_cr;
 +
 +            qp_i = av_clip(qp_y + offset, - s->ps.sps->qp_bd_offset, 57);
 +            if (s->ps.sps->chroma_format_idc == 1) {
 +                if (qp_i < 30)
 +                    qp = qp_i;
 +                else if (qp_i > 43)
 +                    qp = qp_i - 6;
 +                else
 +                    qp = qp_c[qp_i - 30];
 +            } else {
 +                if (qp_i > 51)
 +                    qp = 51;
 +                else
 +                    qp = qp_i;
 +            }
 +
 +            qp += s->ps.sps->qp_bd_offset;
 +        }
 +
 +        shift    = s->ps.sps->bit_depth + log2_trafo_size - 5;
 +        add      = 1 << (shift-1);
 +        scale    = level_scale[rem6[qp]] << (div6[qp]);
 +        scale_m  = 16; // default when no custom scaling lists.
 +        dc_scale = 16;
 +
 +        if (s->ps.sps->scaling_list_enable_flag && !(transform_skip_flag && log2_trafo_size > 2)) {
 +            const ScalingList *sl = s->ps.pps->scaling_list_data_present_flag ?
 +            &s->ps.pps->scaling_list : &s->ps.sps->scaling_list;
 +            int matrix_id = lc->cu.pred_mode != MODE_INTRA;
 +
 +            matrix_id = 3 * matrix_id + c_idx;
 +
 +            scale_matrix = sl->sl[log2_trafo_size - 2][matrix_id];
 +            if (log2_trafo_size >= 4)
 +                dc_scale = sl->sl_dc[log2_trafo_size - 4][matrix_id];
 +        }
 +    } else {
 +        shift        = 0;
 +        add          = 0;
 +        scale        = 0;
 +        dc_scale     = 0;
 +    }
 +
 +    if (lc->cu.pred_mode == MODE_INTER && s->ps.sps->explicit_rdpcm_enabled_flag &&
 +        (transform_skip_flag || lc->cu.cu_transquant_bypass_flag)) {
 +        explicit_rdpcm_flag = explicit_rdpcm_flag_decode(s, c_idx);
 +        if (explicit_rdpcm_flag) {
 +            explicit_rdpcm_dir_flag = explicit_rdpcm_dir_flag_decode(s, c_idx);
 +        }
 +    }
 +
 +    last_significant_coeff_xy_prefix_decode(s, c_idx, log2_trafo_size,
 +                                           &last_significant_coeff_x, &last_significant_coeff_y);
 +
 +    if (last_significant_coeff_x > 3) {
 +        int suffix = last_significant_coeff_suffix_decode(s, last_significant_coeff_x);
 +        last_significant_coeff_x = (1 << ((last_significant_coeff_x >> 1) - 1)) *
 +        (2 + (last_significant_coeff_x & 1)) +
 +        suffix;
 +    }
 +
 +    if (last_significant_coeff_y > 3) {
 +        int suffix = last_significant_coeff_suffix_decode(s, last_significant_coeff_y);
 +        last_significant_coeff_y = (1 << ((last_significant_coeff_y >> 1) - 1)) *
 +        (2 + (last_significant_coeff_y & 1)) +
 +        suffix;
 +    }
 +
 +    if (scan_idx == SCAN_VERT)
 +        FFSWAP(int, last_significant_coeff_x, last_significant_coeff_y);
 +
 +    x_cg_last_sig = last_significant_coeff_x >> 2;
 +    y_cg_last_sig = last_significant_coeff_y >> 2;
 +
 +    switch (scan_idx) {
 +    case SCAN_DIAG: {
 +        int last_x_c = last_significant_coeff_x & 3;
 +        int last_y_c = last_significant_coeff_y & 3;
 +
 +        scan_x_off = ff_hevc_diag_scan4x4_x;
 +        scan_y_off = ff_hevc_diag_scan4x4_y;
 +        num_coeff = diag_scan4x4_inv[last_y_c][last_x_c];
 +        if (trafo_size == 4) {
 +            scan_x_cg = scan_1x1;
 +            scan_y_cg = scan_1x1;
 +        } else if (trafo_size == 8) {
 +            num_coeff += diag_scan2x2_inv[y_cg_last_sig][x_cg_last_sig] << 4;
 +            scan_x_cg = diag_scan2x2_x;
 +            scan_y_cg = diag_scan2x2_y;
 +        } else if (trafo_size == 16) {
 +            num_coeff += diag_scan4x4_inv[y_cg_last_sig][x_cg_last_sig] << 4;
 +            scan_x_cg = ff_hevc_diag_scan4x4_x;
 +            scan_y_cg = ff_hevc_diag_scan4x4_y;
 +        } else { // trafo_size == 32
 +            num_coeff += diag_scan8x8_inv[y_cg_last_sig][x_cg_last_sig] << 4;
 +            scan_x_cg = ff_hevc_diag_scan8x8_x;
 +            scan_y_cg = ff_hevc_diag_scan8x8_y;
 +        }
 +        break;
 +    }
 +    case SCAN_HORIZ:
 +        scan_x_cg = horiz_scan2x2_x;
 +        scan_y_cg = horiz_scan2x2_y;
 +        scan_x_off = horiz_scan4x4_x;
 +        scan_y_off = horiz_scan4x4_y;
 +        num_coeff = horiz_scan8x8_inv[last_significant_coeff_y][last_significant_coeff_x];
 +        break;
 +    default: //SCAN_VERT
 +        scan_x_cg = horiz_scan2x2_y;
 +        scan_y_cg = horiz_scan2x2_x;
 +        scan_x_off = horiz_scan4x4_y;
 +        scan_y_off = horiz_scan4x4_x;
 +        num_coeff = horiz_scan8x8_inv[last_significant_coeff_x][last_significant_coeff_y];
 +        break;
 +    }
 +    num_coeff++;
 +    num_last_subset = (num_coeff - 1) >> 4;
 +
 +    for (i = num_last_subset; i >= 0; i--) {
 +        int n, m;
 +        int x_cg, y_cg, x_c, y_c, pos;
 +        int implicit_non_zero_coeff = 0;
 +        int64_t trans_coeff_level;
 +        int prev_sig = 0;
 +        int offset = i << 4;
 +        int rice_init = 0;
 +
 +        uint8_t significant_coeff_flag_idx[16];
 +        uint8_t nb_significant_coeff_flag = 0;
 +
 +        x_cg = scan_x_cg[i];
 +        y_cg = scan_y_cg[i];
 +
 +        if ((i < num_last_subset) && (i > 0)) {
 +            int ctx_cg = 0;
 +            if (x_cg < (1 << (log2_trafo_size - 2)) - 1)
 +                ctx_cg += significant_coeff_group_flag[x_cg + 1][y_cg];
 +            if (y_cg < (1 << (log2_trafo_size - 2)) - 1)
 +                ctx_cg += significant_coeff_group_flag[x_cg][y_cg + 1];
 +
 +            significant_coeff_group_flag[x_cg][y_cg] =
 +                significant_coeff_group_flag_decode(s, c_idx, ctx_cg);
 +            implicit_non_zero_coeff = 1;
 +        } else {
 +            significant_coeff_group_flag[x_cg][y_cg] =
 +            ((x_cg == x_cg_last_sig && y_cg == y_cg_last_sig) ||
 +             (x_cg == 0 && y_cg == 0));
 +        }
 +
 +        last_scan_pos = num_coeff - offset - 1;
 +
 +        if (i == num_last_subset) {
 +            n_end = last_scan_pos - 1;
 +            significant_coeff_flag_idx[0] = last_scan_pos;
 +            nb_significant_coeff_flag = 1;
 +        } else {
 +            n_end = 15;
 +        }
 +
 +        if (x_cg < ((1 << log2_trafo_size) - 1) >> 2)
 +            prev_sig = !!significant_coeff_group_flag[x_cg + 1][y_cg];
 +        if (y_cg < ((1 << log2_trafo_size) - 1) >> 2)
 +            prev_sig += (!!significant_coeff_group_flag[x_cg][y_cg + 1] << 1);
 +
 +        if (significant_coeff_group_flag[x_cg][y_cg] && n_end >= 0) {
 +            static const uint8_t ctx_idx_map[] = {
 +                0, 1, 4, 5, 2, 3, 4, 5, 6, 6, 8, 8, 7, 7, 8, 8, // log2_trafo_size == 2
 +                1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, // prev_sig == 0
 +                2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, // prev_sig == 1
 +                2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, 2, 1, 0, 0, // prev_sig == 2
 +                2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2  // default
 +            };
 +            const uint8_t *ctx_idx_map_p;
 +            int scf_offset = 0;
 +            if (s->ps.sps->transform_skip_context_enabled_flag &&
 +                (transform_skip_flag || lc->cu.cu_transquant_bypass_flag)) {
 +                ctx_idx_map_p = (uint8_t*) &ctx_idx_map[4 * 16];
 +                if (c_idx == 0) {
 +                    scf_offset = 40;
 +                } else {
 +                    scf_offset = 14 + 27;
 +                }
 +            } else {
 +                if (c_idx != 0)
 +                    scf_offset = 27;
 +                if (log2_trafo_size == 2) {
 +                    ctx_idx_map_p = (uint8_t*) &ctx_idx_map[0];
 +                } else {
 +                    ctx_idx_map_p = (uint8_t*) &ctx_idx_map[(prev_sig + 1) << 4];
 +                    if (c_idx == 0) {
 +                        if ((x_cg > 0 || y_cg > 0))
 +                            scf_offset += 3;
 +                        if (log2_trafo_size == 3) {
 +                            scf_offset += (scan_idx == SCAN_DIAG) ? 9 : 15;
 +                        } else {
 +                            scf_offset += 21;
 +                        }
 +                    } else {
 +                        if (log2_trafo_size == 3)
 +                            scf_offset += 9;
 +                        else
 +                            scf_offset += 12;
 +                    }
 +                }
 +            }
 +            for (n = n_end; n > 0; n--) {
 +                x_c = scan_x_off[n];
 +                y_c = scan_y_off[n];
 +                if (significant_coeff_flag_decode(s, x_c, y_c, scf_offset, ctx_idx_map_p)) {
 +                    significant_coeff_flag_idx[nb_significant_coeff_flag] = n;
 +                    nb_significant_coeff_flag++;
 +                    implicit_non_zero_coeff = 0;
 +                }
 +            }
 +            if (implicit_non_zero_coeff == 0) {
 +                if (s->ps.sps->transform_skip_context_enabled_flag &&
 +                    (transform_skip_flag || lc->cu.cu_transquant_bypass_flag)) {
 +                    if (c_idx == 0) {
 +                        scf_offset = 42;
 +                    } else {
 +                        scf_offset = 16 + 27;
 +                    }
 +                } else {
 +                    if (i == 0) {
 +                        if (c_idx == 0)
 +                            scf_offset = 0;
 +                        else
 +                            scf_offset = 27;
 +                    } else {
 +                        scf_offset = 2 + scf_offset;
 +                    }
 +                }
 +                if (significant_coeff_flag_decode_0(s, c_idx, scf_offset) == 1) {
 +                    significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
 +                    nb_significant_coeff_flag++;
 +                }
 +            } else {
 +                significant_coeff_flag_idx[nb_significant_coeff_flag] = 0;
 +                nb_significant_coeff_flag++;
 +            }
 +        }
 +
 +        n_end = nb_significant_coeff_flag;
 +
 +
 +        if (n_end) {
 +            int first_nz_pos_in_cg;
 +            int last_nz_pos_in_cg;
 +            int c_rice_param = 0;
 +            int first_greater1_coeff_idx = -1;
 +            uint8_t coeff_abs_level_greater1_flag[8];
 +            uint16_t coeff_sign_flag;
 +            int sum_abs = 0;
 +            int sign_hidden;
 +            int sb_type;
 +
 +
 +            // initialize first elem of coeff_bas_level_greater1_flag
 +            int ctx_set = (i > 0 && c_idx == 0) ? 2 : 0;
 +
 +            if (s->ps.sps->persistent_rice_adaptation_enabled_flag) {
 +                if (!transform_skip_flag && !lc->cu.cu_transquant_bypass_flag)
 +                    sb_type = 2 * (c_idx == 0 ? 1 : 0);
 +                else
 +                    sb_type = 2 * (c_idx == 0 ? 1 : 0) + 1;
 +                c_rice_param = lc->stat_coeff[sb_type] / 4;
 +            }
 +
 +            if (!(i == num_last_subset) && greater1_ctx == 0)
 +                ctx_set++;
 +            greater1_ctx = 1;
 +            last_nz_pos_in_cg = significant_coeff_flag_idx[0];
 +
 +            for (m = 0; m < (n_end > 8 ? 8 : n_end); m++) {
 +                int inc = (ctx_set << 2) + greater1_ctx;
 +                coeff_abs_level_greater1_flag[m] =
 +                    coeff_abs_level_greater1_flag_decode(s, c_idx, inc);
 +                if (coeff_abs_level_greater1_flag[m]) {
 +                    greater1_ctx = 0;
 +                    if (first_greater1_coeff_idx == -1)
 +                        first_greater1_coeff_idx = m;
 +                } else if (greater1_ctx > 0 && greater1_ctx < 3) {
 +                    greater1_ctx++;
 +                }
 +            }
 +            first_nz_pos_in_cg = significant_coeff_flag_idx[n_end - 1];
 +
 +            if (lc->cu.cu_transquant_bypass_flag ||
 +                (lc->cu.pred_mode ==  MODE_INTRA  &&
 +                 s->ps.sps->implicit_rdpcm_enabled_flag  &&  transform_skip_flag  &&
 +                 (pred_mode_intra == 10 || pred_mode_intra  ==  26 )) ||
 +                 explicit_rdpcm_flag)
 +                sign_hidden = 0;
 +            else
 +                sign_hidden = (last_nz_pos_in_cg - first_nz_pos_in_cg >= 4);
 +
 +            if (first_greater1_coeff_idx != -1) {
 +                coeff_abs_level_greater1_flag[first_greater1_coeff_idx] += coeff_abs_level_greater2_flag_decode(s, c_idx, ctx_set);
 +            }
 +            if (!s->ps.pps->sign_data_hiding_flag || !sign_hidden ) {
 +                coeff_sign_flag = coeff_sign_flag_decode(s, nb_significant_coeff_flag) << (16 - nb_significant_coeff_flag);
 +            } else {
 +                coeff_sign_flag = coeff_sign_flag_decode(s, nb_significant_coeff_flag - 1) << (16 - (nb_significant_coeff_flag - 1));
 +            }
 +
 +            for (m = 0; m < n_end; m++) {
 +                n = significant_coeff_flag_idx[m];
 +                GET_COORD(offset, n);
 +                if (m < 8) {
 +                    trans_coeff_level = 1 + coeff_abs_level_greater1_flag[m];
 +                    if (trans_coeff_level == ((m == first_greater1_coeff_idx) ? 3 : 2)) {
 +                        int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(s, c_rice_param);
 +
 +                        trans_coeff_level += last_coeff_abs_level_remaining;
 +                        if (trans_coeff_level > (3 << c_rice_param))
 +                            c_rice_param = s->ps.sps->persistent_rice_adaptation_enabled_flag ? c_rice_param + 1 : FFMIN(c_rice_param + 1, 4);
 +                        if (s->ps.sps->persistent_rice_adaptation_enabled_flag && !rice_init) {
 +                            int c_rice_p_init = lc->stat_coeff[sb_type] / 4;
 +                            if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
 +                                lc->stat_coeff[sb_type]++;
 +                            else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
 +                                if (lc->stat_coeff[sb_type] > 0)
 +                                    lc->stat_coeff[sb_type]--;
 +                            rice_init = 1;
 +                        }
 +                    }
 +                } else {
 +                    int last_coeff_abs_level_remaining = coeff_abs_level_remaining_decode(s, c_rice_param);
 +
 +                    trans_coeff_level = 1 + last_coeff_abs_level_remaining;
 +                    if (trans_coeff_level > (3 << c_rice_param))
 +                        c_rice_param = s->ps.sps->persistent_rice_adaptation_enabled_flag ? c_rice_param + 1 : FFMIN(c_rice_param + 1, 4);
 +                    if (s->ps.sps->persistent_rice_adaptation_enabled_flag && !rice_init) {
 +                        int c_rice_p_init = lc->stat_coeff[sb_type] / 4;
 +                        if (last_coeff_abs_level_remaining >= (3 << c_rice_p_init))
 +                            lc->stat_coeff[sb_type]++;
 +                        else if (2 * last_coeff_abs_level_remaining < (1 << c_rice_p_init))
 +                            if (lc->stat_coeff[sb_type] > 0)
 +                                lc->stat_coeff[sb_type]--;
 +                        rice_init = 1;
 +                    }
 +                }
 +                if (s->ps.pps->sign_data_hiding_flag && sign_hidden) {
 +                    sum_abs += trans_coeff_level;
 +                    if (n == first_nz_pos_in_cg && (sum_abs&1))
 +                        trans_coeff_level = -trans_coeff_level;
 +                }
 +                if (coeff_sign_flag >> 15)
 +                    trans_coeff_level = -trans_coeff_level;
 +                coeff_sign_flag <<= 1;
 +                if(!lc->cu.cu_transquant_bypass_flag) {
 +                    if (s->ps.sps->scaling_list_enable_flag && !(transform_skip_flag && log2_trafo_size > 2)) {
 +                        if(y_c || x_c || log2_trafo_size < 4) {
 +                            switch(log2_trafo_size) {
 +                                case 3: pos = (y_c << 3) + x_c; break;
 +                                case 4: pos = ((y_c >> 1) << 3) + (x_c >> 1); break;
 +                                case 5: pos = ((y_c >> 2) << 3) + (x_c >> 2); break;
 +                                default: pos = (y_c << 2) + x_c; break;
 +                            }
 +                            scale_m = scale_matrix[pos];
 +                        } else {
 +                            scale_m = dc_scale;
 +                        }
 +                    }
 +                    trans_coeff_level = (trans_coeff_level * (int64_t)scale * (int64_t)scale_m + add) >> shift;
 +                    if(trans_coeff_level < 0) {
 +                        if((~trans_coeff_level) & 0xFffffffffff8000)
 +                            trans_coeff_level = -32768;
 +                    } else {
 +                        if(trans_coeff_level & 0xffffffffffff8000)
 +                            trans_coeff_level = 32767;
 +                    }
 +                }
 +                coeffs[y_c * trafo_size + x_c] = trans_coeff_level;
 +            }
 +        }
 +    }
 +
 +    if (lc->cu.cu_transquant_bypass_flag) {
 +        if (explicit_rdpcm_flag || (s->ps.sps->implicit_rdpcm_enabled_flag &&
 +                                    (pred_mode_intra == 10 || pred_mode_intra == 26))) {
 +            int mode = s->ps.sps->implicit_rdpcm_enabled_flag ? (pred_mode_intra == 26) : explicit_rdpcm_dir_flag;
 +
 +            s->hevcdsp.transform_rdpcm(coeffs, log2_trafo_size, mode);
 +        }
 +    } else {
 +        if (transform_skip_flag) {
 +            int rot = s->ps.sps->transform_skip_rotation_enabled_flag &&
 +                      log2_trafo_size == 2 &&
 +                      lc->cu.pred_mode == MODE_INTRA;
 +            if (rot) {
 +                for (i = 0; i < 8; i++)
 +                    FFSWAP(int16_t, coeffs[i], coeffs[16 - i - 1]);
 +            }
 +
 +            s->hevcdsp.transform_skip(coeffs, log2_trafo_size);
 +
 +            if (explicit_rdpcm_flag || (s->ps.sps->implicit_rdpcm_enabled_flag &&
 +                                        lc->cu.pred_mode == MODE_INTRA &&
 +                                        (pred_mode_intra == 10 || pred_mode_intra == 26))) {
 +                int mode = explicit_rdpcm_flag ? explicit_rdpcm_dir_flag : (pred_mode_intra == 26);
 +
 +                s->hevcdsp.transform_rdpcm(coeffs, log2_trafo_size, mode);
 +            }
 +        } else if (lc->cu.pred_mode == MODE_INTRA && c_idx == 0 && log2_trafo_size == 2) {
 +            s->hevcdsp.idct_4x4_luma(coeffs);
 +        } else {
 +            int max_xy = FFMAX(last_significant_coeff_x, last_significant_coeff_y);
 +            if (max_xy == 0)
 +                s->hevcdsp.idct_dc[log2_trafo_size-2](coeffs);
 +            else {
 +                int col_limit = last_significant_coeff_x + last_significant_coeff_y + 4;
 +                if (max_xy < 4)
 +                    col_limit = FFMIN(4, col_limit);
 +                else if (max_xy < 8)
 +                    col_limit = FFMIN(8, col_limit);
 +                else if (max_xy < 12)
 +                    col_limit = FFMIN(24, col_limit);
 +                s->hevcdsp.idct[log2_trafo_size-2](coeffs, col_limit);
 +            }
 +        }
 +    }
 +    if (lc->tu.cross_pf) {
 +        int16_t *coeffs_y = (int16_t*)lc->edge_emu_buffer;
 +
 +        for (i = 0; i < (trafo_size * trafo_size); i++) {
 +            coeffs[i] = coeffs[i] + ((lc->tu.res_scale_val * coeffs_y[i]) >> 3);
 +        }
 +    }
 +    s->hevcdsp.transform_add[log2_trafo_size-2](dst, coeffs, stride);
 +}
 +
 +void ff_hevc_hls_mvd_coding(HEVCContext *s, int x0, int y0, int log2_cb_size)
 +{
 +    HEVCLocalContext *lc = s->HEVClc;
 +    int x = abs_mvd_greater0_flag_decode(s);
 +    int y = abs_mvd_greater0_flag_decode(s);
 +
 +    if (x)
 +        x += abs_mvd_greater1_flag_decode(s);
 +    if (y)
 +        y += abs_mvd_greater1_flag_decode(s);
 +
 +    switch (x) {
 +    case 2: lc->pu.mvd.x = mvd_decode(s);           break;
 +    case 1: lc->pu.mvd.x = mvd_sign_flag_decode(s); break;
 +    case 0: lc->pu.mvd.x = 0;                       break;
 +    }
 +
 +    switch (y) {
 +    case 2: lc->pu.mvd.y = mvd_decode(s);           break;
 +    case 1: lc->pu.mvd.y = mvd_sign_flag_decode(s); break;
 +    case 0: lc->pu.mvd.y = 0;                       break;
 +    }
 +}
 +
diff --combined libavcodec/hevc_data.c
index 0000000,f4b6096..f74f272
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,75 +1,75 @@@
 - * This file is part of Libav.
+ /*
+  * HEVC shared tables
+  *
 - * 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
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #include <stdint.h>
+ #include "hevc.h"
+ const uint8_t ff_hevc_diag_scan4x4_x[16] = {
+     0, 0, 1, 0,
+     1, 2, 0, 1,
+     2, 3, 1, 2,
+     3, 2, 3, 3,
+ };
+ const uint8_t ff_hevc_diag_scan4x4_y[16] = {
+     0, 1, 0, 2,
+     1, 0, 3, 2,
+     1, 0, 3, 2,
+     1, 3, 2, 3,
+ };
+ const uint8_t ff_hevc_diag_scan8x8_x[64] = {
+     0, 0, 1, 0,
+     1, 2, 0, 1,
+     2, 3, 0, 1,
+     2, 3, 4, 0,
+     1, 2, 3, 4,
+     5, 0, 1, 2,
+     3, 4, 5, 6,
+     0, 1, 2, 3,
+     4, 5, 6, 7,
+     1, 2, 3, 4,
+     5, 6, 7, 2,
+     3, 4, 5, 6,
+     7, 3, 4, 5,
+     6, 7, 4, 5,
+     6, 7, 5, 6,
+     7, 6, 7, 7,
+ };
+ const uint8_t ff_hevc_diag_scan8x8_y[64] = {
+     0, 1, 0, 2,
+     1, 0, 3, 2,
+     1, 0, 4, 3,
+     2, 1, 0, 5,
+     4, 3, 2, 1,
+     0, 6, 5, 4,
+     3, 2, 1, 0,
+     7, 6, 5, 4,
+     3, 2, 1, 0,
+     7, 6, 5, 4,
+     3, 2, 1, 7,
+     6, 5, 4, 3,
+     2, 7, 6, 5,
+     4, 3, 7, 6,
+     5, 4, 7, 6,
+     5, 7, 6, 7,
+ };