On 05/03/2014 03:13 PM, Anton Khirnov wrote:
If a non-NULL codec was passed to avcodec_alloc_context3(), private data
will be already allocated in dest.
---
  libavcodec/options.c |    8 ++++++--
  1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libavcodec/options.c b/libavcodec/options.c
index 2e41ce4..c28cbeb 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -137,6 +137,9 @@ AVCodecContext *avcodec_alloc_context3(const AVCodec *codec)
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
          av_log(dest, AV_LOG_ERROR,
                 "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));
+ dest->priv_data = orig_priv_data;
+    dest->codec           = orig_codec;
+
      /* set values specific to opened codecs back to their default state */
-    dest->priv_data       = NULL;
-    dest->codec           = NULL;
      dest->slice_offset    = NULL;
      dest->hwaccel         = NULL;
      dest->internal        = NULL;

LGTM

-Justin

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to