--- a/plugins/ffmpeg/audio.c +++ b/plugins/ffmpeg/audio.c @@ -423,8 +423,8 @@ static int a52_header_read(a52_header * typedef struct { AVCodecContext * avctx; - AVCodec * encoder; - AVCodec * decoder; + AVCodec const * encoder; + AVCodec const * decoder; int initialized; @@ -512,7 +512,6 @@ static int decode_chunk_vbr(quicktime_t #if DECODE_AUDIO4 AVFrame f; - int got_frame; #endif chunk_packets = lqt_audio_num_vbr_packets(file, track, track_map->cur_chunk, &num_samples); @@ -548,13 +547,14 @@ static int decode_chunk_vbr(quicktime_t codec->pkt.size = packet_size + AV_INPUT_BUFFER_PADDING_SIZE; #if DECODE_AUDIO4 - frame_bytes = avcodec_decode_audio4(codec->avctx, &f, - &got_frame, &codec->pkt); - if(frame_bytes < 0) + if(avcodec_send_packet(codec->avctx, &codec->pkt) < 0 && + avcodec_receive_frame(codec->avctx, &f) < 0) { lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "avcodec_decode_audio4 error"); break; } + frame_bytes = codec->pkt.size; + bytes_decoded = f.nb_samples * 2 * track_map->channels; memcpy(&codec->sample_buffer[track_map->channels * (codec->sample_buffer_end - @@ -615,7 +615,6 @@ static int decode_chunk(quicktime_t * fi #if DECODE_AUDIO4 AVFrame f; - int got_frame; #endif /* Read chunk */ @@ -764,14 +763,14 @@ static int decode_chunk(quicktime_t * fi codec->pkt.size = codec->bytes_in_chunk_buffer + AV_INPUT_BUFFER_PADDING_SIZE; #if DECODE_AUDIO4 - - frame_bytes = avcodec_decode_audio4(codec->avctx, &f, - &got_frame, &codec->pkt); - if(frame_bytes < 0) + if(avcodec_send_packet(codec->avctx, &codec->pkt) < 0 || + avcodec_receive_frame(codec->avctx, &f) < 0) { lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "avcodec_decode_audio4 error"); break; } + frame_bytes = codec->pkt.size; + bytes_decoded = f.nb_samples * 2 * track_map->channels; memcpy(&codec->sample_buffer[track_map->channels * (codec->sample_buffer_end - @@ -1198,7 +1197,6 @@ static int lqt_ffmpeg_encode_audio(quick #if ENCODE_AUDIO2 AVFrame f; AVPacket pkt; - int got_packet; #endif if(!codec->initialized) @@ -1274,15 +1272,11 @@ static int lqt_ffmpeg_encode_audio(quick codec->avctx->frame_size * channels * 2, 1); - if(avcodec_encode_audio2(codec->avctx, &pkt, - &f, &got_packet) < 0) + if(avcodec_send_frame(codec->avctx, &f) < 0 || + avcodec_receive_packet(codec->avctx, &pkt) < 0) return 0; - if(got_packet && pkt.size) - frame_bytes = pkt.size; - else - frame_bytes = 0; - + frame_bytes = pkt.size; #else frame_bytes = avcodec_encode_audio(codec->avctx, codec->chunk_buffer, codec->chunk_buffer_alloc, @@ -1474,8 +1468,9 @@ static int read_packet_ac3(quicktime_t * } void quicktime_init_audio_codec_ffmpeg(quicktime_codec_t * codec_base, - quicktime_audio_map_t *atrack, AVCodec *encoder, - AVCodec *decoder) + quicktime_audio_map_t *atrack, + const AVCodec *encoder, + const AVCodec *decoder) { quicktime_ffmpeg_audio_codec_t *codec; --- a/plugins/ffmpeg/ffmpeg.h +++ b/plugins/ffmpeg/ffmpeg.h @@ -30,10 +30,12 @@ void quicktime_init_video_codec_ffmpeg(quicktime_codec_t * codec, quicktime_video_map_t *vtrack, - AVCodec *encoder, AVCodec *decoder); + const AVCodec *encoder, + const AVCodec *decoder); void quicktime_init_audio_codec_ffmpeg(quicktime_codec_t * codec, quicktime_audio_map_t *vtrack, - AVCodec *encoder, AVCodec *decoder); + const AVCodec *encoder, + const AVCodec *decoder); void lqt_ffmpeg_set_parameter(AVCodecContext * ctx, #if LIBAVCODEC_VERSION_MAJOR >= 54 --- a/plugins/ffmpeg/lqt_ffmpeg.c +++ b/plugins/ffmpeg/lqt_ffmpeg.c @@ -315,8 +315,8 @@ struct CODECIDMAP { int id; int index; - AVCodec *encoder; - AVCodec *decoder; + AVCodec const *encoder; + AVCodec const *decoder; lqt_parameter_info_static_t * encode_parameters; lqt_parameter_info_static_t * decode_parameters; lqt_image_size_static_t * image_sizes; @@ -947,7 +947,9 @@ static void ffmpeg_map_init(void) return; } +#if LIBAVCODEC_VERSION_MAJOR < 59 avcodec_register_all(); +#endif // avcodec_init(); ffmpeg_num_video_codecs = 0; ffmpeg_num_audio_codecs = 0; --- a/plugins/ffmpeg/params.c +++ b/plugins/ffmpeg/params.c @@ -124,12 +124,14 @@ typedef struct } +#if LIBAVCODEC_VERSION_MAJOR < 59 enum_t prediction_method[] = { { "Left", FF_PRED_LEFT }, { "Plane", FF_PRED_PLANE }, { "Median", FF_PRED_MEDIAN } }; +#endif enum_t compare_func[] = { @@ -193,7 +195,9 @@ void lqt_ffmpeg_set_parameter(AVCodecCon PARAM_INT("ff_max_qdiff",max_qdiff); PARAM_INT("ff_max_b_frames",max_b_frames); PARAM_FLOAT("ff_b_quant_factor",b_quant_factor); +#if LIBAVCODEC_VERSION_MAJOR < 59 PARAM_INT("ff_b_frame_strategy",b_frame_strategy); +#endif #if LIBAVCODEC_VERSION_MAJOR >= 55 PARAM_DICT_INT("ff_luma_elim_threshold","luma_elim_threshold"); @@ -216,7 +220,9 @@ void lqt_ffmpeg_set_parameter(AVCodecCon PARAM_FLOAT("ff_spatial_cplx_masking",spatial_cplx_masking); PARAM_FLOAT("ff_p_masking",p_masking); PARAM_FLOAT("ff_dark_masking",dark_masking); +#if LIBAVCODEC_VERSION_MAJOR < 59 PARAM_ENUM("ff_prediction_method",prediction_method,prediction_method); +#endif PARAM_ENUM("ff_me_cmp",me_cmp,compare_func); PARAM_CMP_CHROMA("ff_me_cmp_chroma",me_cmp); PARAM_ENUM("ff_me_sub_cmp",me_sub_cmp,compare_func); @@ -227,17 +233,23 @@ void lqt_ffmpeg_set_parameter(AVCodecCon PARAM_CMP_CHROMA("ff_ildct_cmp_chroma",ildct_cmp); PARAM_INT("ff_dia_size",dia_size); PARAM_INT("ff_last_predictor_count",last_predictor_count); +#if LIBAVCODEC_VERSION_MAJOR < 59 PARAM_INT("ff_pre_me",pre_me); +#endif PARAM_ENUM("ff_me_pre_cmp",me_pre_cmp,compare_func); PARAM_CMP_CHROMA("ff_pre_me_cmp_chroma",me_pre_cmp); PARAM_INT("ff_pre_dia_size",pre_dia_size); PARAM_INT("ff_me_subpel_quality",me_subpel_quality); PARAM_INT("ff_me_range",me_range); PARAM_ENUM("ff_mb_decision",mb_decision,mb_decision); +#if LIBAVCODEC_VERSION_MAJOR < 59 PARAM_INT("ff_scenechange_threshold",scenechange_threshold); +#endif PARAM_DICT_INT("ff_lmin", "lmin"); PARAM_DICT_INT("ff_lmax", "lmax"); +#if LIBAVCODEC_VERSION_MAJOR < 59 PARAM_INT("ff_noise_reduction",noise_reduction); +#endif PARAM_INT_SCALE("ff_rc_initial_buffer_occupancy",rc_initial_buffer_occupancy,1000); #if LIBAVCODEC_VERSION_MAJOR >= 55 @@ -253,9 +265,13 @@ void lqt_ffmpeg_set_parameter(AVCodecCon PARAM_DICT_INT("ff_border_masking","border_mask"); PARAM_QP2LAMBDA("ff_mb_lmin", mb_lmin); PARAM_QP2LAMBDA("ff_mb_lmax", mb_lmax); +#if LIBAVCODEC_VERSION_MAJOR < 59 PARAM_INT("ff_me_penalty_compensation",me_penalty_compensation); +#endif PARAM_INT("ff_bidir_refine",bidir_refine); +#if LIBAVCODEC_VERSION_MAJOR < 59 PARAM_INT("ff_brd_scale",brd_scale); +#endif PARAM_FLAG("ff_flag_qscale",AV_CODEC_FLAG_QSCALE); PARAM_FLAG("ff_flag_4mv",AV_CODEC_FLAG_4MV); PARAM_FLAG("ff_flag_qpel",AV_CODEC_FLAG_QPEL); --- a/plugins/ffmpeg/video.c +++ b/plugins/ffmpeg/video.c @@ -61,8 +61,8 @@ enum AvidYuvRange typedef struct { AVCodecContext * avctx; - AVCodec * encoder; - AVCodec * decoder; + AVCodec const * encoder; + AVCodec const * decoder; int initialized; int decoding_delay; @@ -878,10 +878,12 @@ static int lqt_ffmpeg_decode_video(quick } #endif - if(avcodec_decode_video2(codec->avctx, - codec->frame, - &got_pic, - &codec->pkt) < 0) + if(avcodec_send_packet(codec->avctx, &codec->pkt) == 0 && + avcodec_receive_frame(codec->avctx, codec->frame) == 0) + { + got_pic = 1; + } + else { lqt_log(file, LQT_LOG_ERROR, LOG_DOMAIN, "Skipping corrupted frame"); continue; @@ -1062,10 +1064,8 @@ static void resync_ffmpeg(quicktime_t *f #if LIBAVCODEC_BUILD >= ((52<<16)+(26<<8)+0) codec->pkt.data = codec->buffer; codec->pkt.size = buffer_size; - avcodec_decode_video2(codec->avctx, - codec->frame, - &got_pic, - &codec->pkt); + got_pic = (avcodec_send_packet(codec->avctx, &codec->pkt) == 0 && + avcodec_receive_frame(codec->avctx, codec->frame) == 0); #else avcodec_decode_video(codec->avctx, codec->frame, @@ -1139,7 +1139,9 @@ static int init_imx_encoder(quicktime_t codec->avctx->intra_dc_precision = 2; codec->avctx->qmin = 1; codec->avctx->qmax = 3; +#if (LIBAVCODEC_VERSION_MAJOR < 59) codec->avctx->rtp_payload_size = 1; // ?? +#endif av_dict_set(&codec->options, "rc_buf_aggressivity", "0.25", 0); codec->avctx->flags |= AV_CODEC_FLAG_INTERLACED_DCT|AV_CODEC_FLAG_LOW_DELAY; @@ -1290,7 +1292,6 @@ static int lqt_ffmpeg_encode_video(quick int stats_len; #if ENCODE_VIDEO2 AVPacket pkt; - int got_packet; #endif int64_t pts; int kf; @@ -1530,16 +1531,12 @@ static int lqt_ffmpeg_encode_video(quick #if ENCODE_VIDEO2 // New av_init_packet(&pkt); pkt.data = codec->buffer; - pkt.size = codec->buffer_alloc; + pkt.size = bytes_encoded = codec->buffer_alloc; - if(avcodec_encode_video2(codec->avctx, &pkt, codec->frame, &got_packet) < 0) + if(avcodec_send_frame(codec->avctx, codec->frame) < 0 || + avcodec_receive_packet(codec->avctx, &pkt) < 0) return -1; - if(got_packet) - bytes_encoded = pkt.size; - else - bytes_encoded = 0; - pts = pkt.pts; kf = !!(pkt.flags & AV_PKT_FLAG_KEY); @@ -1621,7 +1618,6 @@ static int flush(quicktime_t *file, int #if ENCODE_VIDEO2 AVPacket pkt; - int got_packet; #endif /* Do nothing if we didn't encode anything yet */ @@ -1631,18 +1627,13 @@ static int flush(quicktime_t *file, int #if ENCODE_VIDEO2 av_init_packet(&pkt); pkt.data = codec->buffer; - pkt.size = codec->buffer_alloc; + pkt.size = bytes_encoded = codec->buffer_alloc; - if(avcodec_encode_video2(codec->avctx, &pkt, (AVFrame*)0, &got_packet) < 0) + if(avcodec_send_frame(codec->avctx, NULL) < 0 || + avcodec_receive_packet(codec->avctx, &pkt) < 0) return -1; - if(got_packet) - bytes_encoded = pkt.size; - else - return 0; - pts = pkt.pts; - kf = !!(pkt.flags & AV_PKT_FLAG_KEY); #else @@ -1872,8 +1863,8 @@ static int init_compressed_dv(quicktime_ void quicktime_init_video_codec_ffmpeg(quicktime_codec_t * codec_base, quicktime_video_map_t *vtrack, - AVCodec *encoder, - AVCodec *decoder) + const AVCodec *encoder, + const AVCodec *decoder) { quicktime_ffmpeg_video_codec_t *codec; char *compressor;