Merge commit 'ae17878fb2ab100264226c84c58f5b95a703312f'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 27 Mar 2014 20:03:35 +0000 (21:03 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 27 Mar 2014 20:09:17 +0000 (21:09 +0100)
* commit 'ae17878fb2ab100264226c84c58f5b95a703312f':
  BRender PIX image decoder

Conflicts:
doc/general.texi
libavcodec/Makefile
libavcodec/version.h

See: 492a5f835c59ab7c2e347d3579d8bf6148ae0a0, and others
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
doc/general.texi
libavcodec/Makefile
libavcodec/avcodec.h
libavcodec/brenderpix.c
libavcodec/codec_desc.c
libavcodec/utils.c
libavcodec/version.h
libavformat/img2.c

diff --cc Changelog
+++ b/Changelog
@@@ -2,258 -2,121 +2,259 @@@ Entries are sorted chronologically fro
  releases are sorted from youngest to oldest.
  
  version <next>:
 -- libx265 encoder
  - shuffleplanes filter
 +- subfile protocol
 +- Phantom Cine demuxer
  - replaygain data export
 +- VP7 video decoder
  - Alias PIX image encoder and decoder
 -- BRender PIX image decoder
++- Improvments to the BRender PIX image decoder
  
  
 -version 10:
 -- av_strnstr
 -- support ID3v2 tags in ASF files
 +version 2.2:
 +
 +- HNM version 4 demuxer and video decoder
 +- Live HDS muxer
 +- setsar/setdar filters now support variables in ratio expressions
 +- elbg filter
 +- string validation in ffprobe
 +- support for decoding through VDPAU in ffmpeg (the -hwaccel option)
 +- complete Voxware MetaSound decoder
 +- remove mp3_header_compress bitstream filter
 +- Windows resource files for shared libraries
 +- aeval filter
 +- stereoscopic 3d metadata handling
 +- WebP encoding via libwebp
 +- ATRAC3+ decoder
 +- VP8 in Ogg demuxing
 +- side & metadata support in NUT
 +- framepack filter
 +- XYZ12 rawvideo support in NUT
 +- Exif metadata support in WebP decoder
 +- OpenGL device
 +- Use metadata_header_padding to control padding in ID3 tags (currently used in
 +  MP3, AIFF, and OMA files), FLAC header, and the AVI "junk" block.
 +- Mirillis FIC video decoder
 +- Support DNx444
 +- libx265 encoder
 +- dejudder filter
 +- Autodetect VDA like all other hardware accelerations
 +
 +
 +version 2.1:
 +
 +- aecho filter
 +- perspective filter ported from libmpcodecs
 +- ffprobe -show_programs option
 +- compand filter
 +- RTMP seek support
 +- when transcoding with ffmpeg (i.e. not streamcopying), -ss is now accurate
 +  even when used as an input option. Previous behavior can be restored with
 +  the -noaccurate_seek option.
 +- ffmpeg -t option can now be used for inputs, to limit the duration of
 +  data read from an input file
 +- incomplete Voxware MetaSound decoder
 +- read EXIF metadata from JPEG
 +- DVB teletext decoder
 +- phase filter ported from libmpcodecs
 +- w3fdif filter
 +- Opus support in Matroska
 +- FFV1 version 1.3 is stable and no longer experimental
 +- FFV1: YUVA(444,422,420) 9, 10 and 16 bit support
 +- changed DTS stream id in lavf mpeg ps muxer from 0x8a to 0x88, to be
 +  more consistent with other muxers.
 +- adelay filter
 +- pullup filter ported from libmpcodecs
 +- ffprobe -read_intervals option
 +- Lossless and alpha support for WebP decoder
 +- Error Resilient AAC syntax (ER AAC LC) decoding
 +- Low Delay AAC (ER AAC LD) decoding
 +- mux chapters in ASF files
 +- SFTP protocol (via libssh)
 +- libx264: add ability to encode in YUVJ422P and YUVJ444P
 +- Fraps: use BT.709 colorspace by default for yuv, as reference fraps decoder does
 +- make decoding alpha optional for prores, ffv1 and vp6 by setting
 +  the skip_alpha flag.
 +- ladspa wrapper filter
 +- native VP9 decoder
 +- dpx parser
 +- max_error_rate parameter in ffmpeg
 +- PulseAudio output device
 +- ReplayGain scanner
 +- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
 +- Linux framebuffer output device
 +- HEVC decoder
 +- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
 +- mergeplanes filter
 +
 +
 +version 2.0:
 +
 +- curves filter
  - reference-counting for AVFrame and AVPacket data
 -- avconv now fails when input options are used for output file
 +- ffmpeg now fails when input options are used for output file
    or vice versa
 -- avconv options -filter_script and -filter_complex_script, which allow a
 +- support for Monkey's Audio versions from 3.93
 +- perms and aperms filters
 +- audio filtering support in ffplay
 +- 10% faster aac encoding on x86 and MIPS
 +- sine audio filter source
 +- WebP demuxing and decoding support
 +- ffmpeg options -filter_script and -filter_complex_script, which allow a
    filtergraph description to be read from a file
 +- OpenCL support
 +- audio phaser filter
 +- separatefields filter
 +- libquvi demuxer
  - uniform options syntax across all filters
 +- telecine filter
  - interlace filter
 -- JPEG 2000 decoder
 -- asetpts filter (same as setpts, but for audio)
 +- smptehdbars source
 +- inverse telecine filters (fieldmatch and decimate)
 +- colorbalance filter
 +- colorchannelmixer filter
 +- The matroska demuxer can now output proper verbatim ASS packets. It will
 +  become the default at the next libavformat major bump.
 +- decent native animated GIF encoding
 +- asetrate filter
 +- interleave filter
 +- timeline editing with filters
 +- vidstabdetect and vidstabtransform filters for video stabilization using
 +  the vid.stab library
 +- astats filter
  - trim and atrim filters
 -- avconv -t and -ss (output-only) options are now sample-accurate when
 +- ffmpeg -t and -ss (output-only) options are now sample-accurate when
    transcoding audio
  - Matroska muxer can now put the index at the beginning of the file.
 -- avconv -deinterlace option removed, the yadif filter should be used instead
 +- extractplanes filter
 +- avectorscope filter
 +- ADPCM DTK decoder
 +- ADP demuxer
 +- RSD demuxer
 +- RedSpark demuxer
 +- ADPCM IMA Radical decoder
 +- zmq filters
 +- DCT denoiser filter (dctdnoiz)
 +- Wavelet denoiser filter ported from libmpcodecs as owdenoise (formerly "ow")
  - Apple Intermediate Codec decoder
  - Escape 130 video decoder
 +- FTP protocol support
 +- V4L2 output device
 +- 3D LUT filter (lut3d)
 +- SMPTE 302M audio encoder
  - support for slice multithreading in libavfilter
 +- Hald CLUT support (generation and filtering)
  - VC-1 interlaced B-frame support
  - support for WavPack muxing (raw and in Matroska)
 +- XVideo output device
 +- vignette filter
 +- True Audio (TTA) encoder
  - Go2Webinar decoder
 +- mcdeint filter ported from libmpcodecs
 +- sab filter ported from libmpcodecs
 +- ffprobe -show_chapters option
  - WavPack encoding through libwavpack
 -- Added the -n parameter to avconv
 -- RTMP seek support
 -- when transcoding with avconv (i.e. not streamcopying), -ss is now accurate
 -  even when used as an input option. Previous behavior can be restored with
 -  the -noaccurate_seek option.
 -- avconv -t option can now be used for inputs, to limit the duration of
 -  data read from an input file
 -- Voxware MetaSound decoder
 -- WebP decoder
 -- Error Resilient AAC syntax (ER AAC LC) decoding
 -- Low Delay AAC (ER AAC LD) decoding
 -- mux chapters in ASF files
 -- Opus in Ogg demuxing
 -- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support)
 -- F4V muxer
 -- HNM version 4 demuxer and video decoder
 -- HEVC decoder
 -- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing
 -- remove avplay -vismv option, which has not worked for a long time
 -- Live HDS muxer
 -- setsar/setdar filters now support variables in ratio expressions
 -- dar variable in the scale filter now returns the actual DAR (i.e. a * sar)
 -- VP9 decoder
 -- support for decoding through VDPAU in avconv (the -hwaccel option)
 -- remove mp3_header_(de)compress bitstream filters
 -- stereoscopic 3d metadata handling
 -- png standalone parser
 -- WebP encoding via libwebp
 -- ATRAC3+ decoder
 -- framepack filter
 -- Mirillis FIC video decoder
 -- Support DNx444
 -- compand audio filter
 +- rotate filter
 +- spp filter ported from libmpcodecs
 +- libgme support
 +- psnr filter
  
  
 -version 9:
 -- av_basename and av_dirname
 -- adobe and limelight publisher authentication in RTMP
 +version 1.2:
 +
  - VDPAU hardware acceleration through normal hwaccel
  - SRTP support
 +- Error diffusion dither in Swscale
 +- Chained Ogg support
 +- Theora Midstream reconfiguration support
 +- EVRC decoder
 +- audio fade filter
 +- filtering audio with unknown channel layout
 +- allpass, bass, bandpass, bandreject, biquad, equalizer, highpass, lowpass
 +  and treble audio filter
 +- improved showspectrum filter, with multichannel support and sox-like colors
 +- histogram filter
 +- tee muxer
 +- il filter ported from libmpcodecs
 +- support ID3v2 tags in ASF files
 +- encrypted TTA stream decoding support
 +- RF64 support in WAV muxer
 +- noise filter ported from libmpcodecs
 +- Subtitles character encoding conversion
 +- blend filter
 +- stereo3d filter ported from libmpcodecs
 +
  
 +version 1.1:
  
 -version 9_beta3:
 -- ashowinfo audio filter
 +- stream disposition information printing in ffprobe
 +- filter for loudness analysis following EBU R128
 +- Opus encoder using libopus
 +- ffprobe -select_streams option
 +- Pinnacle TARGA CineWave YUV16 decoder
 +- TAK demuxer, decoder and parser
 +- DTS-HD demuxer
 +- remove -same_quant, it hasn't worked for years
 +- FFM2 support
 +- X-Face image encoder and decoder
  - 24-bit FLAC encoding
 -- audio volume filter
 -- deprecated the avconv -vol option. the volume filter is to be used instead.
  - multi-channel ALAC encoding up to 7.1
 -- TAK demuxer, parser, and decoder
 -- adaptive frame-level multithreading for H.264
 -
 -
 -version 9_beta2:
  - metadata (INFO tag) support in WAV muxer
 +- subtitles raw text decoder
  - support for building DLLs using MSVC
 -- remove avserver daemon mode
 +- LVF demuxer
 +- ffescape tool
 +- metadata (info chunk) support in CAF muxer
 +- field filter ported from libmpcodecs
 +- AVR demuxer
 +- geq filter ported from libmpcodecs
 +- remove ffserver daemon mode
 +- AST muxer/demuxer
 +- new expansion syntax for drawtext
 +- BRender PIX image decoder
 +- ffprobe -show_entries option
 +- ffprobe -sections option
 +- ADPCM IMA Dialogic decoder
 +- BRSTM demuxer
 +- animated GIF decoder and demuxer
 +- PVF demuxer
 +- subtitles filter
 +- IRCAM muxer/demuxer
 +- Paris Audio File demuxer
 +- Virtual concatenation demuxer
 +- VobSub demuxer
 +- JSON captions for TED talks decoding support
 +- SOX Resampler support in libswresample
 +- aselect filter
 +- SGI RLE 8-bit decoder
 +- Silicon Graphics Motion Video Compressor 1 & 2 decoder
 +- Silicon Graphics Movie demuxer
 +- apad filter
 +- Resolution & pixel format change support with multithreading for H.264
 +- documentation split into per-component manuals
 +- pp (postproc) filter ported from MPlayer
 +- NIST Sphere demuxer
 +- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders
 +- Sony Wave64 muxer
 +- adobe and limelight publisher authentication in RTMP
 +- data: URI scheme
  - support building on the Plan 9 operating system
 -- ffv1: support version 1.3
 +- kerndeint filter ported from MPlayer
 +- histeq filter ported from VirtualDub
 +- Megalux Frame demuxer
 +- 012v decoder
 +- Improved AVC Intra decoding support
  
  
 -version 9_beta1:
 +version 1.0:
  
 -- XWD encoder and decoder
 -- Support for fragmentation in the mov/mp4 muxer
 -- ISMV (Smooth Streaming) muxer
 -- CDXL demuxer and decoder
 -- Apple ProRes encoder
 -- Sun Rasterfile Encoder
 -- remove libpostproc
 -- ID3v2 attached pictures reading and writing
 -- WMA Lossless decoder
 -- XBM encoder
 -- RealAudio Lossless decoder
 -- ZeroCodec decoder
 -- drop support for avconv without libavfilter
 -- add libavresample audio conversion library
 -- audio filters support in libavfilter and avconv
 -- add fps filter
 -- audio split filter
 -- audio mix filter
 -- avprobe output is now standard INI or JSON. The old format can still
 -  be used with -of old.
 +- INI and flat output in ffprobe
 +- Scene detection in libavfilter
  - Indeo Audio decoder
  - channelsplit audio filter
 +- setnsamples audio filter
 +- atempo filter
 +- ffprobe -show_data option
  - RTMPT protocol support
  - iLBC encoding/decoding via libilbc
  - Microsoft Screen 1 decoder
