Browse Source
multimedia/transcode: Patched to fix build with ffmpeg 3.x.
multimedia/transcode: Patched to fix build with ffmpeg 3.x.
Signed-off-by: Heinz Wiesinger <pprkut@slackbuilds.org>pull/47/head
committed by
Willy Sudiarto Raharjo
3 changed files with 392 additions and 2 deletions
-
352multimedia/transcode/transcode-1.1.7-ffmpeg29.patch
-
36multimedia/transcode/transcode-1.1.7-libav-10.patch
-
6multimedia/transcode/transcode.SlackBuild
@ -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(¶m->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); |
@ -0,0 +1,36 @@ |
|||
fix building w/libav-10 |
|||
|
|||
https://wiki.libav.org/Migration/10 |
|||
|
|||
--- a/filter/filter_resample.c
|
|||
+++ b/filter/filter_resample.c
|
|||
@@ -37,6 +37,7 @@
|
|||
#include "libtc/optstr.h" |
|||
#include "libtc/tcavcodec.h" |
|||
#include "libtc/tcmodule-plugin.h" |
|||
+#include <libavresample/avresample.h>
|
|||
|
|||
|
|||
typedef struct { |
|||
@@ -45,7 +46,7 @@ typedef struct {
|
|||
|
|||
int bytes_per_sample; |
|||
|
|||
- ReSampleContext *resample_ctx;
|
|||
+ AVAudioResampleContext *resample_ctx;
|
|||
} ResamplePrivateData; |
|||
|
|||
static const char resample_help[] = "" |
|||
--- a/import/probe_ffmpeg.c
|
|||
+++ b/import/probe_ffmpeg.c
|
|||
@@ -51,8 +51,8 @@ static void translate_info(const AVFormatContext *ctx, ProbeInfo *info)
|
|||
info->bitrate = st->codec->bit_rate / 1000; |
|||
info->width = st->codec->width; |
|||
info->height = st->codec->height; |
|||
- if (st->r_frame_rate.num > 0 && st->r_frame_rate.den > 0) {
|
|||
- info->fps = av_q2d(st->r_frame_rate);
|
|||
+ if (st->avg_frame_rate.num > 0 && st->avg_frame_rate.den > 0) {
|
|||
+ info->fps = av_q2d(st->avg_frame_rate);
|
|||
} else { |
|||
/* watch out here */ |
|||
info->fps = 1.0/av_q2d(st->codec->time_base); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue