Merge commit '678082b409aca711f9cf991df6b0200116489322'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 28 Mar 2014 04:23:46 +0000 (05:23 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 28 Mar 2014 04:26:24 +0000 (05:26 +0100)
* commit '678082b409aca711f9cf991df6b0200116489322':
  X-Bitmap decoder

Conflicts:
Changelog
libavcodec/Makefile
libavcodec/allcodecs.c
libavcodec/version.h
libavcodec/xbmdec.c

See: a0340dfbd78df7639715056937011d2d414aaeed
Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
libavcodec/version.h
libavcodec/xbmdec.c

diff --cc Changelog
+++ b/Changelog
@@@ -2,259 -2,123 +2,260 @@@ 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
 -- Amazing Studio PAF playback support
 -- XBM decoder
 +- Improvments to the BRender PIX image decoder
++- Improvments to the XBM 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
@@@ -29,8 -29,8 +29,8 @@@
  #include "libavutil/version.h"
  
  #define LIBAVCODEC_VERSION_MAJOR 55
 -#define LIBAVCODEC_VERSION_MINOR 40
 -#define LIBAVCODEC_VERSION_MICRO  0
 +#define LIBAVCODEC_VERSION_MINOR  55
- #define LIBAVCODEC_VERSION_MICRO 102
++#define LIBAVCODEC_VERSION_MICRO 103
  
  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
                                                 LIBAVCODEC_VERSION_MINOR, \
  #include "avcodec.h"
  #include "internal.h"
  #include "mathops.h"
- #include "libavutil/avstring.h"
- static av_cold int xbm_decode_init(AVCodecContext *avctx)
- {
-     avctx->pix_fmt = AV_PIX_FMT_MONOWHITE;
-     return 0;
- }
  
 +static int convert(uint8_t x)
 +{
 +    if (x >= 'a')
 +        x -= 87;
 +    else if (x >= 'A')
 +        x -= 55;
 +    else
 +        x -= '0';
 +    return x;
 +}
 +
  static int xbm_decode_frame(AVCodecContext *avctx, void *data,
                              int *got_frame, AVPacket *avpkt)
  {
      AVFrame *p = data;
 -    int ret, linesize, i;
++    int ret, linesize, i, j;
+     int width  = 0;
+     int height = 0;
 -    const uint8_t *ptr = avpkt->data;
 +    const uint8_t *end, *ptr = avpkt->data;
      uint8_t *dst;
-     int ret, linesize, i, j;
  
-     while (!avctx->width || !avctx->height) {
+     avctx->pix_fmt = AV_PIX_FMT_MONOWHITE;
 +    end = avpkt->data + avpkt->size;
+     while (!width || !height) {
 +        char name[256];
 +        int number, len;
 +
          ptr += strcspn(ptr, "#");
 -        if (strncmp(ptr, "#define", 7) != 0) {
 -            av_log(avctx, AV_LOG_ERROR,
 -                   "Unexpected preprocessor directive.\n");
+         if (ptr >= avpkt->data + avpkt->size) {
+             av_log(avctx, AV_LOG_ERROR, "End of file reached.\n");
+             return AVERROR_INVALIDDATA;
+         }
 +        if (sscanf(ptr, "#define %255s %u", name, &number) != 2) {
 +            av_log(avctx, AV_LOG_ERROR, "Unexpected preprocessor directive\n");
              return AVERROR_INVALIDDATA;
          }
 -        // skip the name
 -        ptr += strcspn(ptr, "_") + 1;
 -        // get width or height
 -        if (strncmp(ptr, "width", 5) == 0) {
 -            ptr += strcspn(ptr, " ");
 -            width = strtol(ptr, NULL, 10);
 -        } else if (strncmp(ptr, "height", 6) == 0) {
 -            ptr += strcspn(ptr, " ");
 -            height = strtol(ptr, NULL, 10);
 +
 +        len = strlen(name);
-         if ((len > 6) && !avctx->height && !memcmp(name + len - 7, "_height", 7)) {
-                 avctx->height = number;
-         } else if ((len > 5) && !avctx->width && !memcmp(name + len - 6, "_width", 6)) {
-                 avctx->width = number;
++        if ((len > 6) && !height && !memcmp(name + len - 7, "_height", 7)) {
++            height = number;
++        } else if ((len > 5) && !width && !memcmp(name + len - 6, "_width", 6)) {
++            width = number;
          } else {
-             av_log(avctx, AV_LOG_ERROR, "Unknown define '%s'\n", name);
-             return AVERROR_INVALIDDATA;
 -            // skip offset and unknown variables
 -            av_log(avctx, AV_LOG_VERBOSE,
 -                   "Ignoring preprocessor directive.\n");
++            av_log(avctx, AV_LOG_WARNING, "Unknown define '%s'\n", name);
          }
 +        ptr += strcspn(ptr, "\n\r") + 1;
      }
  
+     if ((ret = ff_set_dimensions(avctx, width, height)) < 0)
+         return ret;
      if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
          return ret;
  
  
      linesize = (avctx->width + 7) / 8;
      for (i = 0; i < avctx->height; i++) {
 -        int eol = 0, e = 0;
          dst = p->data[0] + i * p->linesize[0];
 -        if (ptr >= avpkt->data + avpkt->size) {
 -            av_log(avctx, AV_LOG_ERROR, "End of file reached.\n");
 -            return AVERROR_INVALIDDATA;
 -        }
 -        do {
 -            int val;
 -            uint8_t *endptr;
 -
 -            ptr += strcspn(ptr, "x") - 1; // -1 to get 0x
 -            val = strtol(ptr, (char **)&endptr, 16);
 +        for (j = 0; j < linesize; j++) {
 +            uint8_t val;
  
 -            if (endptr - ptr == 4) {
 -                // XBM X11 format
 +            ptr += strcspn(ptr, "x") + 1;
 +            if (ptr < end && av_isxdigit(*ptr)) {
 +                val = convert(*ptr);
 +                ptr++;
 +                if (av_isxdigit(*ptr))
 +                    val = (val << 4) + convert(*ptr);
                  *dst++ = ff_reverse[val];
 -                eol = linesize;
 -            } else if (endptr - ptr == 6) {
 -                // XBM X10 format
 -                *dst++ = ff_reverse[val >> 8];
 -                *dst++ = ff_reverse[val & 0xFF];
 -                eol = linesize / 2; // 2 bytes read
              } else {
-                 av_log(avctx, AV_LOG_ERROR, "Unexpected data at '%.8s'\n", ptr);
+                 av_log(avctx, AV_LOG_ERROR,
+                        "Unexpected data at %.8s.\n", ptr);
                  return AVERROR_INVALIDDATA;
              }
 -            ptr = endptr;
 -        } while (++e < eol);
 +        }
      }
  
      p->key_frame = 1;