|
|
|
@ -45,7 +45,6 @@ typedef struct XavsContext { |
|
|
|
|
xavs_picture_t pic; |
|
|
|
|
uint8_t *sei; |
|
|
|
|
int sei_size; |
|
|
|
|
AVFrame out_pic; |
|
|
|
|
int end_of_stream; |
|
|
|
|
float crf; |
|
|
|
|
int cqp; |
|
|
|
@ -161,7 +160,7 @@ static int XAVS_frame(AVCodecContext *ctx, AVPacket *pkt, |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
x4->out_pic.pts = pic_out.i_pts; |
|
|
|
|
avctx->coded_frame->pts = pic_out.i_pts; |
|
|
|
|
pkt->pts = pic_out.i_pts; |
|
|
|
|
if (ctx->has_b_frames) { |
|
|
|
|
if (!x4->out_frame_count) |
|
|
|
@ -174,25 +173,25 @@ static int XAVS_frame(AVCodecContext *ctx, AVPacket *pkt, |
|
|
|
|
switch (pic_out.i_type) { |
|
|
|
|
case XAVS_TYPE_IDR: |
|
|
|
|
case XAVS_TYPE_I: |
|
|
|
|
x4->out_pic.pict_type = AV_PICTURE_TYPE_I; |
|
|
|
|
avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I; |
|
|
|
|
break; |
|
|
|
|
case XAVS_TYPE_P: |
|
|
|
|
x4->out_pic.pict_type = AV_PICTURE_TYPE_P; |
|
|
|
|
avctx->coded_frame->pict_type = AV_PICTURE_TYPE_P; |
|
|
|
|
break; |
|
|
|
|
case XAVS_TYPE_B: |
|
|
|
|
case XAVS_TYPE_BREF: |
|
|
|
|
x4->out_pic.pict_type = AV_PICTURE_TYPE_B; |
|
|
|
|
avctx->coded_frame->pict_type = AV_PICTURE_TYPE_B; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* There is no IDR frame in AVS JiZhun */ |
|
|
|
|
/* Sequence header is used as a flag */ |
|
|
|
|
if (pic_out.i_type == XAVS_TYPE_I) { |
|
|
|
|
x4->out_pic.key_frame = 1; |
|
|
|
|
avctx->coded_frame->key_frame = 1; |
|
|
|
|
pkt->flags |= AV_PKT_FLAG_KEY; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
x4->out_pic.quality = (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA; |
|
|
|
|
avctx->coded_frame->quality = (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA; |
|
|
|
|
|
|
|
|
|
x4->out_frame_count++; |
|
|
|
|
*got_packet = ret; |
|
|
|
@ -210,6 +209,8 @@ static av_cold int XAVS_close(AVCodecContext *avctx) |
|
|
|
|
if (x4->enc) |
|
|
|
|
xavs_encoder_close(x4->enc); |
|
|
|
|
|
|
|
|
|
av_frame_free(&avctx->coded_frame); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -357,7 +358,10 @@ static av_cold int XAVS_init(AVCodecContext *avctx) |
|
|
|
|
if (!(x4->pts_buffer = av_mallocz((avctx->max_b_frames+1) * sizeof(*x4->pts_buffer)))) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
avctx->coded_frame = &x4->out_pic; |
|
|
|
|
avctx->coded_frame = av_frame_alloc(); |
|
|
|
|
if (!avctx->coded_frame) |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
|
|
/* TAG: Do we have GLOBAL HEADER in AVS */ |
|
|
|
|
/* We Have PPS and SPS in AVS */ |
|
|
|
|
if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) { |
|
|
|
|