if (ctx->cid_table->frame_size == DNXHD_VARIABLE) {
ctx->frame_size = ff_dnxhd_get_hr_frame_size(ctx->cid,
avctx->width, avctx->height);
+ av_assert0(ctx->frame_size >= 0);
ctx->coding_unit_size = ctx->frame_size;
} else {
ctx->frame_size = ctx->cid_table->frame_size;
FF_ENABLE_DEPRECATION_WARNINGS
#endif
- if (avctx->thread_count > MAX_THREADS) {
- av_log(avctx, AV_LOG_ERROR, "too many threads\n");
- return AVERROR(EINVAL);
+ if (avctx->active_thread_type == FF_THREAD_SLICE) {
+ if (avctx->thread_count > MAX_THREADS) {
+ av_log(avctx, AV_LOG_ERROR, "too many threads\n");
+ return AVERROR(EINVAL);
+ }
}
if (avctx->qmax <= 1) {
}
ctx->thread[0] = ctx;
- for (i = 1; i < avctx->thread_count; i++) {
- ctx->thread[i] = av_malloc(sizeof(DNXHDEncContext));
- memcpy(ctx->thread[i], ctx, sizeof(DNXHDEncContext));
+ if (avctx->active_thread_type == FF_THREAD_SLICE) {
+ for (i = 1; i < avctx->thread_count; i++) {
+ ctx->thread[i] = av_malloc(sizeof(DNXHDEncContext));
+ memcpy(ctx->thread[i], ctx, sizeof(DNXHDEncContext));
+ }
}
return 0;
.init = dnxhd_encode_init,
.encode2 = dnxhd_encode_picture,
.close = dnxhd_encode_end,
- .capabilities = AV_CODEC_CAP_SLICE_THREADS,
+ .capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_INTRA_ONLY,
.pix_fmts = (const enum AVPixelFormat[]) {
AV_PIX_FMT_YUV422P,
AV_PIX_FMT_YUV422P10,