From 87a051f97633010f71dfc1d23d806856499bf231 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 11 Sep 2015 18:36:56 +0200 Subject: lavc: allow asynchronous decoders to return correct pkt_dts values The generic code in utils.c sets the AVFrame.pkt_dts field from the packet it was supposedly decoded. This does not have to be true for a fully asynchronous decoder like mmaldec. It could be overwritten with an incorrect value. Even if the decoder doesn't determine the DTS (but sets it to AV_NOPTS_VALUE), it's impossible to determine a correct value in utils.c. Decoders can now be marked with FF_CODEC_CAP_SETS_PKT_DTS, in which case utils.c won't overwrite the field. The decoders are expected to set this field (even if they only set it to AV_NOPTS_VALUE). Signed-off-by: Luca Barbato --- libavcodec/internal.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'libavcodec/internal.h') diff --git a/libavcodec/internal.h b/libavcodec/internal.h index fc906322f8..500511dada 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -46,7 +46,13 @@ * all. */ #define FF_CODEC_CAP_INIT_CLEANUP (1 << 1) - +/** + * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set + * AVFrame.pkt_dts manually. If the flag is set, utils.c won't overwrite + * this field. If it's unset, utils.c tries to guess the pkt_dts field + * from the input AVPacket. + */ +#define FF_CODEC_CAP_SETS_PKT_DTS (1 << 2) #ifdef DEBUG # define ff_dlog(ctx, ...) av_log(ctx, AV_LOG_DEBUG, __VA_ARGS__) -- cgit v1.2.3