avcodec/proresenc_kostya: fix coded_frame handling
This commit is contained in:
@@ -914,7 +914,7 @@ static int find_quant_thread(AVCodecContext *avctx, void *arg,
|
|||||||
for (x = mb = 0; x < ctx->mb_width; x += mbs_per_slice, mb++) {
|
for (x = mb = 0; x < ctx->mb_width; x += mbs_per_slice, mb++) {
|
||||||
while (ctx->mb_width - x < mbs_per_slice)
|
while (ctx->mb_width - x < mbs_per_slice)
|
||||||
mbs_per_slice >>= 1;
|
mbs_per_slice >>= 1;
|
||||||
q = find_slice_quant(avctx, avctx->coded_frame,
|
q = find_slice_quant(avctx, arg,
|
||||||
(mb + 1) * TRELLIS_WIDTH, x, y,
|
(mb + 1) * TRELLIS_WIDTH, x, y,
|
||||||
mbs_per_slice, td);
|
mbs_per_slice, td);
|
||||||
}
|
}
|
||||||
@@ -942,10 +942,6 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
|
|||||||
int max_slice_size = (ctx->frame_size_upper_bound - 200) / (ctx->pictures_per_frame * ctx->slices_per_picture + 1);
|
int max_slice_size = (ctx->frame_size_upper_bound - 200) / (ctx->pictures_per_frame * ctx->slices_per_picture + 1);
|
||||||
uint8_t frame_flags;
|
uint8_t frame_flags;
|
||||||
|
|
||||||
*avctx->coded_frame = *pic;
|
|
||||||
avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
|
|
||||||
avctx->coded_frame->key_frame = 1;
|
|
||||||
|
|
||||||
pkt_size = ctx->frame_size_upper_bound;
|
pkt_size = ctx->frame_size_upper_bound;
|
||||||
|
|
||||||
if ((ret = ff_alloc_packet2(avctx, pkt, pkt_size + FF_MIN_BUFFER_SIZE)) < 0)
|
if ((ret = ff_alloc_packet2(avctx, pkt, pkt_size + FF_MIN_BUFFER_SIZE)) < 0)
|
||||||
@@ -1006,7 +1002,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
|
|||||||
|
|
||||||
// slices
|
// slices
|
||||||
if (!ctx->force_quant) {
|
if (!ctx->force_quant) {
|
||||||
ret = avctx->execute2(avctx, find_quant_thread, NULL, NULL,
|
ret = avctx->execute2(avctx, find_quant_thread, (void*)pic, NULL,
|
||||||
ctx->mb_height);
|
ctx->mb_height);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@@ -1096,7 +1092,7 @@ static av_cold int encode_close(AVCodecContext *avctx)
|
|||||||
ProresContext *ctx = avctx->priv_data;
|
ProresContext *ctx = avctx->priv_data;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
av_freep(&avctx->coded_frame);
|
av_frame_free(&avctx->coded_frame);
|
||||||
|
|
||||||
if (ctx->tdata) {
|
if (ctx->tdata) {
|
||||||
for (i = 0; i < avctx->thread_count; i++)
|
for (i = 0; i < avctx->thread_count; i++)
|
||||||
@@ -1134,6 +1130,8 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
|||||||
avctx->coded_frame = av_frame_alloc();
|
avctx->coded_frame = av_frame_alloc();
|
||||||
if (!avctx->coded_frame)
|
if (!avctx->coded_frame)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
|
||||||
|
avctx->coded_frame->key_frame = 1;
|
||||||
|
|
||||||
ctx->fdct = prores_fdct;
|
ctx->fdct = prores_fdct;
|
||||||
ctx->scantable = interlaced ? ff_prores_interlaced_scan
|
ctx->scantable = interlaced ? ff_prores_interlaced_scan
|
||||||
|
Reference in New Issue
Block a user