Merge commit '2d2d6a4883479403798f4ed46941d5b365823570'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 29 May 2013 08:19:20 +0000 (10:19 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 29 May 2013 08:40:42 +0000 (10:40 +0200)
* commit '2d2d6a4883479403798f4ed46941d5b365823570':
  lavf: add a raw WavPack muxer.
  apetag: add support for writing APE tags
  matroskaenc: support muxing WavPack

Conflicts:
libavformat/Makefile
libavformat/allformats.c
libavformat/apetag.h
libavformat/version.h
libavformat/wvenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
Changelog
libavformat/Makefile
libavformat/apetag.c
libavformat/apetag.h
libavformat/matroskaenc.c
libavformat/version.h
libavformat/wvenc.c
tests/Makefile
tests/fate/wavpack.mak

diff --cc Changelog
+++ b/Changelog
  Entries are sorted chronologically from oldest to youngest within each release,
  releases are sorted from youngest to oldest.
  
 -version 10:
 -- av_strnstr
 -- support ID3v2 tags in ASF files
 +version <next>:
 +- 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
 -- new 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
 +- new 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
  - new interlace filter
 -- JPEG 2000 decoder
 -- new asetpts filter (same as setpts, but for audio)
 -- new trim and atrim filters
 -- avconv -t and -ss (output-only) options are now sample-accurate when
 +- 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
 +- 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)
  
  
 -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
 -
 -
 -version 9_beta3:
 -- ashowinfo audio filter
 +- 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:
 +
 +- 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
