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",

               src, dest);

        return AVERROR(EINVAL);

    }



    copy_context_reset(dest);



    memcpy(dest, src, sizeof(*dest));

    av_opt_copy(dest, src);



    dest->priv_data       = orig_priv_data;

    dest->codec           = orig_codec;



    if (orig_priv_data && src->codec && src->codec->priv_class &&

        dest->codec && dest->codec->priv_class)

        av_opt_copy(orig_priv_data, src->priv_data);





    /* set values specific to opened codecs back to their default state */

    dest->slice_offset    = NULL;

    dest->hwaccel         = NULL;

    dest->internal        = NULL;

#if FF_API_CODED_FRAME

FF_DISABLE_DEPRECATION_WARNINGS

    dest->coded_frame     = NULL;

FF_ENABLE_DEPRECATION_WARNINGS

#endif



    /* reallocate values that should be allocated separately */

    dest->extradata       = NULL;


    dest->intra_matrix    = NULL;

    dest->inter_matrix    = NULL;

    dest->rc_override     = NULL;

    dest->subtitle_header = NULL;

    dest->hw_frames_ctx   = NULL;





#define alloc_and_copy_or_fail(obj, size, pad) \

    if (src->obj && size > 0) { \

        dest->obj = av_malloc(size + pad); \

        if (!dest->obj) \

            goto fail; \

        memcpy(dest->obj, src->obj, size); \

        if (pad) \

            memset(((uint8_t *) dest->obj) + size, 0, pad); \

    }

    alloc_and_copy_or_fail(extradata,    src->extradata_size,

                           AV_INPUT_BUFFER_PADDING_SIZE);

    dest->extradata_size  = src->extradata_size;

    alloc_and_copy_or_fail(intra_matrix, 64 * sizeof(int16_t), 0);

    alloc_and_copy_or_fail(inter_matrix, 64 * sizeof(int16_t), 0);

    alloc_and_copy_or_fail(rc_override,  src->rc_override_count * sizeof(*src->rc_override), 0);

    alloc_and_copy_or_fail(subtitle_header, src->subtitle_header_size, 1);

    av_assert0(dest->subtitle_header_size == src->subtitle_header_size);

#undef alloc_and_copy_or_fail



    if (src->hw_frames_ctx) {

        dest->hw_frames_ctx = av_buffer_ref(src->hw_frames_ctx);

        if (!dest->hw_frames_ctx)

            goto fail;

    }



    return 0;



fail:

    copy_context_reset(dest);

    return AVERROR(ENOMEM);

}
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)) { 

        av_log(dest, AV_LOG_ERROR,

               "Tried to copy AVCodecContext %p into already-initialized %p\n",

               src, dest);

        return AVERROR(EINVAL);

    }



    copy_context_reset(dest);



    memcpy(dest, src, sizeof(*dest));

    av_opt_copy(dest, src);



    dest->priv_data       = orig_priv_data;

    dest->codec           = orig_codec;



    if (orig_priv_data && src->codec && src->codec->priv_class &&

        dest->codec && dest->codec->priv_class)

        av_opt_copy(orig_priv_data, src->priv_data);





    

    dest->slice_offset    = NULL;

    dest->hwaccel         = NULL;

    dest->internal        = NULL;

#if FF_API_CODED_FRAME

FF_DISABLE_DEPRECATION_WARNINGS

    dest->coded_frame     = NULL;

FF_ENABLE_DEPRECATION_WARNINGS

#endif



    

    dest->extradata       = NULL;


    dest->intra_matrix    = NULL;

    dest->inter_matrix    = NULL;

    dest->rc_override     = NULL;

    dest->subtitle_header = NULL;

    dest->hw_frames_ctx   = NULL;





#define alloc_and_copy_or_fail(obj, size, pad) \

    if (src->obj && size > 0) { \

        dest->obj = av_malloc(size + pad); \

        if (!dest->obj) \

            goto fail; \

        memcpy(dest->obj, src->obj, size); \

        if (pad) \

            memset(((uint8_t *) dest->obj) + size, 0, pad); \

    }

    alloc_and_copy_or_fail(extradata,    src->extradata_size,

                           AV_INPUT_BUFFER_PADDING_SIZE);

    dest->extradata_size  = src->extradata_size;

    alloc_and_copy_or_fail(intra_matrix, 64 * sizeof(int16_t), 0);

    alloc_and_copy_or_fail(inter_matrix, 64 * sizeof(int16_t), 0);

    alloc_and_copy_or_fail(rc_override,  src->rc_override_count * sizeof(*src->rc_override), 0);

    alloc_and_copy_or_fail(subtitle_header, src->subtitle_header_size, 1);

    av_assert0(dest->subtitle_header_size == src->subtitle_header_size);

#undef alloc_and_copy_or_fail



    if (src->hw_frames_ctx) {

        dest->hw_frames_ctx = av_buffer_ref(src->hw_frames_ctx);

        if (!dest->hw_frames_ctx)

            goto fail;

    }



    return 0;



fail:

    copy_context_reset(dest);

    return AVERROR(ENOMEM);

}
int FUNC_0(AVCodecContext *VAR_0, const AVCodecContext *VAR_1)

