From 37b2dba1ccfff25b3beb8f50515c0ec14ed27f8e Mon Sep 17 00:00:00 2001 From: Mark H Weaver Date: Mon, 4 Apr 2016 23:48:34 -0400 Subject: gnu: libextractor: Improve ffmpeg-3 patch. * gnu/packages/patches/libextractor-ffmpeg-3.patch: Add additional fixes and harmonize with patches in upstream repository. --- gnu/packages/patches/libextractor-ffmpeg-3.patch | 307 +++++++++++++++++++---- 1 file changed, 260 insertions(+), 47 deletions(-) (limited to 'gnu/packages/patches/libextractor-ffmpeg-3.patch') diff --git a/gnu/packages/patches/libextractor-ffmpeg-3.patch b/gnu/packages/patches/libextractor-ffmpeg-3.patch index 7688bdc37f..d0f83f624c 100644 --- a/gnu/packages/patches/libextractor-ffmpeg-3.patch +++ b/gnu/packages/patches/libextractor-ffmpeg-3.patch @@ -1,11 +1,23 @@ -Fix build for ffmpeg-3.0. -Based on a patch by Andreas Cadhalpun -for ffmpeg-2.9, found at -and later modified by Mark H Weaver for ffmpeg-3.0. +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 22:42:17.859001669 -0400 -@@ -153,7 +153,7 @@ ++++ 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[], @@ -14,134 +26,335 @@ and later modified by Mark H Weaver for ffmpeg-3.0. const uint8_t * const src_data[], int dst_width, int dst_height, uint8_t **output_data, -@@ -189,7 +189,7 @@ +@@ -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, AV_PIX_FMT_RGB24, ++ dst_width, dst_height, ++ PIX_OUTPUT_FORMAT, SWS_BILINEAR, NULL, NULL, NULL))) { #if DEBUG -@@ -199,7 +199,7 @@ +@@ -199,7 +206,12 @@ return 0; } - if (NULL == (dst_frame = avcodec_alloc_frame ())) -+ if (NULL == (dst_frame = av_frame_alloc ())) ++#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,7 +209,7 @@ +@@ -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 (AV_PIX_FMT_RGB24, dst_width, dst_height)))) ++ av_malloc (avpicture_get_size (PIX_OUTPUT_FORMAT, ++ dst_width, dst_height)))) { #if DEBUG fprintf (stderr, -@@ -220,7 +220,7 @@ + "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); -+ AV_PIX_FMT_RGB24, dst_width, dst_height); ++ PIX_OUTPUT_FORMAT, ++ dst_width, dst_height); sws_scale (scaler_ctx, src_data, src_stride, -@@ -255,7 +255,7 @@ +@@ -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 = AV_PIX_FMT_RGB24; ++ encoder_codec_ctx->pix_fmt = PIX_OUTPUT_FORMAT; opts = NULL; if (avcodec_open2 (encoder_codec_ctx, encoder_codec, &opts) < 0) { -@@ -410,7 +410,7 @@ +@@ -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 (NULL == (frame = av_frame_alloc ())) ++#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, -@@ -563,7 +563,7 @@ + "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 (NULL == (frame = av_frame_alloc ())) ++#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 22:49:05.168105265 -0400 -@@ -296,7 +296,7 @@ ++++ 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 (!(*frame = av_frame_alloc())) { - #if DEBUG +- #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 -@@ -655,7 +655,7 @@ + return AVERROR(ENOMEM); +@@ -655,7 +660,11 @@ av_freep(&converted_input_samples[0]); free(converted_input_samples); } -- avcodec_free_frame(&input_frame); -+ av_frame_free(&input_frame); ++#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,7 +671,7 @@ +@@ -671,10 +680,15 @@ int error; /** Create a new frame to store the audio samples. */ - if (!(*frame = avcodec_alloc_frame())) { -+ if (!(*frame = av_frame_alloc())) { - #if DEBUG +- #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 -@@ -702,7 +702,7 @@ - #if DEBUG +- #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 -- avcodec_free_frame(frame); -+ av_frame_free(frame); +- #endif ++#endif ++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(55,28,1) ++ av_frame_free (frame); ++#else + avcodec_free_frame(frame); ++#endif return error; } -@@ -783,17 +783,17 @@ - #if DEBUG +@@ -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 -- avcodec_free_frame(&output_frame); -+ av_frame_free(&output_frame); +- #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)) { -- avcodec_free_frame(&output_frame); -+ av_frame_free(&output_frame); ++#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; } -- avcodec_free_frame(&output_frame); -+ av_frame_free(&output_frame); ++#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 +907,7 @@ +@@ -907,7 +937,12 @@ return; } - if (NULL == (frame = avcodec_alloc_frame ())) -+ if (NULL == (frame = av_frame_alloc ())) ++#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, -- cgit 1.4.1