@@@ -195,11 -160,8 +195,11 @@@ OBJS-$(CONFIG_MATROSKA_DEMUXER
                                              isom.o rmsipr.o
  OBJS-$(CONFIG_MATROSKA_MUXER)            += matroskaenc.o matroska.o \
                                              isom.o avc.o \
-                                             flacenc_header.o avlanguage.o
+                                             flacenc_header.o avlanguage.o wv.o
  OBJS-$(CONFIG_MD5_MUXER)                 += md5enc.o
 +OBJS-$(CONFIG_MGSTS_DEMUXER)             += mgsts.o
 +OBJS-$(CONFIG_MICRODVD_DEMUXER)          += microdvddec.o subtitles.o
 +OBJS-$(CONFIG_MICRODVD_MUXER)            += microdvdenc.o
  OBJS-$(CONFIG_MJPEG_DEMUXER)             += rawdec.o
  OBJS-$(CONFIG_MJPEG_MUXER)               += rawenc.o
  OBJS-$(CONFIG_MLP_DEMUXER)               += rawdec.o
@@@ -392,16 -330,13 +392,16 @@@ OBJS-$(CONFIG_WC3_DEMUXER
  OBJS-$(CONFIG_WEBM_MUXER)                += matroskaenc.o matroska.o \
                                              isom.o avc.o \
                                              flacenc_header.o avlanguage.o
 +OBJS-$(CONFIG_WEBVTT_DEMUXER)            += webvttdec.o subtitles.o
  OBJS-$(CONFIG_WSAUD_DEMUXER)             += westwood_aud.o
  OBJS-$(CONFIG_WSVQA_DEMUXER)             += westwood_vqa.o
 -OBJS-$(CONFIG_WTV_DEMUXER)               += wtv.o asfdec.o asf.o asfcrypt.o \
 +OBJS-$(CONFIG_WTV_DEMUXER)               += wtvdec.o wtv.o asfdec.o asf.o asfcrypt.o \
                                              avlanguage.o mpegts.o isom.o
 +OBJS-$(CONFIG_WTV_MUXER)                 += wtvenc.o wtv.o asf.o asfenc.o
  OBJS-$(CONFIG_WV_DEMUXER)                += wvdec.o wv.o apetag.o img2.o
- OBJS-$(CONFIG_WV_MUXER)                  += wvenc.o apetagenc.o
+ OBJS-$(CONFIG_WV_MUXER)                  += wvenc.o wv.o apetag.o
  OBJS-$(CONFIG_XA_DEMUXER)                += xa.o
 +OBJS-$(CONFIG_XBIN_DEMUXER)              += bintext.o sauce.o
  OBJS-$(CONFIG_XMV_DEMUXER)               += xmv.o
  OBJS-$(CONFIG_XWMA_DEMUXER)              += xwma.o
  OBJS-$(CONFIG_YOP_DEMUXER)               += yop.o
  #include "apetag.h"
  #include "internal.h"
  
 -#define APE_TAG_VERSION               2000
 -#define APE_TAG_FOOTER_BYTES          32
  #define APE_TAG_FLAG_CONTAINS_HEADER  (1 << 31)
+ #define APE_TAG_FLAG_CONTAINS_FOOTER  (1 << 30)
  #define APE_TAG_FLAG_IS_HEADER        (1 << 29)
  #define APE_TAG_FLAG_IS_BINARY        (1 << 1)
  
Simple merge
@@@ -1135,8 -1065,60 +1147,61 @@@ static int mkv_write_ass_blocks(AVForma
  
      return max_duration;
  }
 +#endif
  
+ static int mkv_strip_wavpack(const uint8_t *src, uint8_t **pdst, int *size)
+ {
+     uint8_t *dst;
+     int srclen = *size;
+     int offset = 0;
+     int ret;
+     dst = av_malloc(srclen);
+     if (!dst)
+         return AVERROR(ENOMEM);
+     while (srclen >= WV_HEADER_SIZE) {
+         WvHeader header;
+         ret = ff_wv_parse_header(&header, src);
+         if (ret < 0)
+             goto fail;
+         src    += WV_HEADER_SIZE;
+         srclen -= WV_HEADER_SIZE;
+         if (srclen < header.blocksize) {
+             ret = AVERROR_INVALIDDATA;
+             goto fail;
+         }
+         if (header.initial) {
+             AV_WL32(dst + offset, header.samples);
+             offset += 4;
+         }
+         AV_WL32(dst + offset,     header.flags);
+         AV_WL32(dst + offset + 4, header.crc);
+         offset += 8;
+         if (!(header.initial && header.final)) {
+             AV_WL32(dst + offset, header.blocksize);
+             offset += 4;
+         }
+         memcpy(dst + offset, src, header.blocksize);
+         src    += header.blocksize;
+         srclen -= header.blocksize;
+         offset += header.blocksize;
+     }
+     *pdst = dst;
+     *size = offset;
+     return 0;
+ fail:
+     av_freep(&dst);
+     return ret;
+ }
  static void mkv_write_block(AVFormatContext *s, AVIOContext *pb,
                              unsigned int blockid, AVPacket *pkt, int flags)
  {
@@@ -30,8 -30,8 +30,8 @@@
  #include "libavutil/avutil.h"
  
  #define LIBAVFORMAT_VERSION_MAJOR 55
- #define LIBAVFORMAT_VERSION_MINOR  7
 -#define LIBAVFORMAT_VERSION_MINOR  1
 -#define LIBAVFORMAT_VERSION_MICRO  0
++#define LIBAVFORMAT_VERSION_MINOR  8
 +#define LIBAVFORMAT_VERSION_MICRO 100
  
  #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
                                                 LIBAVFORMAT_VERSION_MINOR, \
@@@ -1,10 -1,7 +1,11 @@@
  /*
 - * This file is part of Libav.
 + * WavPack muxer
++ * Copyright (c) 2013 Kostya Shishkov <kostya.shishkov@gmail.com>
 + * Copyright (c) 2012 Paul B Mahol
   *
 - * Libav is free software; you can redistribute it and/or
 + * This file is part of FFmpeg.
 + *
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
- #include "libavutil/intreadwrite.h"
- #include "avformat.h"
- #include "internal.h"
++
+ #include "libavutil/attributes.h"
  #include "apetag.h"
+ #include "avformat.h"
+ #include "wv.h"
  
- typedef struct WVMuxContext {
+ typedef struct WvMuxContext {
      int64_t samples;
- } WVMuxContext;
+ } WvMuxContext;
  
- static int write_header(AVFormatContext *s)
+ static av_cold int wv_write_header(AVFormatContext *ctx)
  {
-     AVCodecContext *codec = s->streams[0]->codec;
-     if (s->nb_streams > 1) {
-         av_log(s, AV_LOG_ERROR, "only one stream is supported\n");
-         return AVERROR(EINVAL);
-     }
-     if (codec->codec_id != AV_CODEC_ID_WAVPACK) {
-         av_log(s, AV_LOG_ERROR, "unsupported codec\n");
+     if (ctx->nb_streams > 1 ||
+         ctx->streams[0]->codec->codec_id != AV_CODEC_ID_WAVPACK) {
+         av_log(ctx, AV_LOG_ERROR, "This muxer only supports a single WavPack stream.\n");
          return AVERROR(EINVAL);
      }
      return 0;
  }
  
diff --cc tests/Makefile
Simple merge
@@@ -88,5 -88,15 +88,15 @@@ FATE_WAVPACK-$(call DEMDEC, WV, WAVPACK
  FATE_WAVPACK-$(call DEMDEC, MATROSKA, WAVPACK) += fate-wavpack-matroskamode
  fate-wavpack-matroskamode: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/special/matroska_mode.mka -f s16le
  
 -fate-wavpack-matroska_mux-mono: REF = f471da7c71cd01d5fb81efb1d740504f
+ FATE_WAVPACK-$(call DEMMUX, WV, MATROSKA) += fate-wavpack-matroska_mux-mono
+ fate-wavpack-matroska_mux-mono: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/num_channels/mono_16bit_int.wv -c copy -flags +bitexact -f matroska
+ fate-wavpack-matroska_mux-mono: CMP = oneline
 -fate-wavpack-matroska_mux-61: REF = cbbd0ce7eabef52235bcdd2cb0690f24
++fate-wavpack-matroska_mux-mono: REF = 769c19bcd931d9e15f7d5aa7b390b0db
+ FATE_WAVPACK-$(call DEMMUX, WV, MATROSKA) += fate-wavpack-matroska_mux-61
+ fate-wavpack-matroska_mux-61: CMD = md5 -i $(TARGET_SAMPLES)/wavpack/num_channels/eva_2.22_6.1_16bit-partial.wv -c copy -flags +bitexact -f matroska
+ fate-wavpack-matroska_mux-61: CMP = oneline
++fate-wavpack-matroska_mux-61: REF = 7f13234f0f3d5b7e00a4661412be025b
  FATE_SAMPLES_AVCONV += $(FATE_WAVPACK-yes)
  fate-wavpack: $(FATE_WAVPACK-yes)