media-video/transcode: fix build with ffmpeg git master.
authorAlexis Ballier <aballier@gentoo.org>
Wed, 16 Sep 2015 14:02:44 +0000 (16:02 +0200)
committerAlexis Ballier <aballier@gentoo.org>
Wed, 16 Sep 2015 14:02:44 +0000 (16:02 +0200)
Package-Manager: portage-2.2.20.1

media-video/transcode/files/transcode-1.1.7-ffmpeg29.patch [new file with mode: 0644]
media-video/transcode/transcode-1.1.7-r3.ebuild

diff --git a/media-video/transcode/files/transcode-1.1.7-ffmpeg29.patch b/media-video/transcode/files/transcode-1.1.7-ffmpeg29.patch
new file mode 100644 (file)
index 0000000..7901fc3
--- /dev/null
@@ -0,0 +1,352 @@
+Index: transcode-1.1.7/encode/encode_lavc.c
+===================================================================
+--- transcode-1.1.7.orig/encode/encode_lavc.c
++++ transcode-1.1.7/encode/encode_lavc.c
+@@ -233,7 +233,7 @@ static void pre_encode_video_yuv420p(TCL
+                                      vframe_list_t *vframe)
+ {
+     avpicture_fill((AVPicture *)&pd->ff_venc_frame, vframe->video_buf,
+-                    PIX_FMT_YUV420P,
++                    AV_PIX_FMT_YUV420P,
+                     pd->ff_vcontext.width, pd->ff_vcontext.height);
+ }
+@@ -247,7 +247,7 @@ static void pre_encode_video_yuv420p_huf
+                     IMG_YUV_DEFAULT,
+                     pd->ff_vcontext.width, pd->ff_vcontext.height);
+     avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf,
+-                   PIX_FMT_YUV422P,
++                   AV_PIX_FMT_YUV422P,
+                    pd->ff_vcontext.width, pd->ff_vcontext.height);
+     ac_imgconvert(src, IMG_YUV_DEFAULT,
+                   pd->ff_venc_frame.data, IMG_YUV422P,
+@@ -263,7 +263,7 @@ static void pre_encode_video_yuv422p(TCL
+                     IMG_YUV422P,
+                     pd->ff_vcontext.width, pd->ff_vcontext.height);
+     avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf,
+-                   PIX_FMT_YUV420P,
++                   AV_PIX_FMT_YUV420P,
+                    pd->ff_vcontext.width, pd->ff_vcontext.height);
+     ac_imgconvert(src, IMG_YUV422P,
+                   pd->ff_venc_frame.data, IMG_YUV420P,
+@@ -275,7 +275,7 @@ static void pre_encode_video_yuv422p_huf
+                                              vframe_list_t *vframe)
+ {
+     avpicture_fill((AVPicture *)&pd->ff_venc_frame, vframe->video_buf,
+-                   PIX_FMT_YUV422P,
++                   AV_PIX_FMT_YUV422P,
+                    pd->ff_vcontext.width, pd->ff_vcontext.height);
+ }
+@@ -285,7 +285,7 @@ static void pre_encode_video_rgb24(TCLav
+                                    vframe_list_t *vframe)
+ {
+     avpicture_fill((AVPicture *)&pd->ff_venc_frame, pd->vframe_buf->video_buf,
+-                   PIX_FMT_YUV420P,
++                   AV_PIX_FMT_YUV420P,
+                    pd->ff_vcontext.width, pd->ff_vcontext.height);
+     ac_imgconvert(&vframe->video_buf, IMG_RGB_DEFAULT,
+                   pd->ff_venc_frame.data, IMG_YUV420P,
+@@ -610,21 +610,21 @@ static int tc_lavc_set_pix_fmt(TCLavcPri
+       case CODEC_YUV:
+         if (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV) {
+             pd->tc_pix_fmt = TC_CODEC_YUV422P;
+-            pd->ff_vcontext.pix_fmt = PIX_FMT_YUV422P;
++            pd->ff_vcontext.pix_fmt = AV_PIX_FMT_YUV422P;
+             pd->pre_encode_video = pre_encode_video_yuv420p_huffyuv;
+         } else {
+             pd->tc_pix_fmt = TC_CODEC_YUV420P;
+             pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG) 
+-                                       ? PIX_FMT_YUVJ420P
+-                                       : PIX_FMT_YUV420P;
++                                       ? AV_PIX_FMT_YUVJ420P
++                                       : AV_PIX_FMT_YUV420P;
+             pd->pre_encode_video = pre_encode_video_yuv420p;
+         }
+         break;
+       case CODEC_YUV422:
+         pd->tc_pix_fmt = TC_CODEC_YUV422P;
+         pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG) 
+-                                   ? PIX_FMT_YUVJ422P
+-                                   : PIX_FMT_YUV422P;
++                                   ? AV_PIX_FMT_YUVJ422P
++                                   : AV_PIX_FMT_YUV422P;
+         if (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV) {
+             pd->pre_encode_video = pre_encode_video_yuv422p_huffyuv;
+         } else {
+@@ -634,10 +634,10 @@ static int tc_lavc_set_pix_fmt(TCLavcPri
+       case CODEC_RGB:
+         pd->tc_pix_fmt = TC_CODEC_RGB;
+         pd->ff_vcontext.pix_fmt = (TC_VCODEC_ID(pd) == TC_CODEC_HUFFYUV)
+-                                        ? PIX_FMT_YUV422P
++                                        ? AV_PIX_FMT_YUV422P
+                                         : (TC_VCODEC_ID(pd) == TC_CODEC_MJPEG) 
+-                                           ? PIX_FMT_YUVJ420P
+-                                           : PIX_FMT_YUV420P;
++                                           ? AV_PIX_FMT_YUVJ420P
++                                           : AV_PIX_FMT_YUV420P;
+         pd->pre_encode_video = pre_encode_video_rgb24;
+         break;
+       default:
+@@ -1390,7 +1390,7 @@ static int tc_lavc_configure(TCModuleIns
+     /* FIXME: move into core? */
+     TC_INIT_LIBAVCODEC;
+-    avcodec_get_frame_defaults(&pd->ff_venc_frame);
++    av_frame_unref(&pd->ff_venc_frame);
+     /*
+      * auxiliary config data needs to be blanked too
+      * before any other operation
+@@ -1523,6 +1523,8 @@ static int tc_lavc_encode_video(TCModule
+                                 vframe_list_t *outframe)
+ {
+     TCLavcPrivateData *pd = NULL;
++    AVPacket pkt;
++    int ret, got_packet = 0;
+     TC_MODULE_SELF_CHECK(self, "encode_video");
+@@ -1537,12 +1539,15 @@ static int tc_lavc_encode_video(TCModule
+     pd->pre_encode_video(pd, inframe); 
++    av_init_packet(&pkt);
++    pkt.data = outframe->video_buf;
++    pkt.size = inframe->video_size;
++
+     TC_LOCK_LIBAVCODEC;
+-    outframe->video_len = avcodec_encode_video(&pd->ff_vcontext,
+-                                               outframe->video_buf,
+-                                               inframe->video_size,
+-                                               &pd->ff_venc_frame);
++    ret = avcodec_encode_video2(&pd->ff_vcontext,   &pkt,
++                              &pd->ff_venc_frame, &got_packet);
+     TC_UNLOCK_LIBAVCODEC;
++    outframe->video_len = ret ? ret : pkt.size;
+     if (outframe->video_len < 0) {
+         tc_log_warn(MOD_NAME, "encoder error: size (%i)",
+Index: transcode-1.1.7/export/export_ffmpeg.c
+===================================================================
+--- transcode-1.1.7.orig/export/export_ffmpeg.c
++++ transcode-1.1.7/export/export_ffmpeg.c
+@@ -250,9 +250,9 @@ int opt_default(const char *opt, const c
+     for(type=0; type<AVMEDIA_TYPE_NB && ret>= 0; type++){
+               /* GLUE: +if */
+               if (type == AVMEDIA_TYPE_VIDEO) {
+-        const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]);
+-        if(o2)
+-            ret = av_set_string3(avcodec_opts[type], opt, arg, 1, &o);
++        o = av_opt_find(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]);
++        if(o)
++            ret = av_opt_set(avcodec_opts[type], opt, arg, 0);
+               /* GLUE: +if */
+               }
+     }
+@@ -267,7 +267,10 @@ int opt_default(const char *opt, const c
+         if(opt[0] == 'a')
+             ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_AUDIO], opt+1, arg, 1, &o);
+         else */ if(opt[0] == 'v')
+-            ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 1, &o);
++      {
++          o = av_opt_find(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, NULL, 0, 0);
++            ret = av_opt_set(avcodec_opts[AVMEDIA_TYPE_VIDEO], opt+1, arg, 0);
++      }
+               /* GLUE: disabling
+         else if(opt[0] == 's')
+             ret = av_set_string3(avcodec_opts[AVMEDIA_TYPE_SUBTITLE], opt+1, arg, 1, &o);
+@@ -487,10 +490,10 @@ MOD_init
+     }
+     lavc_venc_context = avcodec_alloc_context3(lavc_venc_codec);
+-    lavc_venc_frame   = avcodec_alloc_frame();
++    lavc_venc_frame   = av_frame_alloc();
+-    lavc_convert_frame= avcodec_alloc_frame();
+-    size = avpicture_get_size(PIX_FMT_RGB24, vob->ex_v_width, vob->ex_v_height);
++    lavc_convert_frame= av_frame_alloc();
++    size = avpicture_get_size(AV_PIX_FMT_RGB24, vob->ex_v_width, vob->ex_v_height);
+     enc_buffer = tc_malloc(size);
+     if (lavc_venc_context == NULL || !enc_buffer || !lavc_convert_frame) {
+@@ -1114,7 +1117,7 @@ MOD_init
+     lavc_venc_context->prediction_method = lavc_param_prediction_method;
+     if(is_huffyuv)
+-        lavc_venc_context->pix_fmt = PIX_FMT_YUV422P;
++        lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV422P;
+     else
+     {
+         switch(pix_fmt)
+@@ -1123,18 +1126,18 @@ MOD_init
+             case CODEC_RGB:
+             {
+                 if(is_mjpeg)
+-                    lavc_venc_context->pix_fmt = PIX_FMT_YUVJ420P;
++                    lavc_venc_context->pix_fmt = AV_PIX_FMT_YUVJ420P;
+                 else
+-                    lavc_venc_context->pix_fmt = PIX_FMT_YUV420P;
++                    lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV420P;
+                 break;
+             }
+             case CODEC_YUV422:
+             {
+                 if(is_mjpeg)
+-                    lavc_venc_context->pix_fmt = PIX_FMT_YUVJ422P;
++                    lavc_venc_context->pix_fmt = AV_PIX_FMT_YUVJ422P;
+                 else
+-                    lavc_venc_context->pix_fmt = PIX_FMT_YUV422P;
++                    lavc_venc_context->pix_fmt = AV_PIX_FMT_YUV422P;
+                 break;
+             }
+@@ -1596,6 +1599,8 @@ MOD_encode
+   int out_size;
+   const char pict_type_char[5]= {'?', 'I', 'P', 'B', 'S'};
++  AVPacket pkt;
++  int ret, got_packet = 0;
+   if (param->flag == TC_VIDEO) {
+@@ -1620,7 +1625,7 @@ MOD_encode
+                       YUV_INIT_PLANES(src, param->buffer, IMG_YUV_DEFAULT,
+                                               lavc_venc_context->width, lavc_venc_context->height);
+                 avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer,
+-                               PIX_FMT_YUV422P, lavc_venc_context->width,
++                               AV_PIX_FMT_YUV422P, lavc_venc_context->width,
+                                lavc_venc_context->height);
+                       /* FIXME: can't use tcv_convert (see decode_lavc.c) */
+                 ac_imgconvert(src, IMG_YUV_DEFAULT,
+@@ -1650,7 +1655,7 @@ MOD_encode
+                                               lavc_venc_context->width,
+                                 lavc_venc_context->height);
+                 avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer,
+-                               PIX_FMT_YUV420P, lavc_venc_context->width,
++                               AV_PIX_FMT_YUV420P, lavc_venc_context->width,
+                                lavc_venc_context->height);
+                 ac_imgconvert(src, IMG_YUV422P,
+                               lavc_venc_frame->data, IMG_YUV420P,
+@@ -1661,7 +1666,7 @@ MOD_encode
+         case CODEC_RGB:
+             avpicture_fill((AVPicture *)lavc_venc_frame, img_buffer,
+-                           PIX_FMT_YUV420P, lavc_venc_context->width,
++                           AV_PIX_FMT_YUV420P, lavc_venc_context->width,
+                            lavc_venc_context->height);
+           ac_imgconvert(&param->buffer, IMG_RGB_DEFAULT,
+                               lavc_venc_frame->data, IMG_YUV420P,
+@@ -1674,13 +1679,17 @@ MOD_encode
+               return TC_EXPORT_ERROR;
+     }
++    av_init_packet(&pkt);
++    pkt.data = enc_buffer;
++    pkt.size = size;
+     TC_LOCK_LIBAVCODEC;
+-    out_size = avcodec_encode_video(lavc_venc_context,
+-                                    enc_buffer, size,
+-                                    lavc_venc_frame);
++    ret = avcodec_encode_video2(lavc_venc_context, &pkt,
++                                    lavc_venc_frame, &got_packet);
+     TC_UNLOCK_LIBAVCODEC;
++    out_size = ret ? ret : pkt.size;
++
+     if (out_size < 0) {
+       tc_log_warn(MOD_NAME, "encoder error: size (%d)", out_size);
+       return TC_EXPORT_ERROR;
+Index: transcode-1.1.7/import/decode_lavc.c
+===================================================================
+--- transcode-1.1.7.orig/import/decode_lavc.c
++++ transcode-1.1.7/import/decode_lavc.c
+@@ -327,8 +327,8 @@ void decode_lavc(decode_t *decode)
+       // Convert avcodec image to the requested YUV or RGB format
+       switch (lavc_dec_context->pix_fmt) {
+-      case PIX_FMT_YUVJ420P:
+-      case PIX_FMT_YUV420P:
++      case AV_PIX_FMT_YUVJ420P:
++      case AV_PIX_FMT_YUV420P:
+           // Remove "dead space" at right edge of planes, if any
+           if (picture.linesize[0] != lavc_dec_context->width) {
+               int y;
+@@ -352,7 +352,7 @@ void decode_lavc(decode_t *decode)
+                         pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT,
+                         lavc_dec_context->width, lavc_dec_context->height);
+           break;
+-      case PIX_FMT_YUV411P:
++      case AV_PIX_FMT_YUV411P:
+           if (picture.linesize[0] != lavc_dec_context->width) {
+               int y;
+               for (y = 0; y < lavc_dec_context->height; y++) {
+@@ -371,8 +371,8 @@ void decode_lavc(decode_t *decode)
+                         pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT,
+                         lavc_dec_context->width, lavc_dec_context->height);
+           break;
+-      case PIX_FMT_YUVJ422P:
+-      case PIX_FMT_YUV422P:
++      case AV_PIX_FMT_YUVJ422P:
++      case AV_PIX_FMT_YUV422P:
+           if (picture.linesize[0] != lavc_dec_context->width) {
+               int y;
+               for (y = 0; y < lavc_dec_context->height; y++) {
+@@ -391,8 +391,8 @@ void decode_lavc(decode_t *decode)
+                         pix_fmt==TC_CODEC_YUV420P ? IMG_YUV420P : IMG_RGB_DEFAULT,
+                         lavc_dec_context->width, lavc_dec_context->height);
+           break;
+-      case PIX_FMT_YUVJ444P:
+-      case PIX_FMT_YUV444P:
++      case AV_PIX_FMT_YUVJ444P:
++      case AV_PIX_FMT_YUV444P:
+           if (picture.linesize[0] != lavc_dec_context->width) {
+               int y;
+               for (y = 0; y < lavc_dec_context->height; y++) {
+Index: transcode-1.1.7/import/import_ffmpeg.c
+===================================================================
+--- transcode-1.1.7.orig/import/import_ffmpeg.c
++++ transcode-1.1.7/import/import_ffmpeg.c
+@@ -661,8 +661,8 @@ retry:
+     // Convert avcodec image to our internal YUV or RGB format
+     switch (lavc_dec_context->pix_fmt) {
+-      case PIX_FMT_YUVJ420P:
+-      case PIX_FMT_YUV420P:
++      case AV_PIX_FMT_YUVJ420P:
++      case AV_PIX_FMT_YUV420P:
+         src_fmt = IMG_YUV420P;
+         YUV_INIT_PLANES(src_planes, frame, src_fmt,
+                         lavc_dec_context->width, lavc_dec_context->height);
+@@ -693,7 +693,7 @@ retry:
+       }
+         break;
+-      case PIX_FMT_YUV411P:
++      case AV_PIX_FMT_YUV411P:
+         src_fmt = IMG_YUV411P;
+         YUV_INIT_PLANES(src_planes, frame, src_fmt,
+                         lavc_dec_context->width, lavc_dec_context->height);
+@@ -721,8 +721,8 @@ retry:
+         }
+         break;
+-      case PIX_FMT_YUVJ422P:
+-      case PIX_FMT_YUV422P:
++      case AV_PIX_FMT_YUVJ422P:
++      case AV_PIX_FMT_YUV422P:
+         src_fmt = IMG_YUV422P;
+         YUV_INIT_PLANES(src_planes, frame, src_fmt,
+                         lavc_dec_context->width, lavc_dec_context->height);
+@@ -750,8 +750,8 @@ retry:
+         }
+       break;
+-      case PIX_FMT_YUVJ444P:
+-      case PIX_FMT_YUV444P:
++      case AV_PIX_FMT_YUVJ444P:
++      case AV_PIX_FMT_YUV444P:
+         src_fmt = IMG_YUV444P;
+         YUV_INIT_PLANES(src_planes, frame, src_fmt,
+                         lavc_dec_context->width, lavc_dec_context->height);
index 1ed0ed9258284223cc5c434f050a93bf0bb2b0b8..1c740b9a5ce323e7fb6be3a21dbf5279c232d745 100644 (file)
@@ -67,6 +67,7 @@ src_prepare() {
                "${FILESDIR}"/${P}-ffmpeg2.patch \
                "${FILESDIR}"/${P}-freetype251.patch \
                "${FILESDIR}"/${P}-ffmpeg24.patch
+       has_version '>=media-video/ffmpeg-2.8' && epatch "${FILESDIR}"/${P}-ffmpeg29.patch
 
        elibtoolize
 }