diff --git a/codec.c b/codec.c index e40ba2e..1def9e2 100644 --- a/codec.c +++ b/codec.c @@ -469,6 +469,7 @@ void CodecVideoDecode(VideoDecoder *decoder, const AVPacket *avpkt) { *pkt = *avpkt; // use copy ret = avcodec_send_packet(video_ctx, pkt); + //printf("send packet %x\n",ret); if (ret < 0) { return; } @@ -487,7 +488,8 @@ void CodecVideoDecode(VideoDecoder *decoder, const AVPacket *avpkt) { return; } if (ret >= 0) { - if (decoder->filter) { + //printf("Videosize %d:%d ttf %d\n",frame->width,frame->height,frame->interlaced_frame); + if ((frame->flags & AV_FRAME_FLAG_INTERLACED) && decoder->filter) { if (decoder->filter == 1) { if (init_filters(video_ctx, decoder->HwDecoder, frame) < 0) { Debug(3, "video: Init of VAAPI deint Filter failed\n"); @@ -558,7 +560,7 @@ next_part: // printf("video frame pts %#012" PRIx64 " //%dms\n",frame->pts,(int)(apts - frame->pts) / 90); #ifdef YADIF - if (decoder->filter) { + if ((frame->flags & AV_FRAME_FLAG_INTERLACED) && decoder->filter) { if (decoder->filter == 1) { if (init_filters(video_ctx, decoder->HwDecoder, frame) < 0) { Debug(3,"video: Init of YADIF Filter failed\n"); diff --git a/softhdcuvid.cpp b/softhdcuvid.cpp index 9f98317..5f94eaf 100644 --- a/softhdcuvid.cpp +++ b/softhdcuvid.cpp @@ -61,7 +61,7 @@ extern void ToggleLUT(); /// vdr-plugin version number. /// Makefile extracts the version number for generating the file name /// for the distribution archive. -static const char *const VERSION = "3.27" +static const char *const VERSION = "3.28" #ifdef GIT_REV "-GIT" GIT_REV #endif diff --git a/video.c b/video.c index c3b5be9..c30d9c8 100644 --- a/video.c +++ b/video.c @@ -3503,6 +3503,18 @@ static void CuvidRenderFrame(CuvidDecoder *decoder, const AVCodecContext *video_ VideoSetPts(&decoder->PTS, decoder->Interlaced, video_ctx, frame); } + if ((decoder->InputWidth != frame->width) || (decoder->InputHeight != frame->height)) { + printf("Framesize change\n"); + CuvidCleanup(decoder); + decoder->InputAspect = frame->sample_aspect_ratio; + decoder->InputWidth = frame->width; + decoder->InputHeight = frame->height; + decoder->Interlaced = 0; + decoder->SurfacesNeeded = VIDEO_SURFACES_MAX + 1; + CuvidSetupOutput(decoder); + + } + // update aspect ratio changes if (decoder->InputWidth && decoder->InputHeight && av_cmp_q(decoder->InputAspect, frame->sample_aspect_ratio)) { Debug(3, "video/cuvid: aspect ratio changed\n");