{

    const AVCodec *VAR_2 = VAR_0->codec;

    uint8_t *orig_priv_data = VAR_0->priv_data;



    if (avcodec_is_open(VAR_0)) { 

        av_log(VAR_0, AV_LOG_ERROR,

               "Tried to copy AVCodecContext %p into already-initialized %p\n",

               VAR_1, VAR_0);

        return AVERROR(EINVAL);

    }



    copy_context_reset(VAR_0);



    memcpy(VAR_0, VAR_1, sizeof(*VAR_0));

    av_opt_copy(VAR_0, VAR_1);



    VAR_0->priv_data       = orig_priv_data;

    VAR_0->codec           = VAR_2;



    if (orig_priv_data && VAR_1->codec && VAR_1->codec->priv_class &&

        VAR_0->codec && VAR_0->codec->priv_class)

        av_opt_copy(orig_priv_data, VAR_1->priv_data);





    

    VAR_0->slice_offset    = NULL;

    VAR_0->hwaccel         = NULL;

    VAR_0->internal        = NULL;

#if FF_API_CODED_FRAME

FF_DISABLE_DEPRECATION_WARNINGS

    VAR_0->coded_frame     = NULL;

FF_ENABLE_DEPRECATION_WARNINGS

#endif



    

    VAR_0->extradata       = NULL;


    VAR_0->intra_matrix    = NULL;

    VAR_0->inter_matrix    = NULL;

    VAR_0->rc_override     = NULL;

    VAR_0->subtitle_header = NULL;

    VAR_0->hw_frames_ctx   = NULL;





#define alloc_and_copy_or_fail(obj, size, pad) \

    if (VAR_1->obj && size > 0) { \

        VAR_0->obj = av_malloc(size + pad); \

        if (!VAR_0->obj) \

            goto fail; \

        memcpy(VAR_0->obj, VAR_1->obj, size); \

        if (pad) \

            memset(((uint8_t *) VAR_0->obj) + size, 0, pad); \

    }

    alloc_and_copy_or_fail(extradata,    VAR_1->extradata_size,

                           AV_INPUT_BUFFER_PADDING_SIZE);

    VAR_0->extradata_size  = VAR_1->extradata_size;

    alloc_and_copy_or_fail(intra_matrix, 64 * sizeof(int16_t), 0);

    alloc_and_copy_or_fail(inter_matrix, 64 * sizeof(int16_t), 0);

    alloc_and_copy_or_fail(rc_override,  VAR_1->rc_override_count * sizeof(*VAR_1->rc_override), 0);

    alloc_and_copy_or_fail(subtitle_header, VAR_1->subtitle_header_size, 1);

    av_assert0(VAR_0->subtitle_header_size == VAR_1->subtitle_header_size);

#undef alloc_and_copy_or_fail



    if (VAR_1->hw_frames_ctx) {

        VAR_0->hw_frames_ctx = av_buffer_ref(VAR_1->hw_frames_ctx);

        if (!VAR_0->hw_frames_ctx)

            goto fail;

    }



    return 0;



fail:

    copy_context_reset(VAR_0);

    return AVERROR(ENOMEM);

}
int FUNC_0(AVCodecContext *VAR_0, const AVCodecContext *VAR_1)
{ const AVCodec *VAR_2 = VAR_0->codec; uint8_t *orig_priv_data = VAR_0->priv_data; if (avcodec_is_open(VAR_0)) { av_log(VAR_0, AV_LOG_ERROR,
"Tried to copy AVCodecContext %p into already-initialized %p\n",
VAR_1, VAR_0); return AVERROR(EINVAL); } copy_context_reset(VAR_0); memcpy(VAR_0, VAR_1, sizeof(*VAR_0)); av_opt_copy(VAR_0, VAR_1); VAR_0->priv_data       = orig_priv_data; VAR_0->codec           = VAR_2; if (orig_priv_data && VAR_1->codec && VAR_1->codec->priv_class &&
VAR_0->codec && VAR_0->codec->priv_class)
av_opt_copy(orig_priv_data, VAR_1->priv_data); VAR_0->slice_offset    = NULL; VAR_0->hwaccel         = NULL; VAR_0->internal        = NULL; #if FF_API_CODED_FRAME
FF_DISABLE_DEPRECATION_WARNINGS
VAR_0->coded_frame     = NULL; FF_ENABLE_DEPRECATION_WARNINGS
#endif
VAR_0->extradata       = NULL; VAR_0->intra_matrix    = NULL; VAR_0->inter_matrix    = NULL; VAR_0->rc_override     = NULL; VAR_0->subtitle_header = NULL; VAR_0->hw_frames_ctx   = NULL; #define alloc_and_copy_or_fail(obj, size, pad) \
if (VAR_1->obj && size > 0) { \ VAR_0->obj = av_malloc(size + pad); \ if (!VAR_0->obj) \
goto fail; \ memcpy(VAR_0->obj, VAR_1->obj, size); \ if (pad) \
memset(((uint8_t *) VAR_0->obj) + size, 0, pad); \ } alloc_and_copy_or_fail(extradata,    VAR_1->extradata_size,
AV_INPUT_BUFFER_PADDING_SIZE); VAR_0->extradata_size  = VAR_1->extradata_size; alloc_and_copy_or_fail(intra_matrix, 64 * sizeof(int16_t), 0); alloc_and_copy_or_fail(inter_matrix, 64 * sizeof(int16_t), 0); alloc_and_copy_or_fail(rc_override,  VAR_1->rc_override_count * sizeof(*VAR_1->rc_override), 0); alloc_and_copy_or_fail(subtitle_header, VAR_1->subtitle_header_size, 1); av_assert0(VAR_0->subtitle_header_size == VAR_1->subtitle_header_size); #undef alloc_and_copy_or_fail
if (VAR_1->hw_frames_ctx) { VAR_0->hw_frames_ctx = av_buffer_ref(VAR_1->hw_frames_ctx); if (!VAR_0->hw_frames_ctx)
goto fail; } return 0; fail:
copy_context_reset(VAR_0); return AVERROR(ENOMEM); }