gnu: libextractor: Improve ffmpeg-3 patch.
* gnu/packages/patches/libextractor-ffmpeg-3.patch: Add additional fixes and harmonize with patches in upstream repository.
This commit is contained in:
		
							parent
							
								
									fd7fd3c167
								
							
						
					
					
						commit
						37b2dba1cc
					
				
					 1 changed files with 260 additions and 47 deletions
				
			
		|  | @ -1,11 +1,23 @@ | |||
| Fix build for ffmpeg-3.0. | ||||
| Based on a patch by Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com> | ||||
| for ffmpeg-2.9, found at <https://gnunet.org/bugs/view.php?id=4167> | ||||
| and later modified by Mark H Weaver <mhw@netris.org> 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 <mhw@netris.org> | ||||
| 
 | ||||
| --- 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 <ffmpeg/swscale.h> | ||||
|  #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 <mhw@netris.org> 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, | ||||
|  |  | |||
		Reference in a new issue