History

Merge commit '5e80fb7ff226f136dbcf3fed00a2966bf8e9bd70'

* commit '5e80fb7ff226f136dbcf3fed00a2966bf8e9bd70': lavc: add a public API for parsing vorbis packets. Conflicts: doc/APIchanges libavcodec/Makefile libavcodec/version.h libavcodec/vorbis_parser.c

Michael Niedermayer committed 12 years ago

Commit 44fa2672 parents 5f7887c 5e80fb78 files · +149 −43Browse files

Unified · Split

8 files
  1. doc/APIchanges +3 −0
  2. libavcodec/Makefile +8 −6
  3. libavcodec/libvorbisenc.c +1 −1
  4. libavcodec/version.h +2 −2
  5. libavcodec/vorbis_parser.c +47 −7
  6. libavcodec/vorbis_parser.h +16 −26
  7. libavcodec/vorbis_parser_internal.h +71 −0
  8. libavformat/oggparsevorbis.c +1 −1
doc/APIchanges+3−0
@@ -15,6 +15,9 @@ libavutil: 2014-08-09 · 14 unmodified lines
1515
1616 API changes, most recent first:
1717
18+2014-11-xx - xxxxxxx - lavc 56.6.0 - vorbis_parser.h
19+ Add a public API for parsing vorbis packets.
20+
1821 2014-10-xx - xxxxxxx - lavc 56.5.0 - avcodec.h
1922 Replace AVCodecContext.time_base used for decoding
2023 with AVCodecContext.framerate.
libavcodec/Makefile+8−6
@@ -11,6 +11,7 @@ HEADERS = avcodec.h \ · 10 unmodified lines
1111 vda.h \
1212 vdpau.h \
1313 version.h \
14+ vorbis_parser.h \
1415 xvmc.h \
1516
1617 OBJS = allcodecs.o \
@@ -31,6 +32,7 @@ OBJS = allcodecs.o \ · 14 unmodified lines
3132 resample.o \
3233 resample2.o \
3334 utils.o \
35+ vorbis_parser.o \
3436
3537 # subsystems
3638 OBJS-$(CONFIG_AANDCTTABLES) += aandcttab.o
@@ -677,7 +679,7 @@ OBJS-$(CONFIG_ADTS_MUXER) += mpeg4audio.o · 640 unmodified lines
677679 OBJS-$(CONFIG_CAF_DEMUXER) += mpeg4audio.o mpegaudiodata.o \
678680 ac3tab.o
679681 OBJS-$(CONFIG_FLAC_DEMUXER) += flac.o flacdata.o vorbis_data.o \
680− vorbis_parser.o xiph.o
682+ xiph.o
681683 OBJS-$(CONFIG_FLAC_MUXER) += flac.o flacdata.o vorbis_data.o
682684 OBJS-$(CONFIG_FLV_DEMUXER) += mpeg4audio.o
683685 OBJS-$(CONFIG_GXF_DEMUXER) += mpeg12data.o
@@ -687,7 +689,7 @@ OBJS-$(CONFIG_LATM_MUXER) += mpeg4audio.o · 3 unmodified lines
687689 OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER) += xiph.o mpeg4audio.o vorbis_data.o \
688690 flac.o flacdata.o
689691 OBJS-$(CONFIG_MATROSKA_DEMUXER) += mpeg4audio.o mpegaudiodata.o \
690− vorbis_parser.o xiph.o
692+ xiph.o
691693 OBJS-$(CONFIG_MATROSKA_MUXER) += mpeg4audio.o mpegaudiodata.o \
692694 flac.o flacdata.o vorbis_data.o xiph.o
693695 OBJS-$(CONFIG_MP2_MUXER) += mpegaudiodata.o mpegaudiodecheader.o
@@ -700,7 +702,7 @@ OBJS-$(CONFIG_MXF_MUXER) += dnxhddata.o · 6 unmodified lines
700702 OBJS-$(CONFIG_NUT_MUXER) += mpegaudiodata.o
701703 OBJS-$(CONFIG_OGA_MUXER) += xiph.o flac.o flacdata.o
702704 OBJS-$(CONFIG_OGG_DEMUXER) += xiph.o flac.o flacdata.o \
703− mpeg12data.o vorbis_parser.o \
705+ mpeg12data.o \
704706 dirac.o vorbis_data.o
705707 OBJS-$(CONFIG_OGG_MUXER) += xiph.o flac.o flacdata.o \
706708 vorbis_data.o
@@ -712,7 +714,7 @@ OBJS-$(CONFIG_TAK_DEMUXER) += tak.o · 5 unmodified lines
712714 OBJS-$(CONFIG_WEBM_MUXER) += mpeg4audio.o mpegaudiodata.o \
713715 xiph.o flac.o flacdata.o \
714716 vorbis_data.o
715−OBJS-$(CONFIG_WEBM_DASH_MANIFEST_DEMUXER) += vorbis_parser.o xiph.o
717+OBJS-$(CONFIG_WEBM_DASH_MANIFEST_DEMUXER) += xiph.o
716718 OBJS-$(CONFIG_WTV_DEMUXER) += mpeg4audio.o mpegaudiodata.o
717719
718720 # libavfilter dependencies
@@ -756,7 +758,7 @@ OBJS-$(CONFIG_LIBVO_AACENC_ENCODER) += libvo-aacenc.o mpeg4audio.o · 37 unmodified lines
756758 OBJS-$(CONFIG_LIBVO_AMRWBENC_ENCODER) += libvo-amrwbenc.o
757759 OBJS-$(CONFIG_LIBVORBIS_DECODER) += libvorbisdec.o
758760 OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbisenc.o \
759− vorbis_data.o vorbis_parser.o xiph.o
761+ vorbis_data.o xiph.o
760762 OBJS-$(CONFIG_LIBVPX_VP8_DECODER) += libvpxdec.o
761763 OBJS-$(CONFIG_LIBVPX_VP8_ENCODER) += libvpxenc.o
762764 OBJS-$(CONFIG_LIBVPX_VP9_DECODER) += libvpxdec.o libvpx.o
@@ -812,7 +814,7 @@ OBJS-$(CONFIG_TAK_PARSER) += tak_parser.o tak.o · 49 unmodified lines
812814 OBJS-$(CONFIG_VC1_PARSER) += vc1_parser.o vc1.o vc1data.o vc1dsp.o \
813815 msmpeg4.o msmpeg4data.o mpeg4video.o \
814816 h263.o
815−OBJS-$(CONFIG_VORBIS_PARSER) += vorbis_parser.o xiph.o
817+OBJS-$(CONFIG_VORBIS_PARSER) += xiph.o
816818 OBJS-$(CONFIG_VP3_PARSER) += vp3_parser.o
817819 OBJS-$(CONFIG_VP8_PARSER) += vp8_parser.o
818820 OBJS-$(CONFIG_VP9_PARSER) += vp9_parser.o
libavcodec/libvorbisenc.c+1−1
@@ -27,7 +27,7 @@ · 26 unmodified lines
2727 #include "audio_frame_queue.h"
2828 #include "internal.h"
2929 #include "vorbis.h"
30−#include "vorbis_parser.h"
30+#include "vorbis_parser_internal.h"
3131
3232
3333 /* Number of samples the user should send in each call.
libavcodec/version.h+2−2
@@ -29,8 +29,8 @@ · 28 unmodified lines
2929 #include "libavutil/version.h"
3030
3131 #define LIBAVCODEC_VERSION_MAJOR 56
32−#define LIBAVCODEC_VERSION_MINOR 10
33−#define LIBAVCODEC_VERSION_MICRO 102
32+#define LIBAVCODEC_VERSION_MINOR 11
33+#define LIBAVCODEC_VERSION_MICRO 100
3434
3535 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
3636 LIBAVCODEC_VERSION_MINOR, \
libavcodec/vorbis_parser.c+47−7
@@ -30,7 +30,7 @@ · 29 unmodified lines
3030 #include "get_bits.h"
3131 #include "parser.h"
3232 #include "xiph.h"
33−#include "vorbis_parser.h"
33+#include "vorbis_parser_internal.h"
3434
3535 static const AVClass vorbis_parser_class = {
3636 .class_name = "Vorbis parser",
@@ -181,7 +181,8 @@ bad_header: · 144 unmodified lines
181181 return ret;
182182 }
183183
184−int avpriv_vorbis_parse_extradata(AVCodecContext *avctx, AVVorbisParseContext *s)
184+static int vorbis_parse_init(AVVorbisParseContext *s,
185+ const uint8_t *extradata, int extradata_size)
185186 {
186187 uint8_t *header_start[3];
187188 int header_len[3];
@@ -190,8 +191,8 @@ int avpriv_vorbis_parse_extradata(AVCodecContext *avctx, AVVorbisParseContext *s · 2 unmodified lines
190191 s->class = &vorbis_parser_class;
191192 s->extradata_parsed = 1;
192193
193− if ((ret = avpriv_split_xiph_headers(avctx->extradata,
194− avctx->extradata_size, 30,
194+ if ((ret = avpriv_split_xiph_headers(extradata,
195+ extradata_size, 30,
195196 header_start, header_len)) < 0) {
196197 av_log(s, AV_LOG_ERROR, "Extradata corrupt.\n");
197198 return ret;
@@ -258,18 +259,57 @@ bad_packet: · 60 unmodified lines
258259 return duration;
259260 }
260261
261−int avpriv_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf,
262− int buf_size)
262+int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf,
263+ int buf_size)
263264 {
264265 return avpriv_vorbis_parse_frame_flags(s, buf, buf_size, NULL);
265266 }
266267
267−void avpriv_vorbis_parse_reset(AVVorbisParseContext *s)
268+void av_vorbis_parse_reset(AVVorbisParseContext *s)
268269 {
269270 if (s->valid_extradata)
270271 s->previous_blocksize = s->blocksize[0];
271272 }
272273
274+void av_vorbis_parse_free(AVVorbisParseContext **s)
275+{
276+ av_freep(s);
277+}
278+
279+AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata,
280+ int extradata_size)
281+{
282+ AVVorbisParseContext *s = av_mallocz(sizeof(*s));
283+ int ret;
284+
285+ if (!s)
286+ return NULL;
287+
288+ ret = vorbis_parse_init(s, extradata, extradata_size);
289+ if (ret < 0) {
290+ av_vorbis_parse_free(&s);
291+ return NULL;
292+ }
293+
294+ return s;
295+}
296+
297+#if LIBAVCODEC_VERSION_MAJOR < 57
298+int avpriv_vorbis_parse_extradata(AVCodecContext *avctx, AVVorbisParseContext *s)
299+{
300+ return vorbis_parse_init(s, avctx->extradata, avctx->extradata_size);
301+}
302+void avpriv_vorbis_parse_reset(AVVorbisParseContext *s)
303+{
304+ av_vorbis_parse_reset(s);
305+}
306+int avpriv_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf,
307+ int buf_size)
308+{
309+ return av_vorbis_parse_frame(s, buf, buf_size);
310+}
311+#endif
312+
273313 #if CONFIG_VORBIS_PARSER
274314 static int vorbis_parse(AVCodecParserContext *s1, AVCodecContext *avctx,
275315 const uint8_t **poutbuf, int *poutbuf_size,
libavcodec/vorbis_parser.h+16−26
@@ -1,5 +1,4 @@
11 /*
2− * Copyright (c) 2012 Justin Ruggles
32 *
43 * This file is part of FFmpeg.
54 *
@@ -20,35 +19,29 @@ · 14 unmodified lines
2019
2120 /**
2221 * @file
23− * Vorbis audio parser
22+ * A public API for Vorbis parsing
2423 *
2524 * Determines the duration for each packet.
2625 */
2726
28−#ifndef AVCODEC_VORBIS_PARSER_H
29−#define AVCODEC_VORBIS_PARSER_H
27+#ifndef AVCODEC_VORBIS_PARSE_H
28+#define AVCODEC_VORBIS_PARSE_H
3029
31−#include "avcodec.h"
32−
33−typedef struct AVVorbisParseContext {
34− const AVClass *class;
35− int extradata_parsed; ///< we have attempted to parse extradata
36− int valid_extradata; ///< extradata is valid, so we can calculate duration
37− int blocksize[2]; ///< short and long window sizes
38− int previous_blocksize; ///< previous window size
39− int mode_blocksize[64]; ///< window size mapping for each mode
40− int mode_count; ///< number of modes
41− int mode_mask; ///< bitmask used to get the mode in each packet
42− int prev_mask; ///< bitmask used to get the previous mode flag in each packet
43−} AVVorbisParseContext;
30+typedef struct AVVorbisParseContext AVVorbisParseContext;
4431
4532 /**
46− * Initialize the Vorbis parser using headers in the extradata.
33+ * Allocate and initialize the Vorbis parser using headers in the extradata.
4734 *
4835 * @param avctx codec context
4936 * @param s Vorbis parser context
5037 */
51−int avpriv_vorbis_parse_extradata(AVCodecContext *avctx, AVVorbisParseContext *s);
38+AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata,
39+ int extradata_size);
40+
41+/**
42+ * Free the parser and everything associated with it.
43+ */
44+void av_vorbis_parse_free(AVVorbisParseContext **s);
5245
5346 #define VORBIS_FLAG_HEADER 0x00000001
5447 #define VORBIS_FLAG_COMMENT 0x00000002
@@ -71,16 +64,13 @@ int avpriv_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, · 16 unmodified lines
7164 /**
7265 * Get the duration for a Vorbis packet.
7366 *
74− * avpriv_vorbis_parse_extradata() must have been successfully called prior to
75− * this in order for a correct duration to be returned.
76− *
7767 * @param s Vorbis parser context
7868 * @param buf buffer containing a Vorbis frame
7969 * @param buf_size size of the buffer
8070 */
81−int avpriv_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf,
82− int buf_size);
71+int av_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf,
72+ int buf_size);
8373
84−void avpriv_vorbis_parse_reset(AVVorbisParseContext *s);
74+void av_vorbis_parse_reset(AVVorbisParseContext *s);
8575
86−#endif /* AVCODEC_VORBIS_PARSER_H */
76+#endif /* AVCODEC_VORBIS_PARSE_H */
libavcodec/vorbis_parser_internal.h+71−0
@@ -0,0 +1,71 @@
1+/*
2+ * Copyright (c) 2012 Justin Ruggles
3+ *
4+ * This file is part of FFmpeg.
5+ *
6+ * FFmpeg is free software; you can redistribute it and/or
7+ * modify it under the terms of the GNU Lesser General Public
8+ * License as published by the Free Software Foundation; either
9+ * version 2.1 of the License, or (at your option) any later version.
10+ *
11+ * FFmpeg is distributed in the hope that it will be useful,
12+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14+ * Lesser General Public License for more details.
15+ *
16+ * You should have received a copy of the GNU Lesser General Public
17+ * License along with FFmpeg; if not, write to the Free Software
18+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19+ */
20+
21+/**
22+ * @file
23+ * Vorbis audio parser
24+ *
25+ * Determines the duration for each packet.
26+ */
27+
28+#ifndef AVCODEC_VORBIS_PARSER_H
29+#define AVCODEC_VORBIS_PARSER_H
30+
31+#include "avcodec.h"
32+#include "vorbis_parser.h"
33+
34+struct AVVorbisParseContext {
35+ const AVClass *class;
36+ int extradata_parsed; ///< we have attempted to parse extradata
37+ int valid_extradata; ///< extradata is valid, so we can calculate duration
38+ int blocksize[2]; ///< short and long window sizes
39+ int previous_blocksize; ///< previous window size
40+ int mode_blocksize[64]; ///< window size mapping for each mode
41+ int mode_count; ///< number of modes
42+ int mode_mask; ///< bitmask used to get the mode in each packet
43+ int prev_mask; ///< bitmask used to get the previous mode flag in each packet
44+};
45+
46+#if LIBAVCODEC_VERSION_MAJOR < 57
47+/**
48+ * Initialize the Vorbis parser using headers in the extradata.
49+ *
50+ * @param avctx codec context
51+ * @param s Vorbis parser context
52+ */
53+int avpriv_vorbis_parse_extradata(AVCodecContext *avctx, AVVorbisParseContext *s);
54+
55+/**
56+ * Get the duration for a Vorbis packet.
57+ *
58+ * avpriv_vorbis_parse_extradata() must have been successfully called prior to
59+ * this in order for a correct duration to be returned.
60+ *
61+ * @param s Vorbis parser context
62+ * @param buf buffer containing a Vorbis frame
63+ * @param buf_size size of the buffer
64+ */
65+int avpriv_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf,
66+ int buf_size);
67+
68+void avpriv_vorbis_parse_reset(AVVorbisParseContext *s);
69+#endif
70+
71+#endif /* AVCODEC_VORBIS_PARSER_H */
libavformat/oggparsevorbis.c+1−1
@@ -30,7 +30,7 @@ · 29 unmodified lines
3030 #include "libavutil/dict.h"
3131 #include "libavcodec/bytestream.h"
3232 #include "libavcodec/get_bits.h"
33−#include "libavcodec/vorbis_parser.h"
33+#include "libavcodec/vorbis_parser_internal.h"
3434 #include "avformat.h"
3535 #include "flac_picture.h"
3636 #include "internal.h"

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t