Merge commit '794ca87d2bff2513118de8b97595b3e23070e67d'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 29 May 2013 08:06:35 +0000 (10:06 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 29 May 2013 08:07:30 +0000 (10:07 +0200)
* commit '794ca87d2bff2513118de8b97595b3e23070e67d':
  wvdec: split block header parsing into a separate file

Conflicts:
libavformat/Makefile
libavformat/wvdec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/Makefile
libavformat/wv.c
libavformat/wv.h
libavformat/wvdec.c

@@@ -392,16 -330,12 +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_WV_DEMUXER)                += wvdec.o apetag.o img2.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_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
index 0000000,724256b..0f4f807
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,52 +1,52 @@@
 - * This file is part of Libav.
+ /*
+  * WavPack shared functions
+  *
 - * 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 <string.h>
+ #include "libavutil/common.h"
+ #include "libavutil/intreadwrite.h"
+ #include "wv.h"
+ int ff_wv_parse_header(WvHeader *wv, const uint8_t *data)
+ {
+     memset(wv, 0, sizeof(*wv));
+     if (AV_RL32(data) != MKTAG('w', 'v', 'p', 'k'))
+         return AVERROR_INVALIDDATA;
+     wv->blocksize     = AV_RL32(data + 4);
+     if (wv->blocksize < 24 || wv->blocksize > WV_BLOCK_LIMIT)
+         return AVERROR_INVALIDDATA;
+     wv->blocksize -= 24;
+     wv->version       = AV_RL16(data + 8);
+     wv->total_samples = AV_RL32(data + 12);
+     wv->block_idx     = AV_RL32(data + 16);
+     wv->samples       = AV_RL32(data + 20);
+     wv->flags         = AV_RL32(data + 24);
+     wv->crc           = AV_RL32(data + 28);
+     wv->initial = !!(wv->flags & WV_FLAG_INITIAL_BLOCK);
+     wv->final   = !!(wv->flags & WV_FLAG_FINAL_BLOCK);
+     return 0;
+ }
index 0000000,ef285d2..07d2e1b
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,56 +1,56 @@@
 - * This file is part of Libav.
+ /*
+  * WavPack shared functions
+  *
 - * 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
+  */
+ #ifndef AVFORMAT_WV_H
+ #define AVFORMAT_WV_H
+ #include <stdint.h>
+ #define WV_HEADER_SIZE 32
+ #define WV_FLAG_INITIAL_BLOCK (1 << 11)
+ #define WV_FLAG_FINAL_BLOCK   (1 << 12)
+ // specs say that maximum block size is 1Mb
+ #define WV_BLOCK_LIMIT 1048576
+ typedef struct WvHeader {
+     uint32_t blocksize;     //< size of the block data (excluding the header)
+     uint16_t version;       //< bitstream version
+     uint32_t total_samples; //< total number of samples in the stream
+     uint32_t block_idx;     //< index of the first sample in this block
+     uint32_t samples;       //< number of samples in this block
+     uint32_t flags;
+     uint32_t crc;
+     int initial, final;
+ } WvHeader;
+ /**
+  * Parse a WavPack block header.
+  *
+  * @param wv   this struct will be filled with parse header information
+  * @param data header data, must be WV_HEADER_SIZE bytes long
+  *
+  * @return 0 on success, a negative AVERROR code on failure
+  */
+ int ff_wv_parse_header(WvHeader *wv, const uint8_t *data);
+ #endif /* AVFORMAT_WV_H */
@@@ -254,8 -235,7 +238,8 @@@ static int wv_read_header(AVFormatConte
      st->codec->bits_per_coded_sample = wc->bpp;
      avpriv_set_pts_info(st, 64, 1, wc->rate);
      st->start_time = 0;
-     if (wc->samples != 0xFFFFFFFFu)
-         st->duration = wc->samples;
 -    st->duration   = wc->header.total_samples;
++    if (wc->header.total_samples != 0xFFFFFFFFu)
++        st->duration = wc->header.total_samples;
  
      if (s->pb->seekable) {
          int64_t cur = avio_tell(s->pb);