@@@ -492,17 -427,17 +492,17 @@@ following image formats are supported
  @item Alias PIX    @tab X @tab X
      @tab Alias/Wavefront PIX image format
  @item animated GIF @tab X @tab X
 -    @tab Only uncompressed GIFs are generated.
  @item BMP          @tab X @tab X
      @tab Microsoft BMP image
- @item PIX          @tab   @tab X
-     @tab PIX is an image format used in the Argonaut BRender engine.
+ @item BRender PIX  @tab   @tab X
+     @tab Argonaut BRender 3D engine image format.
  @item DPX          @tab X @tab X
      @tab Digital Picture Exchange
 +@item EXR          @tab   @tab X
 +    @tab OpenEXR
  @item JPEG         @tab X @tab X
      @tab Progressive JPEG is not supported.
 -@item JPEG 2000    @tab E @tab X
 -    @tab encoding supported through external library libopenjpeg
 +@item JPEG 2000    @tab X @tab X
  @item JPEG-LS      @tab X @tab X
  @item LJPEG        @tab X @tab
      @tab Lossless JPEG
Simple merge
@@@ -280,42 -278,14 +280,43 @@@ enum AVCodecID 
      AV_CODEC_ID_MSS2,
      AV_CODEC_ID_VP9,
      AV_CODEC_ID_AIC,
 -    AV_CODEC_ID_ESCAPE130,
 -    AV_CODEC_ID_G2M,
 -    AV_CODEC_ID_WEBP,
 +    AV_CODEC_ID_ESCAPE130_DEPRECATED,
 +    AV_CODEC_ID_G2M_DEPRECATED,
 +    AV_CODEC_ID_WEBP_DEPRECATED,
      AV_CODEC_ID_HNM4_VIDEO,
 -    AV_CODEC_ID_HEVC,
 +    AV_CODEC_ID_HEVC_DEPRECATED,
      AV_CODEC_ID_FIC,
      AV_CODEC_ID_ALIAS_PIX,
 -    AV_CODEC_ID_BRENDER_PIX,
