int deint_mode;
int deint_mode_current;
int64_t prev_pts;
+ int progressive_sequence;
int internal_error;
int decoder_flushing;
? 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
parsed_frame.dispinfo = *dispinfo;
ctx->internal_error = 0;
+ // For some reason, dispinfo->progressive_frame is sometimes wrong.
+ parsed_frame.dispinfo.progressive_frame = ctx->progressive_sequence;
+
if (ctx->deint_mode_current == cudaVideoDeinterlaceMode_Weave) {
av_fifo_generic_write(ctx->frame_queue, &parsed_frame, sizeof(CuvidParsedFrame), NULL);
} else {
offset += height;
}
-
- ret = CHECK_CU(ctx->cudl->cuStreamSynchronize(device_hwctx->stream));
- if (ret < 0)
- goto error;
} else if (avctx->pix_fmt == AV_PIX_FMT_NV12 ||
avctx->pix_fmt == AV_PIX_FMT_P010 ||
avctx->pix_fmt == AV_PIX_FMT_P016 ||
return AVERROR(EINVAL);
}
+ if ((probed_width * probed_height) / 256 > caps->nMaxMBCount) {
+ av_log(avctx, AV_LOG_ERROR, "Video macroblock count %d exceeds maximum of %d\n",
+ (int)(probed_width * probed_height) / 256, caps->nMaxMBCount);
+ return AVERROR(EINVAL);
+ }
+
return 0;
}