diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-01-22 20:03:15 +0100 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2020-04-21 08:28:58 +0200 |
commit | 75e50c3141c5e3f96110fcab5fb819736dcdc62e (patch) | |
tree | 1f96ac80130da4e07e16a2fc3ffee05968c497f3 | |
parent | abc7dc32bd36759e82e2298eb884c0aa41ca0ac2 (diff) | |
download | ffmpeg-75e50c3141c5e3f96110fcab5fb819736dcdc62e.tar.gz |
avformat/matroskaenc: Don't needlessly copy AVCodecParameters
At the end of encoding, the FLAC encoder sends a packet whose side data
contains updated extradata (e.g. a correct md5 checksum). The Matroska
muxer uses this to update the CodecPrivate.
In doing so, the stream's codecpar was copied. But given that writing
a FLAC CodecPrivate does not modify the used AVCodecParameters at all,
there is no need to do so and this commit changes this.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r-- | libavformat/matroskaenc.c | 16 |
1 files changed, 4 insertions, 12 deletions
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c index bdb768209d..71b6b6cc91 100644 --- a/libavformat/matroskaenc.c +++ b/libavformat/matroskaenc.c @@ -2173,24 +2173,16 @@ static int mkv_check_new_extra_data(AVFormatContext *s, const AVPacket *pkt) break; case AV_CODEC_ID_FLAC: if (side_data_size && (s->pb->seekable & AVIO_SEEKABLE_NORMAL) && !mkv->is_live) { - AVCodecParameters *codecpriv_par; + uint8_t *old_extradata = par->extradata; if (side_data_size != par->extradata_size) { av_log(s, AV_LOG_ERROR, "Invalid FLAC STREAMINFO metadata for output stream %d\n", pkt->stream_index); return AVERROR(EINVAL); } - codecpriv_par = avcodec_parameters_alloc(); - if (!codecpriv_par) - return AVERROR(ENOMEM); - ret = avcodec_parameters_copy(codecpriv_par, par); - if (ret < 0) { - avcodec_parameters_free(&codecpriv_par); - return ret; - } - memcpy(codecpriv_par->extradata, side_data, side_data_size); + par->extradata = side_data; avio_seek(mkv->tracks_bc, track->codecpriv_offset, SEEK_SET); - mkv_write_codecprivate(s, mkv->tracks_bc, codecpriv_par, 1, 0); - avcodec_parameters_free(&codecpriv_par); + mkv_write_codecprivate(s, mkv->tracks_bc, par, 1, 0); + par->extradata = old_extradata; } break; // FIXME: Remove the following once libaom starts propagating extradata during init() |