Package: kino
Version: 1.3.4-2.1
Severity: important
Tags: patch
User: pkg-multimedia-maintain...@lists.alioth.debian.org
Usertags: ffmpeg2.9

Dear Maintainer,

your package fails to build with the upcoming ffmpeg 2.9.
This bug will become release-critical at some point when the
ffmpeg2.9 transition gets closer.

Attached is a patch replacing the deprecated functionality.
It also works with ffmpeg 2.8.
Please apply this patch and forward it upstream, if necessary.

These changes have little regression potential.

Best regards,
Andreas

diff --git a/debian/patches/ffmpeg_2.9.patch b/debian/patches/ffmpeg_2.9.patch
new file mode 100644
index 0000000..66e1e29
--- /dev/null
+++ b/debian/patches/ffmpeg_2.9.patch
@@ -0,0 +1,166 @@
+Description: Replace deprecated FFmpeg API
+Author: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
+Last-Update: <2015-11-02>
+
+--- 1.3.4.orig/src/frame.cc
++++ 1.3.4/src/frame.cc
+@@ -57,7 +57,7 @@ using std::endl;
+ #include "preferences.h"
+ 
+ #if LIBAVUTIL_VERSION_INT >= (50<<16)
+-#define PIX_FMT_YUV422 PIX_FMT_YUYV422
++#define AV_PIX_FMT_YUV422 AV_PIX_FMT_YUYV422
+ #endif
+ 
+ 
+@@ -1059,7 +1059,7 @@ void Frame::ExtractHeader( void )
+ int Frame::ExtractRGB( void * rgb )
+ {
+ #if defined(HAVE_LIBAVCODEC)
+-	AVFrame *frame = avcodec_alloc_frame();
++	AVFrame *frame = av_frame_alloc();
+ 	AVPicture dest;
+ 	int got_picture;
+ 
+@@ -1071,17 +1071,17 @@ int Frame::ExtractRGB( void * rgb )
+ 	avcodec_decode_video2( libavcodec, frame, &got_picture, &pkt );
+ 	if ( got_picture )
+ 	{
+-		avpicture_fill( &dest, static_cast<uint8_t*>( rgb ), PIX_FMT_RGB24, GetWidth(), GetHeight() );
++		avpicture_fill( &dest, static_cast<uint8_t*>( rgb ), AV_PIX_FMT_RGB24, GetWidth(), GetHeight() );
+ #if defined(HAVE_SWSCALE)
+ 		if ( !imgConvertRgbCtx )
+ 			imgConvertRgbCtx = sws_getContext( libavcodec->width, libavcodec->height, libavcodec->pix_fmt,
+-				GetWidth(), GetHeight(), PIX_FMT_RGB24, SWS_FAST_BILINEAR, NULL, NULL, NULL );
++				GetWidth(), GetHeight(), AV_PIX_FMT_RGB24, SWS_FAST_BILINEAR, NULL, NULL, NULL );
+ 		sws_scale( imgConvertRgbCtx, frame->data, frame->linesize, 0, libavcodec->height, dest.data, dest.linesize );
+ #else
+-		img_convert( &dest, PIX_FMT_RGB24, reinterpret_cast<AVPicture*>( frame ), libavcodec->pix_fmt, GetWidth(), GetHeight() );
++		img_convert( &dest, AV_PIX_FMT_RGB24, reinterpret_cast<AVPicture*>( frame ), libavcodec->pix_fmt, GetWidth(), GetHeight() );
+ #endif
+ 	}
+-	av_free( frame );
++	av_frame_free( &frame );
+ #else
+ 	unsigned char *pixels[ 3 ];
+ 	int pitches[ 3 ];
+@@ -1124,7 +1124,7 @@ int Frame::ExtractPreviewRGB( void *rgb )
+ int Frame::ExtractYUV( void *yuv )
+ {
+ #if defined(HAVE_LIBAVCODEC)
+-	AVFrame *frame = avcodec_alloc_frame();;
++	AVFrame *frame = av_frame_alloc();;
+ 	AVPicture output;
+ 	int got_picture;
+ 
+@@ -1136,17 +1136,17 @@ int Frame::ExtractYUV( void *yuv )
+ 	avcodec_decode_video2( libavcodec, frame, &got_picture, &pkt );
+ 	if ( got_picture )
+ 	{
+-		avpicture_fill( &output, static_cast<uint8_t*>( yuv ), PIX_FMT_YUV422, GetWidth(), GetHeight() );
++		avpicture_fill( &output, static_cast<uint8_t*>( yuv ), AV_PIX_FMT_YUV422, GetWidth(), GetHeight() );
+ #if defined(HAVE_SWSCALE)
+ 		if ( !imgConvertYuvCtx )
+ 			imgConvertYuvCtx = sws_getContext( libavcodec->width, libavcodec->height, libavcodec->pix_fmt,
+-				GetWidth(), GetHeight(), PIX_FMT_YUV422, SWS_FAST_BILINEAR, NULL, NULL, NULL );
++				GetWidth(), GetHeight(), AV_PIX_FMT_YUV422, SWS_FAST_BILINEAR, NULL, NULL, NULL );
+ 		sws_scale( imgConvertYuvCtx, frame->data, frame->linesize, 0, libavcodec->height, output.data, output.linesize );
+ #else
+-		img_convert( &output, PIX_FMT_YUV422, (AVPicture *)frame, libavcodec->pix_fmt, GetWidth(), GetHeight() );
++		img_convert( &output, AV_PIX_FMT_YUV422, (AVPicture *)frame, libavcodec->pix_fmt, GetWidth(), GetHeight() );
+ #endif
+ 	}
+-	av_free( frame );
++	av_frame_free( &frame );
+ #else
+ 	unsigned char *pixels[ 3 ];
+ 	int pitches[ 3 ];
+@@ -1163,7 +1163,7 @@ int Frame::ExtractYUV( void *yuv )
+ int Frame::ExtractYUV420( uint8_t *yuv, uint8_t *output[ 3 ] )
+ {
+ #if defined(HAVE_LIBAVCODEC)
+-	AVFrame *frame = avcodec_alloc_frame();
++	AVFrame *frame = av_frame_alloc();
+ 	int got_picture;
+ 
+ 	AVPacket pkt;
+@@ -1175,7 +1175,7 @@ int Frame::ExtractYUV420( uint8_t *yuv, uint8_t *output[ 3 ] )
+ 
+ 	int width = GetWidth(), height = GetHeight();
+ 
+-	if ( libavcodec->pix_fmt == PIX_FMT_YUV420P )   // PAL
++	if ( libavcodec->pix_fmt == AV_PIX_FMT_YUV420P )   // PAL
+ 	{
+ 		int h2 = height / 2;
+ 		int w2 = width / 2;
+@@ -1203,7 +1203,7 @@ int Frame::ExtractYUV420( uint8_t *yuv, uint8_t *output[ 3 ] )
+ 			}
+ 		}
+ 	}
+-	else // libavcodec.pix_fmt == PIX_FMT_YUV411P // NTSC
++	else // libavcodec.pix_fmt == AV_PIX_FMT_YUV411P // NTSC
+ 	{
+ 		int w4 = width / 4;
+ 
+@@ -1233,7 +1233,7 @@ int Frame::ExtractYUV420( uint8_t *yuv, uint8_t *output[ 3 ] )
+ 			}
+ 		}
+ 	}
+-	av_free( frame );
++	av_frame_free( &frame );
+ #else
+ 	unsigned char *pixels[ 3 ];
+ 	int pitches[ 3 ];
+@@ -1365,13 +1365,13 @@ bool Frame::CreateEncoder( bool isPAL, bool isWide )
+ #endif
+ 			avcodecEncoder->thread_count = 2;
+ 			avcodecEncoder->time_base= isPAL ? ( AVRational ){ 1, 25 } : ( AVRational ){ 1001, 30000 };
+-			avcodecEncoder->pix_fmt = isPAL ? PIX_FMT_YUV420P : PIX_FMT_YUV411P;
++			avcodecEncoder->pix_fmt = isPAL ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUV411P;
+ 			avcodecEncoder->flags |= CODEC_FLAG_INTERLACED_DCT;
+ 			avcodec_open2( avcodecEncoder, avcodec_find_encoder( AV_CODEC_ID_DVVIDEO ), NULL );
+ 			tempImage = ( uint8_t* ) av_malloc(
+ 				avpicture_get_size( avcodecEncoder->pix_fmt, avcodecEncoder->width, avcodecEncoder->height ) );
+ #if defined(HAVE_SWSCALE)
+-			imgConvertEncoderCtx = sws_getContext( avcodecEncoder->width, avcodecEncoder->height, PIX_FMT_RGB24,
++			imgConvertEncoderCtx = sws_getContext( avcodecEncoder->width, avcodecEncoder->height, AV_PIX_FMT_RGB24,
+ 				avcodecEncoder->width, avcodecEncoder->height, avcodecEncoder->pix_fmt, SWS_FAST_BILINEAR, NULL, NULL, NULL);
+ #endif
+ 		}
+@@ -1450,8 +1450,8 @@ void Frame::EncodeRGB( uint8_t *rgb )
+ 	if ( CreateEncoder( IsPAL(), IsWide() ) )
+ 	{
+ #if defined(HAVE_LIBAVCODEC)
+-		AVFrame *input = avcodec_alloc_frame();
+-		AVFrame *output = avcodec_alloc_frame();
++		AVFrame *input = av_frame_alloc();
++		AVFrame *output = av_frame_alloc();
+ 
+ 		if ( input && output )
+ 		{
+@@ -1463,12 +1463,12 @@ void Frame::EncodeRGB( uint8_t *rgb )
+ 
+ 			// Convert color space
+ 			avpicture_fill( ( AVPicture* )output, tempImage, avcodecEncoder->pix_fmt, width, height );
+-			avpicture_fill( ( AVPicture* )input, rgb, PIX_FMT_RGB24, width, height );
++			avpicture_fill( ( AVPicture* )input, rgb, AV_PIX_FMT_RGB24, width, height );
+ #if defined(HAVE_SWSCALE)
+ 			sws_scale( imgConvertEncoderCtx, input->data, input->linesize, 0, height,
+ 				output->data, output->linesize);
+ #else
+-			img_convert( ( AVPicture* )output, avcodecEncoder->pix_fmt, ( AVPicture* )input, PIX_FMT_RGB24, width, height );
++			img_convert( ( AVPicture* )output, avcodecEncoder->pix_fmt, ( AVPicture* )input, AV_PIX_FMT_RGB24, width, height );
+ #endif
+ 
+ 			// Encode
+@@ -1490,8 +1490,8 @@ void Frame::EncodeRGB( uint8_t *rgb )
+ 			// Force the output to be IEC 61834
+ 			data[4] &= 0xf8;
+ 
+-			av_free( output );
+-			av_free( input );
++			av_frame_free( &output );
++			av_frame_free( &input );
+ 		}
+ #else
+ 		if ( Preferences::getInstance().dvTwoPassEncoder )
diff --git a/debian/patches/series b/debian/patches/series
index 7d0bb38..2ce421e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -5,3 +5,4 @@
 90_fix_ftbfs_libav_0.8.patch
 100_libav_9.diff
 110_libav10.diff
+ffmpeg_2.9.patch

Reply via email to