replace 'av_init_packet' to 'av_packet_alloc' 84/267784/4 accepted/tizen/unified/20211213.133626 submit/tizen/20211209.083747
authorJiyong Min <jiyong.min@samsung.com>
Fri, 10 Dec 2021 00:23:33 +0000 (09:23 +0900)
committerJiyong Min <jiyong.min@samsung.com>
Fri, 10 Dec 2021 03:25:06 +0000 (12:25 +0900)
 - 'av_init_packet' function was deprecated since ffmpeg 4.4.1

Change-Id: I2a2e4ed6afb4cba9a81ae15ade40b0777ba21679

packaging/libheif.spec
src/heif_decode_ffmpeg.c

index 2c22b55647f3df33feb67d722c5aab2308601c85..ca7b128437697570c12df31185f42e923babe6e8 100644 (file)
@@ -1,6 +1,6 @@
 Name:       libheif
 Summary:    Multimedia Framework Library for HEIF(ISO/IEC 23008-12) image
-Version:    0.0.4
+Version:    0.0.5
 Release:    0
 Group:      Multimedia/Libraries
 License:    Apache-2.0
index 22591ec2bc933b23c4a21575b38abca91a6f5427..5a2b37bc0664c56c0156b378254c222c76893eb9 100644 (file)
@@ -37,7 +37,6 @@
 typedef struct {
        AVCodecContext *ctx;
        AVCodec *codec;
-       AVPacket pkt;
 } _ffmpeg_decoder_t;
 
 
@@ -155,28 +154,32 @@ FAIL:
        return LIBHEIF_ERROR_INVALID_OPERATION;
 }
 
-static int __ffmpeg_send_media(_ffmpeg_decoder_t *decoder, heif_buffer_t *media_data)
+static int __ffmpeg_packet_alloc_from_data(AVPacket **pkt, heif_buffer_t *media_data)
 {
+       AVPacket *_pkt;
        uint8_t *pkt_buf;
 
-       heif_retvm_if_failed(decoder, LIBHEIF_ERROR_INVALID_PARAMETER, "invalid decoder");
+       heif_retvm_if_failed(pkt, LIBHEIF_ERROR_INVALID_PARAMETER, "invalid pkt");
        heif_retvm_if_failed(media_data, LIBHEIF_ERROR_INVALID_PARAMETER, "invalid media_data");
        heif_retvm_if_failed(media_data->data, LIBHEIF_ERROR_INVALID_PARAMETER, "invalid media_data->data");
        heif_retvm_if_failed(media_data->size > 0, LIBHEIF_ERROR_INVALID_PARAMETER, "invalid media_data->size");
 
-       av_packet_unref(&(decoder->pkt));
-
-       av_init_packet(&(decoder->pkt));
+       _pkt = av_packet_alloc();
+       heif_retvm_if_failed(_pkt, LIBHEIF_ERROR_INVALID_OPERATION, "av_packet_alloc fail");
 
-       // this buffer should be released by av_packet_unref
-       pkt_buf = g_memdup(media_data->data, media_data->size);
+       // this buffer should be released by av_packet_unref or av_packet_free
+       pkt_buf = av_memdup(media_data->data, media_data->size);
+       heif_retvm_if_failed(pkt_buf, LIBHEIF_ERROR_INVALID_OPERATION, "av_memdup fail");
 
-       if (av_packet_from_data(&decoder->pkt, pkt_buf, media_data->size) < 0) {
+       if (av_packet_from_data(_pkt, pkt_buf, media_data->size) < 0) {
                heif_error("av_packet_from_data fail");
                g_free(pkt_buf);
+               av_packet_free(&_pkt);
                return LIBHEIF_ERROR_INVALID_OPERATION;
        }
 
+       *pkt = _pkt;
+
        return LIBHEIF_ERROR_NONE;
 }
 
@@ -266,7 +269,6 @@ static void __ffmpeg_destroy_decoder(plugin_decode_h decoder)
 
        heif_retm_if_failed(decoder);
 
-       av_packet_unref(&_decoder->pkt);
        if (_decoder->ctx) {
                avcodec_close(_decoder->ctx);
                av_freep(&_decoder->ctx);
@@ -279,6 +281,7 @@ static void __ffmpeg_destroy_decoder(plugin_decode_h decoder)
 static int __ffmpeg_decode_image(plugin_decode_h decoder, heif_buffer_t *media_data, heif_color_format_e colr_fmt, heif_image_t **decoded_image)
 {
        int ret = LIBHEIF_ERROR_NONE;
+       AVPacket *pkt = NULL;
        AVFrame *frame = NULL;
        _ffmpeg_decoder_t *_decoder = (_ffmpeg_decoder_t *)decoder;
 
@@ -286,11 +289,8 @@ static int __ffmpeg_decode_image(plugin_decode_h decoder, heif_buffer_t *media_d
 
        heif_debug_fenter();
 
-       ret = __ffmpeg_send_media(_decoder, media_data);
-       if (ret != LIBHEIF_ERROR_NONE) {
-               heif_error("__ffmpeg_send_media fail (%d)", ret);
-               return LIBHEIF_ERROR_INVALID_OPERATION;
-       }
+       ret = __ffmpeg_packet_alloc_from_data(&pkt, media_data);
+       heif_retvm_if_failed(ret == LIBHEIF_ERROR_NONE, ret, "__ffmpeg_packet_alloc_from_data fail (%d)", ret);
 
        avcodec_flush_buffers(_decoder->ctx);
 
@@ -302,7 +302,7 @@ static int __ffmpeg_decode_image(plugin_decode_h decoder, heif_buffer_t *media_d
        }
 
        // decode
-       if (avcodec_send_packet(_decoder->ctx, &_decoder->pkt) < 0) {
+       if (avcodec_send_packet(_decoder->ctx, pkt) < 0) {
                heif_error("avcodec_send_packet fail");
                ret = LIBHEIF_ERROR_INVALID_OPERATION;
                goto END;
@@ -320,6 +320,7 @@ static int __ffmpeg_decode_image(plugin_decode_h decoder, heif_buffer_t *media_d
 
 END:
        av_frame_free(&frame);
+       av_packet_free(&pkt);
 
        heif_debug_fleave();