#endif
break;
case AV_PIX_FMT_YUV420P12:
+ case AV_PIX_FMT_YUV444P:
+ case AV_PIX_FMT_YUV444P10:
+ case AV_PIX_FMT_YUV444P12:
#if CONFIG_HEVC_NVDEC_HWACCEL
*fmt++ = AV_PIX_FMT_CUDA;
#endif
if (
(s->avctx->skip_frame >= AVDISCARD_BIDIR && s->sh.slice_type == HEVC_SLICE_B) ||
(s->avctx->skip_frame >= AVDISCARD_NONINTRA && s->sh.slice_type != HEVC_SLICE_I) ||
- (s->avctx->skip_frame >= AVDISCARD_NONKEY && !IS_IDR(s))) {
+ (s->avctx->skip_frame >= AVDISCARD_NONKEY && !IS_IRAP(s))) {
break;
}
s->max_ra = INT_MIN;
}
+ s->overlap ++;
ret = hevc_frame_start(s);
if (ret < 0)
return ret;
s->ref = NULL;
s->last_eos = s->eos;
s->eos = 0;
+ s->overlap = 0;
/* split the input packet into NAL units, so we know the upper bound on the
* number of slices in the frame */
ret = ff_h2645_packet_split(&s->pkt, buf, length, s->avctx, s->is_nalff,
- s->nal_length_size, s->avctx->codec_id, 1);
+ s->nal_length_size, s->avctx->codec_id, 1, 0);
if (ret < 0) {
av_log(s->avctx, AV_LOG_ERROR,
"Error splitting the input into NAL units.\n");
continue;
ret = decode_nal_unit(s, nal);
+ if (ret >= 0 && s->overlap > 2)
+ ret = AVERROR_INVALIDDATA;
if (ret < 0) {
av_log(s->avctx, AV_LOG_WARNING,
"Error parsing NAL unit #%d.\n", i);
return AVERROR(ENOMEM);
}
+#if HAVE_THREADS
static int hevc_update_thread_context(AVCodecContext *dst,
const AVCodecContext *src)
{
return 0;
}
+#endif
static av_cold int hevc_decode_init(AVCodecContext *avctx)
{
return 0;
}
+#if HAVE_THREADS
static av_cold int hevc_init_thread_copy(AVCodecContext *avctx)
{
HEVCContext *s = avctx->priv_data;
return 0;
}
+#endif
static void hevc_decode_flush(AVCodecContext *avctx)
{
.close = hevc_decode_free,
.decode = hevc_decode_frame,
.flush = hevc_decode_flush,
- .update_thread_context = hevc_update_thread_context,
- .init_thread_copy = hevc_init_thread_copy,
+ .update_thread_context = ONLY_IF_THREADS_ENABLED(hevc_update_thread_context),
+ .init_thread_copy = ONLY_IF_THREADS_ENABLED(hevc_init_thread_copy),
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS,
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_EXPORTS_CROPPING,