diff --git a/codec.c b/codec.c index 13e4f11..32b0d38 100644 --- a/codec.c +++ b/codec.c @@ -63,16 +63,6 @@ #include #include -// support old ffmpeg versions <1.0 -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,18,102) -#define AVCodecID CodecID -#define AV_CODEC_ID_AC3 CODEC_ID_AC3 -#define AV_CODEC_ID_EAC3 CODEC_ID_EAC3 -#define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO -#define AV_CODEC_ID_H264 CODEC_ID_H264 -#endif - - #ifdef USE_SWRESAMPLE #include #endif @@ -95,16 +85,6 @@ #include "audio.h" #include "codec.h" -//---------------------------------------------------------------------------- - - // correct is AV_VERSION_INT(56,35,101) but some gentoo i* think - // they must change it. -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56,26,100) - /// ffmpeg 2.6 started to show artifacts after channel switch - /// to SDTV channels -#define FFMPEG_WORKAROUND_ARTIFACTS 1 -#endif - //---------------------------------------------------------------------------- // Global //---------------------------------------------------------------------------- @@ -141,9 +121,6 @@ struct _video_decoder_ int GetFormatDone; ///< flag get format called! AVCodec *VideoCodec; ///< video codec AVCodecContext *VideoCtx; ///< video codec context -#ifdef FFMPEG_WORKAROUND_ARTIFACTS - int FirstKeyFrame; ///< flag first frame -#endif AVFrame *Frame; ///< decoded video frame }; #endif @@ -194,10 +171,6 @@ static int Codec_get_buffer2(AVCodecContext * video_ctx, AVFrame * frame, int fl decoder = video_ctx->opaque; -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54,86,100) - // ffmpeg has this already fixed - // libav 0.8.5 53.35.0 still needs this -#endif if (!decoder->GetFormatDone) { // get_format missing enum AVPixelFormat fmts[2]; @@ -426,9 +399,6 @@ void CodecVideoOpen(VideoDecoder * decoder, int codec_id) #ifdef YADIF decoder->filter = 0; #endif -#ifdef FFMPEG_WORKAROUND_ARTIFACTS - decoder->FirstKeyFrame = 1; -#endif } @@ -621,26 +591,9 @@ next_part: } } #endif -#ifdef FFMPEG_WORKAROUND_ARTIFACTS - - if (!CodecUsePossibleDefectFrames && decoder->FirstKeyFrame) { - decoder->FirstKeyFrame++; - if (frame->key_frame || (decoder->FirstKeyFrame > 3)) { // key frame is not reliable - Debug(3, "codec: key frame after %d frames\n",decoder->FirstKeyFrame); - decoder->FirstKeyFrame = 0; - VideoRenderFrame(decoder->HwDecoder, video_ctx, frame); - } -// av_frame_unref(frame); - } else { - //DisplayPts(video_ctx, frame); - VideoRenderFrame(decoder->HwDecoder, video_ctx, frame); -// av_frame_unref(frame); - } -#else //DisplayPts(video_ctx, frame); VideoRenderFrame(decoder->HwDecoder, video_ctx, frame); // av_frame_unref(frame); -#endif } else { av_frame_free(&frame); // printf("codec: got no frame %d send %d\n",ret,ret1); @@ -698,9 +651,7 @@ struct _audio_decoder_ int HwSampleRate; ///< hw sample rate int HwChannels; ///< hw channels -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56,28,1) AVFrame *Frame; ///< decoded audio frame buffer -#endif #if !defined(USE_SWRESAMPLE) && !defined(USE_AVRESAMPLE) ReSampleContext *ReSample; ///< old resampling context @@ -778,11 +729,9 @@ AudioDecoder *CodecAudioNewDecoder(void) if (!(audio_decoder = calloc(1, sizeof(*audio_decoder)))) { Fatal(_("codec: can't allocate audio decoder\n")); } -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56,28,1) if (!(audio_decoder->Frame = av_frame_alloc())) { Fatal(_("codec: can't allocate audio decoder frame buffer\n")); } -#endif return audio_decoder; } @@ -794,9 +743,7 @@ AudioDecoder *CodecAudioNewDecoder(void) */ void CodecAudioDelDecoder(AudioDecoder * decoder) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(56,28,1) av_frame_free(&decoder->Frame); // callee does checks -#endif free(decoder); } @@ -824,24 +771,11 @@ void CodecAudioOpen(AudioDecoder * audio_decoder, int codec_id) } if (CodecDownmix) { -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(53,61,100) - audio_decoder->AudioCtx->request_channels = 2; -#endif audio_decoder->AudioCtx->request_channel_layout = AV_CH_LAYOUT_STEREO_DOWNMIX; } -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,61,100) - // this has no effect (with ffmpeg and libav) - // audio_decoder->AudioCtx->request_sample_fmt = AV_SAMPLE_FMT_S16; -#endif pthread_mutex_lock(&CodecLockMutex); // open codec -#if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(53,5,0) - if (avcodec_open(audio_decoder->AudioCtx, audio_codec) < 0) { - pthread_mutex_unlock(&CodecLockMutex); - Fatal(_("codec: can't open audio codec\n")); - } -#else if (1) { AVDictionary *av_dict; @@ -856,7 +790,6 @@ void CodecAudioOpen(AudioDecoder * audio_decoder, int codec_id) } av_dict_free(&av_dict); } -#endif pthread_mutex_unlock(&CodecLockMutex); Debug(3, "codec: audio '%s'\n", audio_decoder->AudioCodec->long_name); @@ -1919,9 +1852,7 @@ void CodecInit(void) #else (void)CodecNoopCallback; #endif -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58,9,100) avcodec_register_all(); // register all formats and codecs -#endif } /** diff --git a/softhddev.c b/softhddev.c index e2a2257..03a4ec0 100644 --- a/softhddev.c +++ b/softhddev.c @@ -44,19 +44,6 @@ #include #include -// support old ffmpeg versions <1.0 -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,18,102) -#define AVCodecID CodecID -#define AV_CODEC_ID_AAC CODEC_ID_AAC -#define AV_CODEC_ID_AAC_LATM CODEC_ID_AAC_LATM -#define AV_CODEC_ID_AC3 CODEC_ID_AC3 -#define AV_CODEC_ID_EAC3 CODEC_ID_EAC3 -#define AV_CODEC_ID_H264 CODEC_ID_H264 -#define AV_CODEC_ID_MP2 CODEC_ID_MP2 -#define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO -#define AV_CODEC_ID_NONE CODEC_ID_NONE -#define AV_CODEC_ID_PCM_DVD CODEC_ID_PCM_DVD -#endif #ifndef __USE_GNU #define __USE_GNU diff --git a/video.c b/video.c index 4919311..b90bfd8 100644 --- a/video.c +++ b/video.c @@ -188,7 +188,6 @@ typedef void *EGLImageKHR; #include #endif - #include #include @@ -198,23 +197,22 @@ typedef void *EGLImageKHR; #include #endif -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54,86,100) - /// - /// ffmpeg version 1.1.1 calls get_format with zero width and height - /// for H264 codecs. - /// since version 1.1.3 get_format is called twice. - /// ffmpeg 1.2 still buggy - /// -#define FFMPEG_BUG1_WORKAROUND ///< get_format bug workaround -#endif - #include "iatomic.h" // portable atomic_t #include "misc.h" #include "video.h" #include "audio.h" #include "codec.h" - +#if defined(APIVERSNUM) && APIVERSNUM < 20400 +#error "VDR 2.4.0 or greater is required!" +#endif + +#define HAS_FFMPEG_3_4_API (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57,107,100)) +#define HAS_FFMPEG_4_API (LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(58,18,100)) + +#if !HAS_FFMPEG_3_4_API +#error "FFmpeg 3.4 or greater is required!" +#endif //---------------------------------------------------------------------------- // Declarations @@ -2557,7 +2555,9 @@ int init_filters(AVCodecContext * dec_ctx,CuvidDecoder * decoder,AVFrame *frame) AVFilterInOut *inputs = avfilter_inout_alloc(); AVBufferSrcParameters *src_params; +#ifdef YADIF enum AVPixelFormat pix_fmts[] = { format, AV_PIX_FMT_NONE }; +#endif if (decoder->filter_graph) avfilter_graph_free(&decoder->filter_graph); @@ -3163,7 +3163,6 @@ static void CuvidRenderFrame(CuvidDecoder * decoder, } // update aspect ratio changes -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(53,60,100) if (decoder->InputWidth && decoder->InputHeight && av_cmp_q(decoder->InputAspect, frame->sample_aspect_ratio)) { Debug(3, "video/vdpau: aspect ratio changed\n"); @@ -3172,15 +3171,6 @@ static void CuvidRenderFrame(CuvidDecoder * decoder, //printf("new aspect %d:%d\n",frame->sample_aspect_ratio.num,frame->sample_aspect_ratio.den); CuvidUpdateOutput(decoder); } -#else - if (decoder->InputWidth && decoder->InputHeight - && av_cmp_q(decoder->InputAspect, video_ctx->sample_aspect_ratio)) { - Debug(3, "video/vdpau: aspect ratio changed\n"); - - decoder->InputAspect = video_ctx->sample_aspect_ratio; - CuvidUpdateOutput(decoder); - } -#endif color = frame->colorspace; if (color == AVCOL_SPC_UNSPECIFIED) // if unknown diff --git a/video.h b/video.h index f1f8b31..8c9e1a4 100644 --- a/video.h +++ b/video.h @@ -55,7 +55,6 @@ extern VideoHwDecoder *VideoNewHwDecoder(VideoStream *); /// Deallocate video hardware decoder. extern void VideoDelHwDecoder(VideoHwDecoder *); -#ifdef LIBAVCODEC_VERSION /// Get and allocate a video hardware surface. extern unsigned VideoGetSurface(VideoHwDecoder *, const AVCodecContext *); @@ -78,7 +77,6 @@ extern void *VideoGetHwAccelContext(VideoHwDecoder *); extern void VideoDrawRenderState(VideoHwDecoder *, struct vdpau_render_state *); #endif -#endif #ifdef USE_OPENGLOSD /// Set callback funktion to notify VDR about VideoEvents