mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-12-17 20:40:07 +01:00
lavc: preserve the original private data in avcodec_copy_context()
If a non-NULL codec was passed to avcodec_alloc_context3(), private data will be already allocated in dest.
This commit is contained in:
@@ -137,6 +137,9 @@ AVCodecContext *avcodec_alloc_context3(const AVCodec *codec)
|
|||||||
|
|
||||||
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
|
int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
|
||||||
{
|
{
|
||||||
|
const AVCodec *orig_codec = dest->codec;
|
||||||
|
uint8_t *orig_priv_data = dest->priv_data;
|
||||||
|
|
||||||
if (avcodec_is_open(dest)) { // check that the dest context is uninitialized
|
if (avcodec_is_open(dest)) { // check that the dest context is uninitialized
|
||||||
av_log(dest, AV_LOG_ERROR,
|
av_log(dest, AV_LOG_ERROR,
|
||||||
"Tried to copy AVCodecContext %p into already-initialized %p\n",
|
"Tried to copy AVCodecContext %p into already-initialized %p\n",
|
||||||
@@ -145,9 +148,10 @@ int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src)
|
|||||||
}
|
}
|
||||||
memcpy(dest, src, sizeof(*dest));
|
memcpy(dest, src, sizeof(*dest));
|
||||||
|
|
||||||
|
dest->priv_data = orig_priv_data;
|
||||||
|
dest->codec = orig_codec;
|
||||||
|
|
||||||
/* set values specific to opened codecs back to their default state */
|
/* set values specific to opened codecs back to their default state */
|
||||||
dest->priv_data = NULL;
|
|
||||||
dest->codec = NULL;
|
|
||||||
dest->slice_offset = NULL;
|
dest->slice_offset = NULL;
|
||||||
dest->hwaccel = NULL;
|
dest->hwaccel = NULL;
|
||||||
dest->internal = NULL;
|
dest->internal = NULL;
|
||||||
|
|||||||
Reference in New Issue
Block a user