343 lines
12 KiB
Diff
343 lines
12 KiB
Diff
--- 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;
|