summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2014-10-29 16:35:26 +0100
committerAnton Khirnov <anton@khirnov.net>2014-11-06 09:00:46 +0100
commit2f3fadfbe3c6ad52fad5c614b6067c5401227959 (patch)
treebc87873036253702b95261fe23371d79c54d4b15 /libavcodec
parent5e80fb7ff226f136dbcf3fed00a2966bf8e9bd70 (diff)
lavc,lavf: switch to the new vorbis parse API
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/libvorbis.c11
-rw-r--r--libavcodec/vorbis_parser.c24
2 files changed, 26 insertions, 9 deletions
diff --git a/libavcodec/libvorbis.c b/libavcodec/libvorbis.c
index 3b3eca8c10..f7ea253c4f 100644
--- a/libavcodec/libvorbis.c
+++ b/libavcodec/libvorbis.c
@@ -33,7 +33,7 @@
#include "bytestream.h"
#include "internal.h"
#include "vorbis.h"
-#include "vorbis_parser_internal.h"
+#include "vorbis_parser.h"
#undef NDEBUG
#include <assert.h>
@@ -58,7 +58,7 @@ typedef struct LibvorbisContext {
vorbis_comment vc; /**< VorbisComment info */
ogg_packet op; /**< ogg packet */
double iblock; /**< impulse block bias option */
- AVVorbisParseContext vp; /**< parse context to get durations */
+ AVVorbisParseContext *vp; /**< parse context to get durations */
AudioFrameQueue afq; /**< frame queue for timestamps */
} LibvorbisContext;
@@ -163,6 +163,8 @@ static av_cold int libvorbis_encode_close(AVCodecContext *avctx)
ff_af_queue_close(&s->afq);
av_freep(&avctx->extradata);
+ av_vorbis_parse_free(&s->vp);
+
return 0;
}
@@ -221,7 +223,8 @@ static av_cold int libvorbis_encode_init(AVCodecContext *avctx)
offset += header_code.bytes;
assert(offset == avctx->extradata_size);
- if ((ret = avpriv_vorbis_parse_extradata(avctx, &s->vp)) < 0) {
+ s->vp = av_vorbis_parse_init(avctx->extradata, avctx->extradata_size);
+ if (!s->vp) {
av_log(avctx, AV_LOG_ERROR, "invalid extradata\n");
return ret;
}
@@ -318,7 +321,7 @@ static int libvorbis_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
avpkt->pts = ff_samples_to_time_base(avctx, op.granulepos);
- duration = avpriv_vorbis_parse_frame(&s->vp, avpkt->data, avpkt->size);
+ duration = av_vorbis_parse_frame(s->vp, avpkt->data, avpkt->size);
if (duration > 0) {
/* we do not know encoder delay until we get the first packet from
* libvorbis, so we have to update the AudioFrameQueue counts */
diff --git a/libavcodec/vorbis_parser.c b/libavcodec/vorbis_parser.c
index eec37322a8..231706c42b 100644
--- a/libavcodec/vorbis_parser.c
+++ b/libavcodec/vorbis_parser.c
@@ -289,18 +289,25 @@ int avpriv_vorbis_parse_frame(AVVorbisParseContext *s, const uint8_t *buf,
#endif
#if CONFIG_VORBIS_PARSER
+
+typedef struct VorbisParseContext {
+ AVVorbisParseContext *vp;
+} VorbisParseContext;
+
static int vorbis_parse(AVCodecParserContext *s1, AVCodecContext *avctx,
const uint8_t **poutbuf, int *poutbuf_size,
const uint8_t *buf, int buf_size)
{
- AVVorbisParseContext *s = s1->priv_data;
+ VorbisParseContext *s = s1->priv_data;
int duration;
- if (!s->extradata_parsed && avctx->extradata && avctx->extradata_size)
- if (avpriv_vorbis_parse_extradata(avctx, s))
+ if (!s->vp && avctx->extradata && avctx->extradata_size) {
+ s->vp = av_vorbis_parse_init(avctx->extradata, avctx->extradata_size);
+ if (!s->vp)
goto end;
+ }
- if ((duration = avpriv_vorbis_parse_frame(s, buf, buf_size)) >= 0)
+ if ((duration = av_vorbis_parse_frame(s->vp, buf, buf_size)) >= 0)
s1->duration = duration;
end:
@@ -311,9 +318,16 @@ end:
return buf_size;
}
+static void vorbis_parser_close(AVCodecParserContext *ctx)
+{
+ VorbisParseContext *s = ctx->priv_data;
+ av_vorbis_parse_free(&s->vp);
+}
+
AVCodecParser ff_vorbis_parser = {
.codec_ids = { AV_CODEC_ID_VORBIS },
- .priv_data_size = sizeof(AVVorbisParseContext),
+ .priv_data_size = sizeof(VorbisParseContext),
.parser_parse = vorbis_parse,
+ .parser_close = vorbis_parser_close,
};
#endif /* CONFIG_VORBIS_PARSER */