353 lines
14 KiB
Diff
353 lines
14 KiB
Diff
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);
|