diff --git a/libavcodec/opus/parser.c b/libavcodec/opus/parser.c index 41665e68f9..eb16562530 100644 --- a/libavcodec/opus/parser.c +++ b/libavcodec/opus/parser.c @@ -170,9 +170,14 @@ static int opus_parse(AVCodecParserContext *ctx, AVCodecContext *avctx, { OpusParserContext *s = ctx->priv_data; ParseContext *pc = &s->pc; - int next, header_len; + int next, header_len = 0; - next = opus_find_frame_end(ctx, avctx, buf, buf_size, &header_len); + avctx->sample_rate = 48000; + + if (ctx->flags & PARSER_FLAG_COMPLETE_FRAMES) + next = buf_size; + else { + next = opus_find_frame_end(ctx, avctx, buf, buf_size, &header_len); if (s->ts_framing && next != AVERROR_INVALIDDATA && ff_combine_frame(pc, next, &buf, &buf_size) < 0) { @@ -186,6 +191,7 @@ static int opus_parse(AVCodecParserContext *ctx, AVCodecContext *avctx, *poutbuf_size = 0; return buf_size; } + } *poutbuf = buf + header_len; *poutbuf_size = buf_size - header_len;