* gnu/packages/patches/libextractor-ffmpeg-3.patch: Add additional fixes and harmonize with patches in upstream repository.
		
			
				
	
	
		
			360 lines
		
	
	
	
		
			9.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			360 lines
		
	
	
	
		
			9.7 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
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 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[],
 | 
						|
-		  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,
 |