Package: sflphone
Version: 1.4.1-0.4
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..34daaae
--- /dev/null
+++ b/debian/patches/ffmpeg_2.9.patch
@@ -0,0 +1,188 @@
+Description: Replace deprecated FFmpeg API
+Author: Andreas Cadhalpun <andreas.cadhal...@googlemail.com>
+Last-Update: <2015-11-02>
+
+--- sflphone-1.4.1.orig/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia-codec/ffmpeg_vid_codecs.c
++++ sflphone-1.4.1/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia-codec/ffmpeg_vid_codecs.c
+@@ -194,7 +194,7 @@ typedef struct ffmpeg_private
+     /* The ffmpeg decoder cannot set the output format, so format conversion
+      * may be needed for post-decoding.
+      */
+-    enum PixelFormat		     expected_dec_fmt;
++    enum AVPixelFormat		     expected_dec_fmt;
+ 						/**< Expected output format of 
+ 						     ffmpeg decoder	    */
+ 
+@@ -673,7 +673,7 @@ PJ_DEF(pj_status_t) pjmedia_codec_ffmpeg
+ 	    pjmedia_format_id raw_fmt[PJMEDIA_VID_CODEC_MAX_DEC_FMT_CNT];
+ 	    unsigned raw_fmt_cnt = 0;
+ 	    unsigned raw_fmt_cnt_should_be = 0;
+-	    const enum PixelFormat *p = c->pix_fmts;
++	    const enum AVPixelFormat *p = c->pix_fmts;
+ 
+ 	    for(;(p && *p != -1) &&
+ 		 (raw_fmt_cnt < PJMEDIA_VID_CODEC_MAX_DEC_FMT_CNT);
+@@ -1094,7 +1094,7 @@ static void print_ffmpeg_err(int err)
+ static pj_status_t open_ffmpeg_codec(ffmpeg_private *ff,
+                                      pj_mutex_t *ff_mutex)
+ {
+-    enum PixelFormat pix_fmt;
++    enum AVPixelFormat pix_fmt;
+     pjmedia_video_format_detail *vfd;
+     pj_bool_t enc_opened = PJ_FALSE, dec_opened = PJ_FALSE;
+     pj_status_t status;
+@@ -1427,7 +1427,7 @@ static pj_status_t ffmpeg_codec_encode_w
+     /* Check if encoder has been opened */
+     PJ_ASSERT_RETURN(ff->enc_ctx, PJ_EINVALIDOP);
+ 
+-    avcodec_get_frame_defaults(&avframe);
++    av_frame_unref(&avframe);
+ 
+     // Let ffmpeg manage the timestamps
+     /*
+@@ -1677,7 +1677,7 @@ static pj_status_t ffmpeg_codec_decode_w
+      * whole decoding session, and seems to be freed when the codec context
+      * closed).
+      */
+-    avcodec_get_frame_defaults(&avframe);
++    av_frame_unref(&avframe);
+ 
+     /* Init packet, the container of the encoded data */
+     av_init_packet(&avpacket);
+--- sflphone-1.4.1.orig/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia-videodev/ffmpeg_dev.c
++++ sflphone-1.4.1/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia-videodev/ffmpeg_dev.c
+@@ -176,7 +176,7 @@ static pj_status_t ffmpeg_capture_open(A
+     fp.prealloced_context = 1;
+     fp.width = vfd->size.w;
+     fp.height = vfd->size.h;
+-    fp.pix_fmt = PIX_FMT_BGR24;
++    fp.pix_fmt = AV_PIX_FMT_BGR24;
+     fp.time_base.num = vfd->fps.denum;
+     fp.time_base.den = vfd->fps.num;
+ 
+--- sflphone-1.4.1.orig/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia/converter_libswscale.c
++++ sflphone-1.4.1/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia/converter_libswscale.c
+@@ -66,7 +66,7 @@ static pj_status_t factory_create_conver
+ 					    const pjmedia_conversion_param *prm,
+ 					    pjmedia_converter **p_cv)
+ {
+-    enum PixelFormat srcFormat, dstFormat;
++    enum AVPixelFormat srcFormat, dstFormat;
+     const pjmedia_video_format_detail *src_detail, *dst_detail;
+     const pjmedia_video_format_info *src_fmt_info, *dst_fmt_info;
+     struct SwsContext *sws_ctx;
+--- sflphone-1.4.1.orig/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia/ffmpeg_util.c
++++ sflphone-1.4.1/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia/ffmpeg_util.c
+@@ -34,28 +34,28 @@
+ 
+ 
+ 
+-/* Conversion table between pjmedia_format_id and PixelFormat */
++/* Conversion table between pjmedia_format_id and AVPixelFormat */
+ static const struct ffmpeg_fmt_table_t
+ {
+     pjmedia_format_id	id;
+-    enum PixelFormat	pf;
++    enum AVPixelFormat	pf;
+ } ffmpeg_fmt_table[] =
+ {
+-    { PJMEDIA_FORMAT_RGBA, PIX_FMT_RGBA},
+-    { PJMEDIA_FORMAT_RGB24,PIX_FMT_BGR24},
+-    { PJMEDIA_FORMAT_BGRA, PIX_FMT_BGRA},
++    { PJMEDIA_FORMAT_RGBA, AV_PIX_FMT_RGBA},
++    { PJMEDIA_FORMAT_RGB24,AV_PIX_FMT_BGR24},
++    { PJMEDIA_FORMAT_BGRA, AV_PIX_FMT_BGRA},
+ #if VER_AT_LEAST(51,20,1)
+-    { PJMEDIA_FORMAT_GBRP, PIX_FMT_GBR24P},
++    { PJMEDIA_FORMAT_GBRP, AV_PIX_FMT_GBR24P},
+ #endif
+ 
+-    { PJMEDIA_FORMAT_AYUV, PIX_FMT_NONE},
+-    { PJMEDIA_FORMAT_YUY2, PIX_FMT_YUYV422},
+-    { PJMEDIA_FORMAT_UYVY, PIX_FMT_UYVY422},
+-    { PJMEDIA_FORMAT_I420, PIX_FMT_YUV420P},
+-    //{ PJMEDIA_FORMAT_YV12, PIX_FMT_YUV420P},
+-    { PJMEDIA_FORMAT_I422, PIX_FMT_YUV422P},
+-    { PJMEDIA_FORMAT_I420JPEG, PIX_FMT_YUVJ420P},
+-    { PJMEDIA_FORMAT_I422JPEG, PIX_FMT_YUVJ422P},
++    { PJMEDIA_FORMAT_AYUV, AV_PIX_FMT_NONE},
++    { PJMEDIA_FORMAT_YUY2, AV_PIX_FMT_YUYV422},
++    { PJMEDIA_FORMAT_UYVY, AV_PIX_FMT_UYVY422},
++    { PJMEDIA_FORMAT_I420, AV_PIX_FMT_YUV420P},
++    //{ PJMEDIA_FORMAT_YV12, AV_PIX_FMT_YUV420P},
++    { PJMEDIA_FORMAT_I422, AV_PIX_FMT_YUV422P},
++    { PJMEDIA_FORMAT_I420JPEG, AV_PIX_FMT_YUVJ420P},
++    { PJMEDIA_FORMAT_I422JPEG, AV_PIX_FMT_YUVJ422P},
+ };
+ 
+ /* Conversion table between pjmedia_format_id and CodecID */
+@@ -136,22 +136,22 @@ static void ffmpeg_log_cb(void* ptr, int
+ 
+ 
+ pj_status_t pjmedia_format_id_to_PixelFormat(pjmedia_format_id fmt_id,
+-					     enum PixelFormat *pixel_format)
++					     enum AVPixelFormat *pixel_format)
+ {
+     unsigned i;
+     for (i=0; i<PJ_ARRAY_SIZE(ffmpeg_fmt_table); ++i) {
+ 	const struct ffmpeg_fmt_table_t *t = &ffmpeg_fmt_table[i];
+-	if (t->id==fmt_id && t->pf != PIX_FMT_NONE) {
++	if (t->id==fmt_id && t->pf != AV_PIX_FMT_NONE) {
+ 	    *pixel_format = t->pf;
+ 	    return PJ_SUCCESS;
+ 	}
+     }
+ 
+-    *pixel_format = PIX_FMT_NONE;
++    *pixel_format = AV_PIX_FMT_NONE;
+     return PJ_ENOTFOUND;
+ }
+ 
+-pj_status_t PixelFormat_to_pjmedia_format_id(enum PixelFormat pf,
++pj_status_t PixelFormat_to_pjmedia_format_id(enum AVPixelFormat pf,
+ 					     pjmedia_format_id *fmt_id)
+ {
+     unsigned i;
+@@ -172,13 +172,13 @@ pj_status_t pjmedia_format_id_to_CodecID
+     unsigned i;
+     for (i=0; i<PJ_ARRAY_SIZE(ffmpeg_codec_table); ++i) {
+ 	const struct ffmpeg_codec_table_t *t = &ffmpeg_codec_table[i];
+-	if (t->id==fmt_id && t->codec_id != PIX_FMT_NONE) {
++	if (t->id==fmt_id && t->codec_id != AV_PIX_FMT_NONE) {
+ 	    *codec_id = t->codec_id;
+ 	    return PJ_SUCCESS;
+ 	}
+     }
+ 
+-    *codec_id = PIX_FMT_NONE;
++    *codec_id = AV_PIX_FMT_NONE;
+     return PJ_ENOTFOUND;
+ }
+ 
+--- sflphone-1.4.1.orig/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia/ffmpeg_util.h
++++ sflphone-1.4.1/daemon/libs/pjproject-2.2.1/pjmedia/src/pjmedia/ffmpeg_util.h
+@@ -41,9 +41,9 @@ void pjmedia_ffmpeg_add_ref();
+ void pjmedia_ffmpeg_dec_ref();
+ 
+ pj_status_t pjmedia_format_id_to_PixelFormat(pjmedia_format_id fmt_id,
+-					     enum PixelFormat *pixel_format);
++					     enum AVPixelFormat *pixel_format);
+ 
+-pj_status_t PixelFormat_to_pjmedia_format_id(enum PixelFormat pf,
++pj_status_t PixelFormat_to_pjmedia_format_id(enum AVPixelFormat pf,
+ 					     pjmedia_format_id *fmt_id);
+ 
+ pj_status_t pjmedia_format_id_to_CodecID(pjmedia_format_id fmt_id,
+--- sflphone-1.4.1.orig/daemon/src/video/video_scaler.cpp
++++ sflphone-1.4.1/daemon/src/video/video_scaler.cpp
+@@ -76,8 +76,8 @@ static inline bool is_yuv_planar(const A
+ {
+     unsigned used_bit_mask = (1u << desc->nb_components) - 1;
+ 
+-    if (not (desc->flags & PIX_FMT_PLANAR)
+-        or desc->flags & PIX_FMT_RGB)
++    if (not (desc->flags & AV_PIX_FMT_FLAG_PLANAR)
++        or desc->flags & AV_PIX_FMT_FLAG_RGB)
+         return false;
+ 
+     /* handle formats that do not use all planes */
diff --git a/debian/patches/series b/debian/patches/series
index db6be40..4308eed 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -5,3 +5,4 @@ remove-nonexistant-kde-include-dir.patch
 gcc-5.patch
 gcc-5-2.patch
 fix_cmake.patch
+ffmpeg_2.9.patch

Reply via email to