Fix build with ffmpeg-3, based on upstream revisions r35548 and r35549 by LRN and r36975 by Christian Grothoff, and backported to libextractor-1.3 by Mark H Weaver --- libextractor-1.3/src/plugins/thumbnailffmpeg_extractor.c.orig 2013-12-21 11:04:41.000000000 -0500 +++ libextractor-1.3/src/plugins/thumbnailffmpeg_extractor.c 2016-04-04 23:38:46.429041081 -0400 @@ -59,6 +59,12 @@ #include #endif +#ifdef PIX_FMT_RGB24 +#define PIX_OUTPUT_FORMAT PIX_FMT_RGB24 +#else +#define PIX_OUTPUT_FORMAT AV_PIX_FMT_RGB24 +#endif + /** * Set to 1 to enable debug output. */ @@ -153,7 +159,7 @@ static size_t create_thumbnail (int src_width, int src_height, int src_stride[], - enum PixelFormat src_pixfmt, + enum AVPixelFormat src_pixfmt, const uint8_t * const src_data[], int dst_width, int dst_height, uint8_t **output_data, @@ -189,7 +195,8 @@ if (NULL == (scaler_ctx = sws_getContext (src_width, src_height, src_pixfmt, - dst_width, dst_height, PIX_FMT_RGB24, + dst_width, dst_height, + PIX_OUTPUT_FORMAT, SWS_BILINEAR, NULL, NULL, NULL))) { #if DEBUG @@ -199,7 +206,12 @@ return 0; } - if (NULL == (dst_frame = avcodec_alloc_frame ())) +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + dst_frame = av_frame_alloc (); +#else + dst_frame = avcodec_alloc_frame(); +#endif + if (NULL == dst_frame) { #if DEBUG fprintf (stderr, @@ -209,18 +221,24 @@ return 0; } if (NULL == (dst_buffer = - av_malloc (avpicture_get_size (PIX_FMT_RGB24, dst_width, dst_height)))) + av_malloc (avpicture_get_size (PIX_OUTPUT_FORMAT, + dst_width, dst_height)))) { #if DEBUG fprintf (stderr, "Failed to allocate the destination image buffer\n"); #endif - av_free (dst_frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&dst_frame); +#else + avcodec_free_frame (&dst_frame); +#endif sws_freeContext (scaler_ctx); return 0; } avpicture_fill ((AVPicture *) dst_frame, dst_buffer, - PIX_FMT_RGB24, dst_width, dst_height); + PIX_OUTPUT_FORMAT, + dst_width, dst_height); sws_scale (scaler_ctx, src_data, src_stride, @@ -236,7 +254,11 @@ "Failed to allocate the encoder output buffer\n"); #endif av_free (dst_buffer); - av_free (dst_frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&dst_frame); +#else + avcodec_free_frame (&dst_frame); +#endif sws_freeContext (scaler_ctx); return 0; } @@ -249,13 +271,17 @@ #endif av_free (encoder_output_buffer); av_free (dst_buffer); - av_free (dst_frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&dst_frame); +#else + avcodec_free_frame (&dst_frame); +#endif sws_freeContext (scaler_ctx); return 0; } encoder_codec_ctx->width = dst_width; encoder_codec_ctx->height = dst_height; - encoder_codec_ctx->pix_fmt = PIX_FMT_RGB24; + encoder_codec_ctx->pix_fmt = PIX_OUTPUT_FORMAT; opts = NULL; if (avcodec_open2 (encoder_codec_ctx, encoder_codec, &opts) < 0) { @@ -263,10 +289,14 @@ fprintf (stderr, "Failed to open the encoder\n"); #endif - av_free (encoder_codec_ctx); + avcodec_free_context (&encoder_codec_ctx); av_free (encoder_output_buffer); av_free (dst_buffer); - av_free (dst_frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&dst_frame); +#else + avcodec_free_frame (&dst_frame); +#endif sws_freeContext (scaler_ctx); return 0; } @@ -295,9 +325,13 @@ cleanup: av_dict_free (&opts); avcodec_close (encoder_codec_ctx); - av_free (encoder_codec_ctx); + avcodec_free_context (&encoder_codec_ctx); av_free (dst_buffer); - av_free (dst_frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&dst_frame); +#else + avcodec_free_frame (&dst_frame); +#endif sws_freeContext (scaler_ctx); *output_data = encoder_output_buffer; @@ -406,18 +440,23 @@ fprintf (stderr, "Failed to open image codec\n"); #endif - av_free (codec_ctx); + avcodec_free_context (&codec_ctx); return; } av_dict_free (&opts); - if (NULL == (frame = avcodec_alloc_frame ())) +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + frame = av_frame_alloc (); +#else + frame = avcodec_alloc_frame(); +#endif + if (NULL == frame) { #if DEBUG fprintf (stderr, "Failed to allocate frame\n"); #endif avcodec_close (codec_ctx); - av_free (codec_ctx); + avcodec_free_context (&codec_ctx); return; } @@ -441,9 +480,13 @@ fprintf (stderr, "Failed to decode a complete frame\n"); #endif - av_free (frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&frame); +#else + avcodec_free_frame (&frame); +#endif avcodec_close (codec_ctx); - av_free (codec_ctx); + avcodec_free_context (&codec_ctx); return; } calculate_thumbnail_dimensions (codec_ctx->width, codec_ctx->height, @@ -467,9 +510,13 @@ err); av_free (encoded_thumbnail); } - av_free (frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&frame); +#else + avcodec_free_frame (&frame); +#endif avcodec_close (codec_ctx); - av_free (codec_ctx); + avcodec_free_context (&codec_ctx); } @@ -563,7 +610,12 @@ return; } - if (NULL == (frame = avcodec_alloc_frame ())) +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + frame = av_frame_alloc (); +#else + frame = avcodec_alloc_frame(); +#endif + if (NULL == frame) { #if DEBUG fprintf (stderr, @@ -616,7 +668,11 @@ fprintf (stderr, "Failed to decode a complete frame\n"); #endif - av_free (frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&frame); +#else + avcodec_free_frame (&frame); +#endif avcodec_close (codec_ctx); avformat_close_input (&format_ctx); av_free (io_ctx); @@ -643,7 +699,11 @@ err); av_free (encoded_thumbnail); } - av_free (frame); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&frame); +#else + avcodec_free_frame (&frame); +#endif avcodec_close (codec_ctx); avformat_close_input (&format_ctx); av_free (io_ctx); --- libextractor-1.3/src/plugins/previewopus_extractor.c.orig 2013-12-22 17:44:18.000000000 -0500 +++ libextractor-1.3/src/plugins/previewopus_extractor.c 2016-04-04 23:39:41.377720710 -0400 @@ -296,8 +296,13 @@ /** Initialize one audio frame for reading from the input file */ static int init_input_frame(AVFrame **frame) { - if (!(*frame = avcodec_alloc_frame())) { - #if DEBUG +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + *frame = av_frame_alloc (); +#else + *frame = avcodec_alloc_frame(); +#endif + if (NULL == *frame) { +#if DEBUG fprintf(stderr, "Could not allocate input frame\n"); #endif return AVERROR(ENOMEM); @@ -655,7 +660,11 @@ av_freep(&converted_input_samples[0]); free(converted_input_samples); } +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&input_frame); +#else avcodec_free_frame(&input_frame); +#endif return ret; } @@ -671,10 +680,15 @@ int error; /** Create a new frame to store the audio samples. */ - if (!(*frame = avcodec_alloc_frame())) { - #if DEBUG +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + *frame = av_frame_alloc (); +#else + *frame = avcodec_alloc_frame(); +#endif + if (NULL == *frame) { +#if DEBUG fprintf(stderr, "Could not allocate output frame\n"); - #endif +#endif return AVERROR_EXIT; } @@ -699,10 +713,14 @@ * sure that the audio frame can hold as many samples as specified. */ if ((error = av_frame_get_buffer(*frame, 0)) < 0) { - #if DEBUG +#if DEBUG fprintf(stderr, "Could allocate output frame samples (error '%s')\n", get_error_text(error)); - #endif +#endif +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (frame); +#else avcodec_free_frame(frame); +#endif return error; } @@ -780,20 +798,32 @@ * The samples are stored in the frame temporarily. */ if (av_audio_fifo_read(fifo, (void **)output_frame->data, frame_size) < frame_size) { - #if DEBUG +#if DEBUG fprintf(stderr, "Could not read data from FIFO\n"); - #endif +#endif +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&output_frame); +#else avcodec_free_frame(&output_frame); +#endif return AVERROR_EXIT; } /** Encode one frame worth of audio samples. */ if (encode_audio_frame(output_frame, output_format_context, output_codec_context, &data_written)) { +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&output_frame); +#else avcodec_free_frame(&output_frame); +#endif return AVERROR_EXIT; } +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + av_frame_free (&output_frame); +#else avcodec_free_frame(&output_frame); +#endif return 0; } /** Write the trailer of the output file container. */ @@ -907,7 +937,12 @@ return; } - if (NULL == (frame = avcodec_alloc_frame ())) +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) + frame = av_frame_alloc (); +#else + frame = avcodec_alloc_frame(); +#endif + if (NULL == frame) { #if DEBUG fprintf (stderr,