++    AV_CODEC_ID_BRENDER_PIX_DEPRECATED,
 +
 +    AV_CODEC_ID_BRENDER_PIX= MKBETAG('B','P','I','X'),
 +    AV_CODEC_ID_Y41P       = MKBETAG('Y','4','1','P'),
 +    AV_CODEC_ID_ESCAPE130  = MKBETAG('E','1','3','0'),
 +    AV_CODEC_ID_EXR        = MKBETAG('0','E','X','R'),
 +    AV_CODEC_ID_AVRP       = MKBETAG('A','V','R','P'),
 +
 +    AV_CODEC_ID_012V       = MKBETAG('0','1','2','V'),
 +    AV_CODEC_ID_G2M        = MKBETAG( 0 ,'G','2','M'),
 +    AV_CODEC_ID_AVUI       = MKBETAG('A','V','U','I'),
 +    AV_CODEC_ID_AYUV       = MKBETAG('A','Y','U','V'),
 +    AV_CODEC_ID_TARGA_Y216 = MKBETAG('T','2','1','6'),
 +    AV_CODEC_ID_V308       = MKBETAG('V','3','0','8'),
 +    AV_CODEC_ID_V408       = MKBETAG('V','4','0','8'),
 +    AV_CODEC_ID_YUV4       = MKBETAG('Y','U','V','4'),
 +    AV_CODEC_ID_SANM       = MKBETAG('S','A','N','M'),
 +    AV_CODEC_ID_PAF_VIDEO  = MKBETAG('P','A','F','V'),
 +    AV_CODEC_ID_AVRN       = MKBETAG('A','V','R','n'),
 +    AV_CODEC_ID_CPIA       = MKBETAG('C','P','I','A'),
 +    AV_CODEC_ID_XFACE      = MKBETAG('X','F','A','C'),
 +    AV_CODEC_ID_SGIRLE     = MKBETAG('S','G','I','R'),
 +    AV_CODEC_ID_MVC1       = MKBETAG('M','V','C','1'),
 +    AV_CODEC_ID_MVC2       = MKBETAG('M','V','C','2'),
 +    AV_CODEC_ID_SNOW       = MKBETAG('S','N','O','W'),
 +    AV_CODEC_ID_WEBP       = MKBETAG('W','E','B','P'),
 +    AV_CODEC_ID_SMVJPEG    = MKBETAG('S','M','V','J'),
 +    AV_CODEC_ID_HEVC       = MKBETAG('H','2','6','5'),
 +#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
 +    AV_CODEC_ID_VP7        = MKBETAG('V','P','7','0'),
  
      /* various PCM "codecs" */
      AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
