diff options
author | Nicolas Gaullier <nicolas.gaullier@cji.paris> | 2020-03-05 09:17:22 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2020-03-20 09:16:05 +0100 |
commit | 2d6baff0c0dbd24d77321601f453bf1552fccfb9 (patch) | |
tree | 3525bcdabdc0e16c6019db0c02b92545e82897e7 | |
parent | eb88ccb92e05018b1060cf8126b30eeeff551d3b (diff) | |
download | ffmpeg-2d6baff0c0dbd24d77321601f453bf1552fccfb9.tar.gz |
avformat/utils: Make find_stream_info get side data from codec context
This will allow probing input coded side data, and also forwarding them to the output.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
-rw-r--r-- | libavformat/utils.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c index cb15f6a4b3..a58e47fabc 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3599,6 +3599,21 @@ static int extract_extradata(AVStream *st, const AVPacket *pkt) return 0; } +static int add_coded_side_data(AVStream *st, AVCodecContext *avctx) +{ + int i; + + for (i = 0; i < avctx->nb_coded_side_data; i++) { + const AVPacketSideData *sd_src = &avctx->coded_side_data[i]; + uint8_t *dst_data; + dst_data = av_stream_new_side_data(st, sd_src->type, sd_src->size); + if (!dst_data) + return AVERROR(ENOMEM); + memcpy(dst_data, sd_src->data, sd_src->size); + } + return 0; +} + int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) { int i, count = 0, ret = 0, j; @@ -4138,6 +4153,9 @@ FF_ENABLE_DEPRECATION_WARNINGS ret = avcodec_parameters_from_context(st->codecpar, st->internal->avctx); if (ret < 0) goto find_stream_info_err; + ret = add_coded_side_data(st, st->internal->avctx); + if (ret < 0) + goto find_stream_info_err; #if FF_API_LOWRES // The decoder might reduce the video size by the lowres factor. if (st->internal->avctx->lowres && orig_w) { |