@@ -77,6 +77,7 @@ typedef struct CuvidContext
int deint_mode;
int deint_mode_current;
int64_t prev_pts;
+ unsigned char progressive_sequence;
int internal_error;
int decoder_flushing;
@@ -216,6 +217,8 @@ static int CUDAAPI cuvid_handle_video_sequence(void *opaque, CUVIDEOFORMAT* form
? cudaVideoDeinterlaceMode_Weave
: ctx->deint_mode;
+ ctx->progressive_sequence = format->progressive_sequence;
+
if (!format->progressive_sequence && ctx->deint_mode_current == cudaVideoDeinterlaceMode_Weave)
avctx->flags |= AV_CODEC_FLAG_INTERLACED_DCT;
else
@@ -509,6 +512,8 @@ static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame)
av_fifo_generic_read(ctx->frame_queue, &parsed_frame, sizeof(CuvidParsedFrame), NULL);
+ parsed_frame.dispinfo.progressive_frame = ctx->progressive_sequence;
+
memset(¶ms, 0, sizeof(params));
params.progressive_frame = parsed_frame.dispinfo.progressive_frame;
params.second_field = parsed_frame.second_field;