index 0000000,0c08f8d..51eaefd
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,294 +1,292 @@@
 - * This file is part of Libav.
+ /*
+  * BRender PIX (.pix) image decoder
+  * Copyright (c) 2012 Aleksi Nurmi
+  *
 - * 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
 -    case 7: // XRGB
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ /* Tested against samples from I-War / Independence War and Defiance. */
+ #include "libavutil/imgutils.h"
+ #include "avcodec.h"
+ #include "bytestream.h"
+ #include "internal.h"
+ #define HEADER1_CHUNK    0x03
+ #define HEADER2_CHUNK    0x3D
+ #define IMAGE_DATA_CHUNK 0x21
+ /* In 8-bit colour mode, 256 colours are available at any time. Which 256
+  * colours are available is determined by the contents of the hardware palette
+  * (or CLUT). In this case, the palette supplied with BRender (std.pal) has
+  * been loaded into the CLUT.
+  *
+  * The 256 colours in std.pal are divided into seven ranges, or `colour ramps'.
+  * The first 64 colours represent shades of grey ranging from very dark grey
+  * (black) to very light grey (white). The following colours are 32-element
+  * ramps for six colours as shown below.
+  */
+ static const uint32_t std_pal_table[256] = {
+     // gray
+     0xFF000000, 0xFF030303, 0xFF060606, 0xFF090909, 0xFF0C0C0C, 0xFF0F0F0F,
+     0xFF121212, 0xFF151515, 0xFF181818, 0xFF1B1B1B, 0xFF1E1E1E, 0xFF212121,
+     0xFF242424, 0xFF272727, 0xFF2A2A2A, 0xFF2D2D2D, 0xFF313131, 0xFF343434,
+     0xFF373737, 0xFF3A3A3A, 0xFF3D3D3D, 0xFF404040, 0xFF434343, 0xFF464646,
+     0xFF494949, 0xFF4C4C4C, 0xFF4F4F4F, 0xFF525252, 0xFF555555, 0xFF585858,
+     0xFF5B5B5B, 0xFF5E5E5E, 0xFF626262, 0xFF656565, 0xFF686868, 0xFF6B6B6B,
+     0xFF6E6E6E, 0xFF717171, 0xFF747474, 0xFF777777, 0xFF7A7A7A, 0xFF7D7D7D,
+     0xFF808080, 0xFF838383, 0xFF868686, 0xFF898989, 0xFF8C8C8C, 0xFF8F8F8F,
+     0xFF939393, 0xFF999999, 0xFFA0A0A0, 0xFFA7A7A7, 0xFFAEAEAE, 0xFFB4B4B4,
+     0xFFBBBBBB, 0xFFC2C2C2, 0xFFC9C9C9, 0xFFCFCFCF, 0xFFD6D6D6, 0xFFDDDDDD,
+     0xFFE4E4E4, 0xFFEAEAEA, 0xFFF1F1F1, 0xFFF8F8F8,
+     // blue
+     0xFF000000, 0xFF020209, 0xFF050513, 0xFF07071D, 0xFF0A0A27, 0xFF0C0C31,
+     0xFF0F0F3B, 0xFF111145, 0xFF14144F, 0xFF161659, 0xFF181863, 0xFF1B1B6D,
+     0xFF1E1E77, 0xFF202080, 0xFF22228A, 0xFF252594, 0xFF28289E, 0xFF2A2AA8,
+     0xFF2D2DB2, 0xFF2F2FBC, 0xFF3131C6, 0xFF3434D0, 0xFF3737DA, 0xFF3939E4,
+     0xFF3C3CEE, 0xFF5454F0, 0xFF6C6CF2, 0xFF8585F4, 0xFF9D9DF6, 0xFFB5B5F8,
+     0xFFCECEFA, 0xFFE6E6FC,
+     // green
+     0xFF000000, 0xFF020902, 0xFF051305, 0xFF071D07, 0xFF0A270A, 0xFF0C310C,
+     0xFF0F3B0F, 0xFF114511, 0xFF144F14, 0xFF165916, 0xFF186318, 0xFF1B6D1B,
+     0xFF1E771E, 0xFF208020, 0xFF228A22, 0xFF259425, 0xFF289E28, 0xFF2AA82A,
+     0xFF2DB22D, 0xFF2FBC2F, 0xFF31C631, 0xFF34D034, 0xFF37DA37, 0xFF39E439,
+     0xFF3CEE3C, 0xFF54F054, 0xFF6CF26C, 0xFF85F485, 0xFF9DF69D, 0xFFB5F8B5,
+     0xFFCEFACE, 0xFFE6FCE6,
+     // cyan
+     0xFF000000, 0xFF020909, 0xFF051313, 0xFF071D1D, 0xFF0A2727, 0xFF0C3131,
+     0xFF0F3B3B, 0xFF114545, 0xFF144F4F, 0xFF165959, 0xFF186363, 0xFF1B6D6D,
+     0xFF1E7777, 0xFF208080, 0xFF228A8A, 0xFF259494, 0xFF289E9E, 0xFF2AA8A8,
+     0xFF2DB2B2, 0xFF2FBCBC, 0xFF31C6C6, 0xFF34D0D0, 0xFF37DADA, 0xFF39E4E4,
+     0xFF3CEEEE, 0xFF54F0F0, 0xFF6CF2F2, 0xFF85F4F4, 0xFF9DF6F6, 0xFFB5F8F8,
+     0xFFCEFAFA, 0xFFE6FCFC,
+     // red
+     0xFF000000, 0xFF090202, 0xFF130505, 0xFF1D0707, 0xFF270A0A, 0xFF310C0C,
+     0xFF3B0F0F, 0xFF451111, 0xFF4F1414, 0xFF591616, 0xFF631818, 0xFF6D1B1B,
+     0xFF771E1E, 0xFF802020, 0xFF8A2222, 0xFF942525, 0xFF9E2828, 0xFFA82A2A,
+     0xFFB22D2D, 0xFFBC2F2F, 0xFFC63131, 0xFFD03434, 0xFFDA3737, 0xFFE43939,
+     0xFFEE3C3C, 0xFFF05454, 0xFFF26C6C, 0xFFF48585, 0xFFF69D9D, 0xFFF8B5B5,
+     0xFFFACECE, 0xFFFCE6E6,
+     // magenta
+     0xFF000000, 0xFF090209, 0xFF130513, 0xFF1D071D, 0xFF270A27, 0xFF310C31,
+     0xFF3B0F3B, 0xFF451145, 0xFF4F144F, 0xFF591659, 0xFF631863, 0xFF6D1B6D,
+     0xFF771E77, 0xFF802080, 0xFF8A228A, 0xFF942594, 0xFF9E289E, 0xFFA82AA8,
+     0xFFB22DB2, 0xFFBC2FBC, 0xFFC631C6, 0xFFD034D0, 0xFFDA37DA, 0xFFE439E4,
+     0xFFEE3CEE, 0xFFF054F0, 0xFFF26CF2, 0xFFF485F4, 0xFFF69DF6, 0xFFF8B5F8,
+     0xFFFACEFA, 0xFFFCE6FC,
+     // yellow
+     0xFF000000, 0xFF090902, 0xFF131305, 0xFF1D1D07, 0xFF27270A, 0xFF31310C,
+     0xFF3B3B0F, 0xFF454511, 0xFF4F4F14, 0xFF595916, 0xFF636318, 0xFF6D6D1B,
+     0xFF77771E, 0xFF808020, 0xFF8A8A22, 0xFF949425, 0xFF9E9E28, 0xFFA8A82A,
+     0xFFB2B22D, 0xFFBCBC2F, 0xFFC6C631, 0xFFD0D034, 0xFFDADA37, 0xFFE4E439,
+     0xFFEEEE3C, 0xFFF0F054, 0xFFF2F26C, 0xFFF4F485, 0xFFF6F69D, 0xFFF8F8B5,
+     0xFFFAFACE, 0xFFFCFCE6,
+ };
+ typedef struct PixHeader {
+     int width;
+     int height;
+     int format;
+ } PixHeader;
+ static int pix_decode_header(PixHeader *out, GetByteContext *pgb)
+ {
+     unsigned int header_len = bytestream2_get_be32(pgb);
+     out->format = bytestream2_get_byte(pgb);
+     bytestream2_skip(pgb, 2);
+     out->width  = bytestream2_get_be16(pgb);
+     out->height = bytestream2_get_be16(pgb);
+     // the header is at least 11 bytes long; we read the first 7
+     if (header_len < 11)
+         return AVERROR_INVALIDDATA;
+     // skip the rest of the header
+     bytestream2_skip(pgb, header_len - 7);
+     return 0;
+ }
+ static int pix_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
+                             AVPacket *avpkt)
+ {
+     AVFrame *frame = data;
+     int ret, i, j;
+     GetByteContext gb;
+     unsigned int bytes_pp;
+     unsigned int magic[4];
+     unsigned int chunk_type;
+     unsigned int data_len;
+     unsigned int bytes_per_scanline;
++    unsigned int bytes_left;
+     PixHeader hdr;
+     bytestream2_init(&gb, avpkt->data, avpkt->size);
+     magic[0] = bytestream2_get_be32(&gb);
+     magic[1] = bytestream2_get_be32(&gb);
+     magic[2] = bytestream2_get_be32(&gb);
+     magic[3] = bytestream2_get_be32(&gb);
+     if (magic[0] != 0x12 ||
+         magic[1] != 0x08 ||
+         magic[2] != 0x02 ||
+         magic[3] != 0x02) {
+         av_log(avctx, AV_LOG_ERROR, "Not a BRender PIX file.\n");
+         return AVERROR_INVALIDDATA;
+     }
+     chunk_type = bytestream2_get_be32(&gb);
+     if (chunk_type != HEADER1_CHUNK && chunk_type != HEADER2_CHUNK) {
+         av_log(avctx, AV_LOG_ERROR, "Invalid chunk type %d.\n", chunk_type);
+         return AVERROR_INVALIDDATA;
+     }
+     ret = pix_decode_header(&hdr, &gb);
+     if (ret < 0) {
+         av_log(avctx, AV_LOG_ERROR, "Invalid header length.\n");
+         return AVERROR_INVALIDDATA;
+     }
+     switch (hdr.format) {
+     case 3:
+         avctx->pix_fmt = AV_PIX_FMT_PAL8;
+         bytes_pp = 1;
+         break;
+     case 4:
+         avctx->pix_fmt = AV_PIX_FMT_RGB555BE;
+         bytes_pp = 2;
+         break;
+     case 5:
+         avctx->pix_fmt = AV_PIX_FMT_RGB565BE;
+         bytes_pp = 2;
+         break;
+     case 6:
+         avctx->pix_fmt = AV_PIX_FMT_RGB24;
+         bytes_pp = 3;
+         break;
 -        if (chunk_type != IMAGE_DATA_CHUNK ||
 -            bytestream2_get_bytes_left(&gb) < data_len) {
++    case 7:
++        avctx->pix_fmt = AV_PIX_FMT_0RGB;
++        bytes_pp = 4;
++        break;
+     case 8: // ARGB
+         avctx->pix_fmt = AV_PIX_FMT_ARGB;
+         bytes_pp = 4;
+         break;
+     case 18:
+         avctx->pix_fmt = AV_PIX_FMT_Y400A;
+         bytes_pp = 2;
+         break;
+     default:
+         avpriv_request_sample(avctx, "Format %d", hdr.format);
+         return AVERROR_PATCHWELCOME;
+     }
+     if ((ret = ff_set_dimensions(avctx, hdr.width, hdr.height)) < 0)
+         return ret;
+     if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
+         return ret;
+     chunk_type = bytestream2_get_be32(&gb);
+     if (avctx->pix_fmt == AV_PIX_FMT_PAL8 &&
+         (chunk_type == HEADER1_CHUNK ||
+          chunk_type == HEADER2_CHUNK)) {
+         /* read palette data from data[1] */
+         PixHeader palhdr;
+         uint32_t *pal_out = (uint32_t *)frame->data[1];
+         ret = pix_decode_header(&palhdr, &gb);
+         if (ret < 0) {
+             av_log(avctx, AV_LOG_ERROR, "Invalid palette header length.\n");
+             return AVERROR_INVALIDDATA;
+         }
+         if (palhdr.format != 7)
+             avpriv_request_sample(avctx, "Palette not in RGB format");
+         chunk_type = bytestream2_get_be32(&gb);
+         data_len = bytestream2_get_be32(&gb);
 -
++        bytestream2_skip(&gb, 8);
++        if (chunk_type != IMAGE_DATA_CHUNK || data_len != 1032 ||
++            bytestream2_get_bytes_left(&gb) < 1032) {
+             av_log(avctx, AV_LOG_ERROR, "Invalid palette data.\n");
+             return AVERROR_INVALIDDATA;
+         }
 -        bytestream2_skip(&gb, 8);
 -        // convert to machine endian format (ARGB)
+         // palette data is surrounded by 8 null bytes (both top and bottom)
 -    if (chunk_type != IMAGE_DATA_CHUNK ||
 -        data_len < bytes_per_scanline * hdr.height ||
 -        bytestream2_get_bytes_left(&gb) < data_len) {
++        // convert 0RGB to machine endian format (ARGB32)
+         for (i = 0; i < 256; ++i)
+             *pal_out++ = (0xFFU << 24) | bytestream2_get_be32u(&gb);
+         bytestream2_skip(&gb, 8);
+         frame->palette_has_changed = 1;
+         chunk_type = bytestream2_get_be32(&gb);
+     } else if (avctx->pix_fmt == AV_PIX_FMT_PAL8) {
+         /* no palette supplied, use the default one */
+         uint32_t *pal_out = (uint32_t *)frame->data[1];
+         // TODO: add an AVOption to load custom palette files
+         av_log(avctx, AV_LOG_WARNING,
+                "Using default palette, colors might be off.\n");
+         memcpy(pal_out, std_pal_table, sizeof(uint32_t) * 256);
+         frame->palette_has_changed = 1;
+     }
+     data_len = bytestream2_get_be32(&gb);
+     bytestream2_skip(&gb, 8);
+     // read the image data to the buffer
+     bytes_per_scanline = bytes_pp * hdr.width;
 -    // make alpha opaque for XRGB
 -    if (hdr.format == 7)
 -        for (j = 0; j < frame->height; j++)
 -            for (i = 0; i < frame->linesize[0]; i += 4)
 -                frame->data[0][j * frame->linesize[0] + i] = 0xFF;
 -
++    bytes_left = bytestream2_get_bytes_left(&gb);
++
++    if (chunk_type != IMAGE_DATA_CHUNK || data_len != bytes_left ||
++        bytes_left / bytes_per_scanline < hdr.height) {
+         av_log(avctx, AV_LOG_ERROR, "Invalid image data.\n");
+         return AVERROR_INVALIDDATA;
+     }
+     av_image_copy_plane(frame->data[0], frame->linesize[0],
+                         avpkt->data + bytestream2_tell(&gb),
+                         bytes_per_scanline,
+                         bytes_per_scanline, hdr.height);
+     frame->pict_type = AV_PICTURE_TYPE_I;
+     frame->key_frame = 1;
+     *got_frame = 1;
+     return avpkt->size;
+ }
+ AVCodec ff_brender_pix_decoder = {
+     .name         = "brender_pix",
+     .long_name    = NULL_IF_CONFIG_SMALL("BRender PIX image"),
+     .type         = AVMEDIA_TYPE_VIDEO,
+     .id           = AV_CODEC_ID_BRENDER_PIX,
+     .decode       = pix_decode_frame,
+     .capabilities = CODEC_CAP_DR1,
+ };
@@@ -1103,117 -1065,6 +1103,110 @@@ static const AVCodecDescriptor codec_de
          .props     = AV_CODEC_PROP_LOSSY,
      },
      {
-         .id        = AV_CODEC_ID_BRENDER_PIX,
-         .type      = AVMEDIA_TYPE_VIDEO,
-         .name      = "brender_pix",
-         .long_name = NULL_IF_CONFIG_SMALL("BRender PIX image"),
-         .props     = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS,
-     },
-     {
 +        .id        = AV_CODEC_ID_EXR,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "exr",
 +        .long_name = NULL_IF_CONFIG_SMALL("OpenEXR image"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY |
 +                     AV_CODEC_PROP_LOSSLESS,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_AVRP,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "avrp",
 +        .long_name = NULL_IF_CONFIG_SMALL("Avid 1:1 10-bit RGB Packer"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_012V,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "012v",
 +        .long_name = NULL_IF_CONFIG_SMALL("Uncompressed 4:2:2 10-bit"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_AVUI,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "avui",
 +        .long_name = NULL_IF_CONFIG_SMALL("Avid Meridien Uncompressed"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_AYUV,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "ayuv",
 +        .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed MS 4:4:4:4"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_TARGA_Y216,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "targa_y216",
 +        .long_name = NULL_IF_CONFIG_SMALL("Pinnacle TARGA CineWave YUV16"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_V308,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "v308",
 +        .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed 4:4:4"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_V408,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "v408",
 +        .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed QT 4:4:4:4"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_YUV4,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "yuv4",
 +        .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed 4:2:0"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_SANM,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "sanm",
 +        .long_name = NULL_IF_CONFIG_SMALL("LucasArts SMUSH video"),
 +        .props     = AV_CODEC_PROP_LOSSY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_PAF_VIDEO,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "paf_video",
 +        .long_name = NULL_IF_CONFIG_SMALL("Amazing Studio Packed Animation File Video"),
 +        .props     = AV_CODEC_PROP_LOSSY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_AVRN,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "avrn",
 +        .long_name = NULL_IF_CONFIG_SMALL("Avid AVI Codec"),
 +    },
 +    {
 +        .id        = AV_CODEC_ID_CPIA,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "cpia",
 +        .long_name = NULL_IF_CONFIG_SMALL("CPiA video format"),
 +    },
 +    {
 +        .id        = AV_CODEC_ID_XFACE,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "xface",
 +        .long_name = NULL_IF_CONFIG_SMALL("X-face image"),
 +        .props     = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY,
 +    },
 +    {
 +        .id        = AV_CODEC_ID_SMVJPEG,
 +        .type      = AVMEDIA_TYPE_VIDEO,
 +        .name      = "smv",
 +        .long_name = NULL_IF_CONFIG_SMALL("Sigmatel Motion Video"),
 +    },
 +
 +    {
          .id        = AV_CODEC_ID_G2M,
          .type      = AVMEDIA_TYPE_VIDEO,
          .name      = "g2m",
@@@ -2669,24 -1663,6 +2669,25 @@@ av_cold int avcodec_close(AVCodecContex
      return 0;
  }
  
 +static enum AVCodecID remap_deprecated_codec_id(enum AVCodecID id)
 +{
 +    switch(id){
 +        //This is for future deprecatec codec ids, its empty since
 +        //last major bump but will fill up again over time, please don't remove it
 +//         case AV_CODEC_ID_UTVIDEO_DEPRECATED: return AV_CODEC_ID_UTVIDEO;
++        case AV_CODEC_ID_BRENDER_PIX_DEPRECATED: return AV_CODEC_ID_BRENDER_PIX;
 +        case AV_CODEC_ID_OPUS_DEPRECATED: return AV_CODEC_ID_OPUS;
 +        case AV_CODEC_ID_TAK_DEPRECATED : return AV_CODEC_ID_TAK;
 +        case AV_CODEC_ID_PCM_S24LE_PLANAR_DEPRECATED : return AV_CODEC_ID_PCM_S24LE_PLANAR;
 +        case AV_CODEC_ID_PCM_S32LE_PLANAR_DEPRECATED : return AV_CODEC_ID_PCM_S32LE_PLANAR;
 +        case AV_CODEC_ID_ESCAPE130_DEPRECATED : return AV_CODEC_ID_ESCAPE130;
 +        case AV_CODEC_ID_G2M_DEPRECATED : return AV_CODEC_ID_G2M;
 +        case AV_CODEC_ID_WEBP_DEPRECATED: return AV_CODEC_ID_WEBP;
 +        case AV_CODEC_ID_HEVC_DEPRECATED: return AV_CODEC_ID_HEVC;
 +        default                         : return id;
 +    }
 +}
 +
  static AVCodec *find_encdec(enum AVCodecID id, int encoder)
  {
      AVCodec *p, *experimental = NULL;
@@@ -29,8 -29,8 +29,8 @@@
  #include "libavutil/version.h"
  
  #define LIBAVCODEC_VERSION_MAJOR 55
 -#define LIBAVCODEC_VERSION_MINOR 38
 -#define LIBAVCODEC_VERSION_MICRO  0
 +#define LIBAVCODEC_VERSION_MINOR  55
- #define LIBAVCODEC_VERSION_MICRO 100
++#define LIBAVCODEC_VERSION_MICRO 101
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
Simple merge