Index: encode/encode_lavc.c =================================================================== --- encode/encode_lavc.c.orig +++ 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: export/export_ffmpeg.c =================================================================== --- export/export_ffmpeg.c.orig +++ export/export_ffmpeg.c @@ -250,9 +250,9 @@ int opt_default(const char *opt, const c for(type=0; type= 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: import/decode_lavc.c =================================================================== --- import/decode_lavc.c.orig +++ 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: import/import_ffmpeg.c =================================================================== --- import/import_ffmpeg.c.orig +++ 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);