1
0
Fork 0

avcodec: use the new AVFrame key_frame flag in all decoders and encoders

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer 2023-04-12 13:58:54 -03:00
parent cc11191fda
commit dc7bd7c5a5
160 changed files with 371 additions and 243 deletions

View File

@ -65,7 +65,7 @@ static int zero12v_decode_frame(AVCodecContext *avctx, AVFrame *pic,
return ret; return ret;
pic->pict_type = AV_PICTURE_TYPE_I; pic->pict_type = AV_PICTURE_TYPE_I;
pic->key_frame = 1; pic->flags |= AV_FRAME_FLAG_KEY;
line_end = avpkt->data + stride; line_end = avpkt->data + stride;
for (line = 0; line < avctx->height; line++) { for (line = 0; line < avctx->height; line++) {

View File

@ -957,7 +957,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *picture,
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
picture->key_frame = picture->pict_type == AV_PICTURE_TYPE_I; if (picture->pict_type == AV_PICTURE_TYPE_I)
picture->flags |= AV_FRAME_FLAG_KEY;
else
picture->flags &= ~AV_FRAME_FLAG_KEY;
av_image_copy_plane(picture->data[0], picture->linesize[0], av_image_copy_plane(picture->data[0], picture->linesize[0],
(const uint8_t*)f->frame_buffer, avctx->width * 2, (const uint8_t*)f->frame_buffer, avctx->width * 2,

View File

@ -1100,7 +1100,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
s->key_frame = (avpkt->flags & AV_PKT_FLAG_KEY); s->key_frame = (avpkt->flags & AV_PKT_FLAG_KEY);
frame->key_frame = s->key_frame; if (s->key_frame)
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = s->key_frame ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; frame->pict_type = s->key_frame ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
if (!s->key_frame) { if (!s->key_frame) {
@ -1171,7 +1174,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
if ((ret = ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF)) < 0) if ((ret = ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF)) < 0)
return ret; return ret;
if (frame->key_frame) { if (frame->flags & AV_FRAME_FLAG_KEY) {
if (!s->dct && !s->rgb) if (!s->dct && !s->rgb)
ret = decode_raw_intra(avctx, gbyte, frame); ret = decode_raw_intra(avctx, gbyte, frame);
else if (!s->dct && s->rgb) else if (!s->dct && s->rgb)

View File

@ -393,7 +393,7 @@ static int aic_decode_frame(AVCodecContext *avctx, AVFrame *frame,
ctx->frame = frame; ctx->frame = frame;
ctx->frame->pict_type = AV_PICTURE_TYPE_I; ctx->frame->pict_type = AV_PICTURE_TYPE_I;
ctx->frame->key_frame = 1; ctx->frame->flags |= AV_FRAME_FLAG_KEY;
off = FFALIGN(AIC_HDR_SIZE + ctx->num_x_slices * ctx->mb_height * 2, 4); off = FFALIGN(AIC_HDR_SIZE + ctx->num_x_slices * ctx->mb_height * 2, 4);

View File

@ -70,7 +70,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *f,
return ret; return ret;
f->pict_type = AV_PICTURE_TYPE_I; f->pict_type = AV_PICTURE_TYPE_I;
f->key_frame = 1; f->flags |= AV_FRAME_FLAG_KEY;
x = 0; x = 0;
y = 1; y = 1;

View File

@ -171,7 +171,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
return ret; return ret;
frame->pict_type = prev_pixels <= 0 ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; frame->pict_type = prev_pixels <= 0 ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
frame->key_frame = prev_pixels <= 0; if (prev_pixels <= 0)
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -666,7 +666,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
return ret; return ret;
frame->pict_type = s->key ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; frame->pict_type = s->key ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
frame->key_frame = s->key; if (s->key)
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -245,7 +245,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
if ((ret = ff_get_buffer(avctx, p, 0)) < 0) if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
if (avctx->codec_id == AV_CODEC_ID_ASV1) { if (avctx->codec_id == AV_CODEC_ID_ASV1) {
av_fast_padded_malloc(&a->bitstream_buffer, &a->bitstream_buffer_size, av_fast_padded_malloc(&a->bitstream_buffer, &a->bitstream_buffer_size,

View File

@ -846,7 +846,10 @@ static int av1_frame_alloc(AVCodecContext *avctx, AV1Frame *f)
goto fail; goto fail;
frame = f->f; frame = f->f;
frame->key_frame = header->frame_type == AV1_FRAME_KEY; if (header->frame_type == AV1_FRAME_KEY)
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
switch (header->frame_type) { switch (header->frame_type) {
case AV1_FRAME_KEY: case AV1_FRAME_KEY:

View File

@ -68,7 +68,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
if ((ret = ff_get_buffer(avctx, p, 0)) < 0) if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
return ret; return ret;
p->pict_type= AV_PICTURE_TYPE_I; p->pict_type= AV_PICTURE_TYPE_I;
p->key_frame= 1; p->flags |= AV_FRAME_FLAG_KEY;
if(a->interlace) { if(a->interlace) {
buf += (true_height - avctx->height)*avctx->width; buf += (true_height - avctx->height)*avctx->width;

View File

@ -61,7 +61,7 @@ static int avs_decode_frame(AVCodecContext * avctx, AVFrame *picture,
if ((ret = ff_reget_buffer(avctx, p, 0)) < 0) if ((ret = ff_reget_buffer(avctx, p, 0)) < 0)
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_P; p->pict_type = AV_PICTURE_TYPE_P;
p->key_frame = 0; p->flags &= ~AV_FRAME_FLAG_KEY;
out = p->data[0]; out = p->data[0];
stride = p->linesize[0]; stride = p->linesize[0];
@ -97,7 +97,7 @@ static int avs_decode_frame(AVCodecContext * avctx, AVFrame *picture,
switch (sub_type) { switch (sub_type) {
case AVS_I_FRAME: case AVS_I_FRAME:
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
case AVS_P_FRAME_3X3: case AVS_P_FRAME_3X3:
vect_w = 3; vect_w = 3;
vect_h = 3; vect_h = 3;

View File

@ -71,7 +71,7 @@ static int avui_decode_frame(AVCodecContext *avctx, AVFrame *pic,
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
return ret; return ret;
pic->key_frame = 1; pic->flags |= AV_FRAME_FLAG_KEY;
pic->pict_type = AV_PICTURE_TYPE_I; pic->pict_type = AV_PICTURE_TYPE_I;
if (!interlaced) { if (!interlaced) {

View File

@ -68,7 +68,7 @@ static int bfi_decode_frame(AVCodecContext *avctx, AVFrame *frame,
/* Set frame parameters and palette, if necessary */ /* Set frame parameters and palette, if necessary */
if (!avctx->frame_num) { if (!avctx->frame_num) {
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
/* Setting the palette */ /* Setting the palette */
if (avctx->extradata_size > 768) { if (avctx->extradata_size > 768) {
av_log(avctx, AV_LOG_ERROR, "Palette is too large.\n"); av_log(avctx, AV_LOG_ERROR, "Palette is too large.\n");
@ -87,7 +87,7 @@ static int bfi_decode_frame(AVCodecContext *avctx, AVFrame *frame,
frame->palette_has_changed = 1; frame->palette_has_changed = 1;
} else { } else {
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->palette_has_changed = 0; frame->palette_has_changed = 0;
memcpy(frame->data[1], bfi->pal, sizeof(bfi->pal)); memcpy(frame->data[1], bfi->pal, sizeof(bfi->pal));
} }

View File

@ -134,7 +134,7 @@ static int bitpacked_decode(AVCodecContext *avctx, AVFrame *frame,
return res; return res;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return buf_size; return buf_size;

View File

@ -210,7 +210,7 @@ static int bmp_decode_frame(AVCodecContext *avctx, AVFrame *p,
if ((ret = ff_get_buffer(avctx, p, 0)) < 0) if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
buf = buf0 + hsize; buf = buf0 + hsize;
dsize = buf_size - hsize; dsize = buf_size - hsize;

View File

@ -278,7 +278,7 @@ static int pix_decode_frame(AVCodecContext *avctx, AVFrame *frame,
bytes_per_scanline, hdr.height); bytes_per_scanline, hdr.height);
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -147,10 +147,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
b = bytestream2_get_byte(&gb); b = bytestream2_get_byte(&gb);
if (b & C93_FIRST_FRAME) { if (b & C93_FIRST_FRAME) {
newpic->pict_type = AV_PICTURE_TYPE_I; newpic->pict_type = AV_PICTURE_TYPE_I;
newpic->key_frame = 1; newpic->flags |= AV_FRAME_FLAG_KEY;
} else { } else {
newpic->pict_type = AV_PICTURE_TYPE_P; newpic->pict_type = AV_PICTURE_TYPE_P;
newpic->key_frame = 0; newpic->flags &= ~AV_FRAME_FLAG_KEY;
} }
for (y = 0; y < HEIGHT; y += 8) { for (y = 0; y < HEIGHT; y += 8) {

View File

@ -305,7 +305,7 @@ static int cdxl_decode_frame(AVCodecContext *avctx, AVFrame *p,
if ((ret = ff_get_buffer(avctx, p, 0)) < 0) if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
if (encoding) { if (encoding) {
av_fast_padded_malloc(&c->new_video, &c->new_video_size, av_fast_padded_malloc(&c->new_video, &c->new_video_size,

View File

@ -379,7 +379,7 @@ static int cinepak_decode (CinepakContext *s)
num_strips = FFMIN(num_strips, MAX_STRIPS); num_strips = FFMIN(num_strips, MAX_STRIPS);
s->frame->key_frame = 0; s->frame->flags &= ~AV_FRAME_FLAG_KEY;
for (i=0; i < num_strips; i++) { for (i=0; i < num_strips; i++) {
if ((s->data + 12) > eod) if ((s->data + 12) > eod)
@ -395,7 +395,7 @@ static int cinepak_decode (CinepakContext *s)
s->strips[i].x2 = AV_RB16 (&s->data[10]); s->strips[i].x2 = AV_RB16 (&s->data[10]);
if (s->strips[i].id == 0x10) if (s->strips[i].id == 0x10)
s->frame->key_frame = 1; s->frame->flags |= AV_FRAME_FLAG_KEY;
strip_size = AV_RB24 (&s->data[1]) - 12; strip_size = AV_RB24 (&s->data[1]) - 12;
if (strip_size < 0) if (strip_size < 0)

View File

@ -511,7 +511,7 @@ static int clv_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0) if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0)
return ret; return ret;
c->pic->key_frame = 1; c->pic->flags |= AV_FRAME_FLAG_KEY;
c->pic->pict_type = AV_PICTURE_TYPE_I; c->pic->pict_type = AV_PICTURE_TYPE_I;
bytestream2_get_be32(&gb); // frame size; bytestream2_get_be32(&gb); // frame size;
@ -605,7 +605,7 @@ static int clv_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
} }
extend_edges(c->pic, c->tile_size); extend_edges(c->pic, c->tile_size);
c->pic->key_frame = 0; c->pic->flags &= ~AV_FRAME_FLAG_KEY;
c->pic->pict_type = AV_PICTURE_TYPE_P; c->pic->pict_type = AV_PICTURE_TYPE_P;
} }

View File

@ -51,7 +51,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
if ((ret = ff_get_buffer(avctx, p, 0)) < 0) if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
init_get_bits(&gb, buf, buf_size * 8); init_get_bits(&gb, buf, buf_size * 8);

View File

@ -460,7 +460,7 @@ static int cllc_decode_frame(AVCodecContext *avctx, AVFrame *pic,
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
pic->key_frame = 1; pic->flags |= AV_FRAME_FLAG_KEY;
pic->pict_type = AV_PICTURE_TYPE_I; pic->pict_type = AV_PICTURE_TYPE_I;
*got_picture_ptr = 1; *got_picture_ptr = 1;

View File

@ -94,10 +94,10 @@ static int cpia_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
if (header[28] == NOT_COMPRESSED) { if (header[28] == NOT_COMPRESSED) {
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
} else { } else {
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
} }
// Get buffer filled with previous frame // Get buffer filled with previous frame

View File

@ -408,7 +408,7 @@ skip:
} }
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;

View File

@ -110,12 +110,12 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
// flip upside down, add difference frame // flip upside down, add difference frame
if (buf[0] & 1) { // keyframe if (buf[0] & 1) { // keyframe
c->pic->pict_type = AV_PICTURE_TYPE_I; c->pic->pict_type = AV_PICTURE_TYPE_I;
c->pic->key_frame = 1; c->pic->flags |= AV_FRAME_FLAG_KEY;
copy_frame_default(c->pic, c->decomp_buf, copy_frame_default(c->pic, c->decomp_buf,
c->linelen, c->height); c->linelen, c->height);
} else { } else {
c->pic->pict_type = AV_PICTURE_TYPE_P; c->pic->pict_type = AV_PICTURE_TYPE_P;
c->pic->key_frame = 0; c->pic->flags &= ~AV_FRAME_FLAG_KEY;
add_frame_default(c->pic, c->decomp_buf, add_frame_default(c->pic, c->decomp_buf,
c->linelen, c->height); c->linelen, c->height);
} }

View File

@ -599,7 +599,10 @@ static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame)
goto error; goto error;
} }
frame->key_frame = ctx->key_frame[parsed_frame.dispinfo.picture_index]; if (ctx->key_frame[parsed_frame.dispinfo.picture_index])
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
ctx->key_frame[parsed_frame.dispinfo.picture_index] = 0; ctx->key_frame[parsed_frame.dispinfo.picture_index] = 0;
frame->width = avctx->width; frame->width = avctx->width;

View File

@ -702,7 +702,7 @@ static int dds_decode(AVCodecContext *avctx, AVFrame *frame,
/* Frame is ready to be output. */ /* Frame is ready to be output. */
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -570,6 +570,9 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
} }
if (!ret) { if (!ret) {
if (avctx->codec_type != AVMEDIA_TYPE_VIDEO)
frame->flags |= AV_FRAME_FLAG_KEY;
frame->key_frame = !!(frame->flags & AV_FRAME_FLAG_KEY);
#if FF_API_INTERLACED_FRAME #if FF_API_INTERLACED_FRAME
FF_DISABLE_DEPRECATION_WARNINGS FF_DISABLE_DEPRECATION_WARNINGS
frame->interlaced_frame = !!(frame->flags & AV_FRAME_FLAG_INTERLACED); frame->interlaced_frame = !!(frame->flags & AV_FRAME_FLAG_INTERLACED);

View File

@ -2230,7 +2230,10 @@ static int dirac_decode_data_unit(AVCodecContext *avctx, const uint8_t *buf, int
s->hq_picture = (parse_code & 0xF8) == 0xE8; /* [DIRAC_STD] is_hq_picture() */ s->hq_picture = (parse_code & 0xF8) == 0xE8; /* [DIRAC_STD] is_hq_picture() */
s->dc_prediction = (parse_code & 0x28) == 0x08; /* [DIRAC_STD] using_dc_prediction() */ s->dc_prediction = (parse_code & 0x28) == 0x08; /* [DIRAC_STD] using_dc_prediction() */
pic->reference = (parse_code & 0x0C) == 0x0C; /* [DIRAC_STD] is_reference() */ pic->reference = (parse_code & 0x0C) == 0x0C; /* [DIRAC_STD] is_reference() */
pic->avframe->key_frame = s->num_refs == 0; /* [DIRAC_STD] is_intra() */ if (s->num_refs == 0) /* [DIRAC_STD] is_intra() */
pic->avframe->flags |= AV_FRAME_FLAG_KEY;
else
pic->avframe->flags &= ~AV_FRAME_FLAG_KEY;
pic->avframe->pict_type = s->num_refs + 1; /* Definition of AVPictureType in avutil.h */ pic->avframe->pict_type = s->num_refs + 1; /* Definition of AVPictureType in avutil.h */
/* VC-2 Low Delay has a different parse code than the Dirac Low Delay */ /* VC-2 Low Delay has a different parse code than the Dirac Low Delay */

View File

@ -653,7 +653,7 @@ decode_coding_unit:
if ((ret = ff_thread_get_buffer(avctx, picture, 0)) < 0) if ((ret = ff_thread_get_buffer(avctx, picture, 0)) < 0)
return ret; return ret;
picture->pict_type = AV_PICTURE_TYPE_I; picture->pict_type = AV_PICTURE_TYPE_I;
picture->key_frame = 1; picture->flags |= AV_FRAME_FLAG_KEY;
} }
ctx->buf_size = buf_size - ctx->data_offset; ctx->buf_size = buf_size - ctx->data_offset;

View File

@ -646,7 +646,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame,
} }
s->frame = frame; s->frame = frame;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
avctx->pix_fmt = s->sys->pix_fmt; avctx->pix_fmt = s->sys->pix_fmt;
avctx->framerate = av_inv_q(s->sys->time_base); avctx->framerate = av_inv_q(s->sys->time_base);

View File

@ -258,19 +258,19 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
switch(compr){ switch(compr){
case -1: case -1:
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
if (c->prev->data[0]) if (c->prev->data[0])
memcpy(frame->data[0], c->prev->data[0], frame->linesize[0] * avctx->height); memcpy(frame->data[0], c->prev->data[0], frame->linesize[0] * avctx->height);
else{ // Should happen only when first frame is 'NULL' else{ // Should happen only when first frame is 'NULL'
memset(frame->data[0], 0, frame->linesize[0] * avctx->height); memset(frame->data[0], 0, frame->linesize[0] * avctx->height);
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
} }
break; break;
case 2: case 2:
case 4: case 4:
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
for (j = 0; j < avctx->height; j++) { for (j = 0; j < avctx->height; j++) {
memcpy(outptr, srcptr, avctx->width); memcpy(outptr, srcptr, avctx->width);
@ -285,7 +285,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
if (!(avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL)) if (!(avctx->flags2 & AV_CODEC_FLAG2_SHOW_ALL))
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
for (j = 0; j < avctx->height; j++) { for (j = 0; j < avctx->height; j++) {
if(tmpptr){ if(tmpptr){
@ -300,7 +300,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
break; break;
case 12: // ScummVM coding case 12: // ScummVM coding
case 13: case 13:
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
if (!c->prev->data[0]) { if (!c->prev->data[0]) {
av_log(avctx, AV_LOG_ERROR, "Missing reference frame\n"); av_log(avctx, AV_LOG_ERROR, "Missing reference frame\n");

View File

@ -864,7 +864,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *pic,
return ret; return ret;
pic->pict_type = AV_PICTURE_TYPE_I; pic->pict_type = AV_PICTURE_TYPE_I;
pic->key_frame = 1; pic->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -1220,7 +1220,7 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame,
/* Frame is ready to be output. */ /* Frame is ready to be output. */
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -202,10 +202,10 @@ static int cmv_decode_frame(AVCodecContext *avctx, AVFrame *frame,
buf += EA_PREAMBLE_SIZE; buf += EA_PREAMBLE_SIZE;
if ((buf[0]&1)) { // subtype if ((buf[0]&1)) { // subtype
cmv_decode_inter(s, frame, buf+2, buf_end); cmv_decode_inter(s, frame, buf+2, buf_end);
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
}else{ }else{
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
cmv_decode_intra(s, frame, buf+2, buf_end); cmv_decode_intra(s, frame, buf+2, buf_end);
} }

View File

@ -237,7 +237,7 @@ static int tgq_decode_frame(AVCodecContext *avctx, AVFrame *frame,
if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
return ret; return ret;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
for (y = 0; y < FFALIGN(avctx->height, 16) >> 4; y++) for (y = 0; y < FFALIGN(avctx->height, 16) >> 4; y++)

View File

@ -310,7 +310,7 @@ static int tgv_decode_frame(AVCodecContext *avctx, AVFrame *frame,
if (chunk_type == kVGT_TAG) { if (chunk_type == kVGT_TAG) {
int y; int y;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
if (!s->frame_buffer && if (!s->frame_buffer &&
@ -330,7 +330,7 @@ static int tgv_decode_frame(AVCodecContext *avctx, AVFrame *frame,
av_log(avctx, AV_LOG_WARNING, "inter frame without corresponding intra frame\n"); av_log(avctx, AV_LOG_WARNING, "inter frame without corresponding intra frame\n");
return buf_size; return buf_size;
} }
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
if (tgv_decode_inter(s, frame, buf, buf_end) < 0) { if (tgv_decode_inter(s, frame, buf, buf_end) < 0) {
av_log(avctx, AV_LOG_WARNING, "truncated inter frame\n"); av_log(avctx, AV_LOG_WARNING, "truncated inter frame\n");

View File

@ -192,6 +192,8 @@ int ff_encode_get_frame(AVCodecContext *avctx, AVFrame *frame)
av_frame_move_ref(frame, avci->buffer_frame); av_frame_move_ref(frame, avci->buffer_frame);
if (frame->key_frame)
frame->flags |= AV_FRAME_FLAG_KEY;
#if FF_API_INTERLACED_FRAME #if FF_API_INTERLACED_FRAME
FF_DISABLE_DEPRECATION_WARNINGS FF_DISABLE_DEPRECATION_WARNINGS
if (frame->interlaced_frame) if (frame->interlaced_frame)

View File

@ -264,16 +264,16 @@ static int decode_slice(AVCodecContext *c, void *arg)
for( si=0; fs != f->slice_context[si]; si ++) for( si=0; fs != f->slice_context[si]; si ++)
; ;
if(f->fsrc && !p->key_frame) if(f->fsrc && !(p->flags & AV_FRAME_FLAG_KEY))
ff_thread_await_progress(&f->last_picture, si, 0); ff_thread_await_progress(&f->last_picture, si, 0);
if(f->fsrc && !p->key_frame) { if(f->fsrc && !(p->flags & AV_FRAME_FLAG_KEY)) {
FFV1Context *fssrc = f->fsrc->slice_context[si]; FFV1Context *fssrc = f->fsrc->slice_context[si];
FFV1Context *fsdst = f->slice_context[si]; FFV1Context *fsdst = f->slice_context[si];
av_assert1(fsdst->plane_count == fssrc->plane_count); av_assert1(fsdst->plane_count == fssrc->plane_count);
av_assert1(fsdst == fs); av_assert1(fsdst == fs);
if (!p->key_frame) if (!(p->flags & AV_FRAME_FLAG_KEY))
fsdst->slice_damaged |= fssrc->slice_damaged; fsdst->slice_damaged |= fssrc->slice_damaged;
for (i = 0; i < f->plane_count; i++) { for (i = 0; i < f->plane_count; i++) {
@ -310,7 +310,7 @@ static int decode_slice(AVCodecContext *c, void *arg)
} }
if ((ret = ff_ffv1_init_slice_state(f, fs)) < 0) if ((ret = ff_ffv1_init_slice_state(f, fs)) < 0)
return ret; return ret;
if (f->cur->key_frame || fs->slice_reset_contexts) { if ((f->cur->flags & AV_FRAME_FLAG_KEY) || fs->slice_reset_contexts) {
ff_ffv1_clear_slice_state(f, fs); ff_ffv1_clear_slice_state(f, fs);
} else if (fs->slice_damaged) { } else if (fs->slice_damaged) {
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
@ -892,7 +892,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
p->pict_type = AV_PICTURE_TYPE_I; //FIXME I vs. P p->pict_type = AV_PICTURE_TYPE_I; //FIXME I vs. P
if (get_rac(c, &keystate)) { if (get_rac(c, &keystate)) {
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
f->key_frame_ok = 0; f->key_frame_ok = 0;
if ((ret = read_header(f)) < 0) if ((ret = read_header(f)) < 0)
return ret; return ret;
@ -903,7 +903,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
"Cannot decode non-keyframe without valid keyframe\n"); "Cannot decode non-keyframe without valid keyframe\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
p->key_frame = 0; p->flags &= ~AV_FRAME_FLAG_KEY;
} }
if (f->ac != AC_GOLOMB_RICE) { if (f->ac != AC_GOLOMB_RICE) {
@ -927,7 +927,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
if (avctx->debug & FF_DEBUG_PICT_INFO) if (avctx->debug & FF_DEBUG_PICT_INFO)
av_log(avctx, AV_LOG_DEBUG, "ver:%d keyframe:%d coder:%d ec:%d slices:%d bps:%d\n", av_log(avctx, AV_LOG_DEBUG, "ver:%d keyframe:%d coder:%d ec:%d slices:%d bps:%d\n",
f->version, p->key_frame, f->ac, f->ec, f->slice_count, f->avctx->bits_per_raw_sample); f->version, !!(p->flags & AV_FRAME_FLAG_KEY), f->ac, f->ec, f->slice_count, f->avctx->bits_per_raw_sample);
ff_thread_finish_setup(avctx); ff_thread_finish_setup(avctx);

View File

@ -406,11 +406,11 @@ static int fic_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
NULL, nslices, sizeof(ctx->slice_data[0]))) < 0) NULL, nslices, sizeof(ctx->slice_data[0]))) < 0)
return ret; return ret;
ctx->frame->key_frame = 1; ctx->frame->flags |= AV_FRAME_FLAG_KEY;
ctx->frame->pict_type = AV_PICTURE_TYPE_I; ctx->frame->pict_type = AV_PICTURE_TYPE_I;
for (slice = 0; slice < nslices; slice++) { for (slice = 0; slice < nslices; slice++) {
if (ctx->slice_data[slice].p_frame) { if (ctx->slice_data[slice].p_frame) {
ctx->frame->key_frame = 0; ctx->frame->flags &= ~AV_FRAME_FLAG_KEY;
ctx->frame->pict_type = AV_PICTURE_TYPE_P; ctx->frame->pict_type = AV_PICTURE_TYPE_P;
break; break;
} }

View File

@ -301,7 +301,7 @@ static int fits_decode_frame(AVCodecContext *avctx, AVFrame *p,
} }
} }
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
*got_frame = 1; *got_frame = 1;

View File

@ -433,7 +433,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
return ret; return ret;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
src = s->buffer; src = s->buffer;
@ -519,7 +519,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
return ret; return ret;
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
ssrc = s->buffer; ssrc = s->buffer;

View File

@ -216,7 +216,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *f,
} }
f->pict_type = AV_PICTURE_TYPE_I; f->pict_type = AV_PICTURE_TYPE_I;
f->key_frame = 1; f->flags |= AV_FRAME_FLAG_KEY;
avctx->pix_fmt = version & 1 ? is_pal ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_BGR24 : AV_PIX_FMT_YUVJ420P; avctx->pix_fmt = version & 1 ? is_pal ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_BGR24 : AV_PIX_FMT_YUVJ420P;
avctx->color_range = version & 1 ? AVCOL_RANGE_UNSPECIFIED avctx->color_range = version & 1 ? AVCOL_RANGE_UNSPECIFIED

View File

@ -63,7 +63,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *pic,
return ret; return ret;
pic->pict_type = AV_PICTURE_TYPE_I; pic->pict_type = AV_PICTURE_TYPE_I;
pic->key_frame = 1; pic->flags |= AV_FRAME_FLAG_KEY;
for (field = 0; field < 2; field++) { for (field = 0; field < 2; field++) {
int i; int i;

View File

@ -1560,7 +1560,10 @@ static int g2m_decode_frame(AVCodecContext *avctx, AVFrame *pic,
if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) if ((ret = ff_get_buffer(avctx, pic, 0)) < 0)
return ret; return ret;
pic->key_frame = got_header; if (got_header)
pic->flags |= AV_FRAME_FLAG_KEY;
else
pic->flags &= ~AV_FRAME_FLAG_KEY;
pic->pict_type = got_header ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; pic->pict_type = got_header ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
for (i = 0; i < avctx->height; i++) for (i = 0; i < avctx->height; i++)

View File

@ -180,7 +180,7 @@ static int gem_decode_frame(AVCodecContext *avctx, AVFrame *p,
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
p->palette_has_changed = 1; p->palette_has_changed = 1;
palette = (uint32_t *)p->data[1]; palette = (uint32_t *)p->data[1];

View File

@ -501,7 +501,7 @@ static int gif_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
s->frame->pict_type = AV_PICTURE_TYPE_I; s->frame->pict_type = AV_PICTURE_TYPE_I;
s->frame->key_frame = 1; s->frame->flags |= AV_FRAME_FLAG_KEY;
s->keyframe_ok = 1; s->keyframe_ok = 1;
} else { } else {
if (!s->keyframe_ok) { if (!s->keyframe_ok) {
@ -513,7 +513,7 @@ static int gif_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
return ret; return ret;
s->frame->pict_type = AV_PICTURE_TYPE_P; s->frame->pict_type = AV_PICTURE_TYPE_P;
s->frame->key_frame = 0; s->frame->flags &= ~AV_FRAME_FLAG_KEY;
} }
ret = gif_parse_next_image(s, s->frame); ret = gif_parse_next_image(s, s->frame);

View File

@ -643,7 +643,10 @@ retry:
// for skipping the frame // for skipping the frame
s->current_picture.f->pict_type = s->pict_type; s->current_picture.f->pict_type = s->pict_type;
s->current_picture.f->key_frame = s->pict_type == AV_PICTURE_TYPE_I; if (s->pict_type == AV_PICTURE_TYPE_I)
s->current_picture.f->flags |= AV_FRAME_FLAG_KEY;
else
s->current_picture.f->flags &= ~AV_FRAME_FLAG_KEY;
if ((avctx->skip_frame >= AVDISCARD_NONREF && s->pict_type == AV_PICTURE_TYPE_B) || if ((avctx->skip_frame >= AVDISCARD_NONREF && s->pict_type == AV_PICTURE_TYPE_B) ||
(avctx->skip_frame >= AVDISCARD_NONKEY && s->pict_type != AV_PICTURE_TYPE_I) || (avctx->skip_frame >= AVDISCARD_NONKEY && s->pict_type != AV_PICTURE_TYPE_I) ||

View File

@ -501,7 +501,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
* in later. * in later.
* See decode_nal_units(). * See decode_nal_units().
*/ */
pic->f->key_frame = 0; pic->f->flags &= ~AV_FRAME_FLAG_KEY;
pic->mmco_reset = 0; pic->mmco_reset = 0;
pic->recovered = 0; pic->recovered = 0;
pic->invalid_gap = 0; pic->invalid_gap = 0;
@ -1326,7 +1326,7 @@ static int h264_select_output_frame(H264Context *h)
out = h->delayed_pic[0]; out = h->delayed_pic[0];
out_idx = 0; out_idx = 0;
for (i = 1; h->delayed_pic[i] && for (i = 1; h->delayed_pic[i] &&
!h->delayed_pic[i]->f->key_frame && !(h->delayed_pic[i]->f->flags & AV_FRAME_FLAG_KEY) &&
!h->delayed_pic[i]->mmco_reset; !h->delayed_pic[i]->mmco_reset;
i++) i++)
if (h->delayed_pic[i]->poc < out->poc) { if (h->delayed_pic[i]->poc < out->poc) {
@ -1334,7 +1334,7 @@ static int h264_select_output_frame(H264Context *h)
out_idx = i; out_idx = i;
} }
if (h->avctx->has_b_frames == 0 && if (h->avctx->has_b_frames == 0 &&
(h->delayed_pic[0]->f->key_frame || h->delayed_pic[0]->mmco_reset)) ((h->delayed_pic[0]->f->flags & AV_FRAME_FLAG_KEY) || h->delayed_pic[0]->mmco_reset))
h->next_outputed_poc = INT_MIN; h->next_outputed_poc = INT_MIN;
out_of_order = out->poc < h->next_outputed_poc; out_of_order = out->poc < h->next_outputed_poc;
@ -1345,7 +1345,7 @@ static int h264_select_output_frame(H264Context *h)
} }
if (!out_of_order && pics > h->avctx->has_b_frames) { if (!out_of_order && pics > h->avctx->has_b_frames) {
h->next_output_pic = out; h->next_output_pic = out;
if (out_idx == 0 && h->delayed_pic[0] && (h->delayed_pic[0]->f->key_frame || h->delayed_pic[0]->mmco_reset)) { if (out_idx == 0 && h->delayed_pic[0] && ((h->delayed_pic[0]->f->flags & AV_FRAME_FLAG_KEY) || h->delayed_pic[0]->mmco_reset)) {
h->next_outputed_poc = INT_MIN; h->next_outputed_poc = INT_MIN;
} else } else
h->next_outputed_poc = out->poc; h->next_outputed_poc = out->poc;
@ -1635,7 +1635,7 @@ static int h264_field_start(H264Context *h, const H264SliceContext *sl,
} }
} }
h->cur_pic_ptr->f->key_frame |= (nal->type == H264_NAL_IDR_SLICE); h->cur_pic_ptr->f->flags |= AV_FRAME_FLAG_KEY * !!(nal->type == H264_NAL_IDR_SLICE);
if (nal->type == H264_NAL_IDR_SLICE || if (nal->type == H264_NAL_IDR_SLICE ||
(h->recovery_frame == h->poc.frame_num && nal->ref_idc)) { (h->recovery_frame == h->poc.frame_num && nal->ref_idc)) {

View File

@ -849,7 +849,7 @@ static int output_frame(H264Context *h, AVFrame *dst, H264Picture *srcp)
av_dict_set(&dst->metadata, "stereo_mode", ff_h264_sei_stereo_mode(&h->sei.common.frame_packing), 0); av_dict_set(&dst->metadata, "stereo_mode", ff_h264_sei_stereo_mode(&h->sei.common.frame_packing), 0);
if (srcp->sei_recovery_frame_cnt == 0) if (srcp->sei_recovery_frame_cnt == 0)
dst->key_frame = 1; dst->flags |= AV_FRAME_FLAG_KEY;
if (h->avctx->export_side_data & AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS) { if (h->avctx->export_side_data & AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS) {
ret = h264_export_enc_params(dst, srcp); ret = h264_export_enc_params(dst, srcp);
@ -951,7 +951,7 @@ static int send_next_delayed_frame(H264Context *h, AVFrame *dst_frame,
out_idx = 0; out_idx = 0;
for (i = 1; for (i = 1;
h->delayed_pic[i] && h->delayed_pic[i] &&
!h->delayed_pic[i]->f->key_frame && !(h->delayed_pic[i]->f->flags & AV_FRAME_FLAG_KEY) &&
!h->delayed_pic[i]->mmco_reset; !h->delayed_pic[i]->mmco_reset;
i++) i++)
if (h->delayed_pic[i]->poc < out->poc) { if (h->delayed_pic[i]->poc < out->poc) {

View File

@ -328,7 +328,7 @@ static int hap_decode(AVCodecContext *avctx, AVFrame *frame,
/* Frame is ready to be output */ /* Frame is ready to be output */
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -212,7 +212,7 @@ convert:
} }
} }
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
*got_frame = 1; *got_frame = 1;

View File

@ -2910,7 +2910,10 @@ static int hevc_frame_start(HEVCContext *s)
goto fail; goto fail;
} }
s->ref->frame->key_frame = IS_IRAP(s); if (IS_IRAP(s))
s->ref->frame->flags |= AV_FRAME_FLAG_KEY;
else
s->ref->frame->flags &= ~AV_FRAME_FLAG_KEY;
s->ref->needs_fg = s->sei.common.film_grain_characteristics.present && s->ref->needs_fg = s->sei.common.film_grain_characteristics.present &&
!(s->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && !(s->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) &&

View File

@ -420,7 +420,7 @@ static int hnm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
postprocess_current_frame(avctx); postprocess_current_frame(avctx);
copy_processed_frame(avctx, frame); copy_processed_frame(avctx, frame);
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
memcpy(frame->data[1], hnm->palette, 256 * 4); memcpy(frame->data[1], hnm->palette, 256 * 4);
*got_frame = 1; *got_frame = 1;
} else if (chunk_id == HNM4_CHUNK_ID_IU) { } else if (chunk_id == HNM4_CHUNK_ID_IU) {
@ -438,7 +438,7 @@ static int hnm_decode_frame(AVCodecContext *avctx, AVFrame *frame,
} }
copy_processed_frame(avctx, frame); copy_processed_frame(avctx, frame);
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
memcpy(frame->data[1], hnm->palette, 256 * 4); memcpy(frame->data[1], hnm->palette, 256 * 4);
*got_frame = 1; *got_frame = 1;
FFSWAP(uint8_t *, hnm->current, hnm->previous); FFSWAP(uint8_t *, hnm->current, hnm->previous);

View File

@ -354,7 +354,7 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic,
return ret; return ret;
} }
pic->key_frame = 1; pic->flags |= AV_FRAME_FLAG_KEY;
pic->pict_type = AV_PICTURE_TYPE_I; pic->pict_type = AV_PICTURE_TYPE_I;
*got_frame = 1; *got_frame = 1;

View File

@ -504,7 +504,7 @@ static int hqx_decode_frame(AVCodecContext *avctx, AVFrame *frame,
avctx->execute2(avctx, decode_slice_thread, NULL, NULL, 16); avctx->execute2(avctx, decode_slice_thread, NULL, NULL, 16);
ctx->pic->key_frame = 1; ctx->pic->flags |= AV_FRAME_FLAG_KEY;
ctx->pic->pict_type = AV_PICTURE_TYPE_I; ctx->pic->pict_type = AV_PICTURE_TYPE_I;
*got_picture_ptr = 1; *got_picture_ptr = 1;

View File

@ -1887,10 +1887,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
} }
if (avpkt->flags & AV_PKT_FLAG_KEY) { if (avpkt->flags & AV_PKT_FLAG_KEY) {
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
} else { } else {
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
} }

View File

@ -420,11 +420,11 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
switch (type) { switch (type) {
case 0x19781977: case 0x19781977:
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
break; break;
case 0x12250926: case 0x12250926:
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
break; break;
default: default:
@ -434,7 +434,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
if (avctx->width != width || if (avctx->width != width ||
avctx->height != height) { avctx->height != height) {
if (!frame->key_frame) { if (!(frame->flags & AV_FRAME_FLAG_KEY)) {
av_log(avctx, AV_LOG_ERROR, "Frame size change is unsupported.\n"); av_log(avctx, AV_LOG_ERROR, "Frame size change is unsupported.\n");
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
@ -445,10 +445,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
if (ret < 0) if (ret < 0)
return ret; return ret;
if ((ret = ff_get_buffer(avctx, frame, frame->key_frame ? AV_GET_BUFFER_FLAG_REF : 0)) < 0) if ((ret = ff_get_buffer(avctx, frame, (frame->flags & AV_FRAME_FLAG_KEY) ? AV_GET_BUFFER_FLAG_REF : 0)) < 0)
return ret; return ret;
if (frame->key_frame) { if (frame->flags & AV_FRAME_FLAG_KEY) {
ret = decode_intra(avctx, gb, frame); ret = decode_intra(avctx, gb, frame);
if (ret < 0) if (ret < 0)
return ret; return ret;

View File

@ -59,9 +59,9 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
if (ff_copy_palette(imx->pal, avpkt, avctx)) { if (ff_copy_palette(imx->pal, avpkt, avctx)) {
frame->palette_has_changed = 1; frame->palette_has_changed = 1;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
} else { } else {
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->palette_has_changed = 0; frame->palette_has_changed = 0;
} }
@ -92,7 +92,7 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
break; break;
} }
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
break; break;
case 1: case 1:
if (len == 0) { if (len == 0) {
@ -114,7 +114,7 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
break; break;
} }
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
} else { } else {
while (len > 0) { while (len > 0) {
fill = bytestream2_get_byte(&gb); fill = bytestream2_get_byte(&gb);
@ -150,7 +150,7 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
} }
} }
frame->pict_type = frame->key_frame ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; frame->pict_type = (frame->flags & AV_FRAME_FLAG_KEY) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
if ((ret = av_frame_ref(rframe, frame)) < 0) if ((ret = av_frame_ref(rframe, frame)) < 0)
return ret; return ret;

View File

@ -2482,7 +2482,7 @@ static int jpeg2000_decode_frame(AVCodecContext *avctx, AVFrame *picture,
if ((ret = ff_thread_get_buffer(avctx, picture, 0)) < 0) if ((ret = ff_thread_get_buffer(avctx, picture, 0)) < 0)
goto end; goto end;
picture->pict_type = AV_PICTURE_TYPE_I; picture->pict_type = AV_PICTURE_TYPE_I;
picture->key_frame = 1; picture->flags |= AV_FRAME_FLAG_KEY;
if (ret = jpeg2000_read_bitstream_packets(s)) if (ret = jpeg2000_read_bitstream_packets(s))
goto end; goto end;

View File

@ -211,7 +211,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
} }
if (video_size) { if (video_size) {
s->frame->key_frame = 1; s->frame->flags |= AV_FRAME_FLAG_KEY;
s->frame->pict_type = AV_PICTURE_TYPE_I; s->frame->pict_type = AV_PICTURE_TYPE_I;
s->frame->palette_has_changed = s->palette_has_changed; s->frame->palette_has_changed = s->palette_has_changed;
s->palette_has_changed = 0; s->palette_has_changed = 0;

View File

@ -288,10 +288,10 @@ static int decode_frame(AVCodecContext * avctx, AVFrame *frame,
} }
if (header & KMVC_KEYFRAME) { if (header & KMVC_KEYFRAME) {
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
} else { } else {
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
} }

View File

@ -550,7 +550,7 @@ static int lag_decode_frame(AVCodecContext *avctx, AVFrame *p,
int i, j, planes = 3; int i, j, planes = 3;
int ret = 0; int ret = 0;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
frametype = buf[0]; frametype = buf[0];

View File

@ -478,7 +478,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
*got_frame = 1; *got_frame = 1;

View File

@ -185,7 +185,10 @@ static int aom_decode(AVCodecContext *avctx, AVFrame *picture,
aom_codec_frame_flags_t flags; aom_codec_frame_flags_t flags;
ret = aom_codec_control(&ctx->decoder, AOMD_GET_FRAME_FLAGS, &flags); ret = aom_codec_control(&ctx->decoder, AOMD_GET_FRAME_FLAGS, &flags);
if (ret == AOM_CODEC_OK) { if (ret == AOM_CODEC_OK) {
picture->key_frame = !!(flags & AOM_FRAME_IS_KEY); if (flags & AOM_FRAME_IS_KEY)
picture->flags |= AV_FRAME_FLAG_KEY;
else
picture->flags &= ~AV_FRAME_FLAG_KEY;
if (flags & (AOM_FRAME_IS_KEY | AOM_FRAME_IS_INTRAONLY)) if (flags & (AOM_FRAME_IS_KEY | AOM_FRAME_IS_INTRAONLY))
picture->pict_type = AV_PICTURE_TYPE_I; picture->pict_type = AV_PICTURE_TYPE_I;
else if (flags & AOM_FRAME_IS_SWITCH) else if (flags & AOM_FRAME_IS_SWITCH)

View File

@ -463,7 +463,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
goto fail; goto fail;
frame->pkt_dts = pkt->pts; frame->pkt_dts = pkt->pts;
frame->key_frame = p->frame_hdr->frame_type == DAV1D_FRAME_TYPE_KEY; if (p->frame_hdr->frame_type == DAV1D_FRAME_TYPE_KEY)
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
switch (p->frame_hdr->frame_type) { switch (p->frame_hdr->frame_type) {
case DAV1D_FRAME_TYPE_KEY: case DAV1D_FRAME_TYPE_KEY:

View File

@ -411,7 +411,7 @@ static int libjxl_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_f
/* full image is one frame, even if animated */ /* full image is one frame, even if animated */
av_log(avctx, AV_LOG_DEBUG, "FULL_IMAGE event emitted\n"); av_log(avctx, AV_LOG_DEBUG, "FULL_IMAGE event emitted\n");
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
if (ctx->iccp) { if (ctx->iccp) {
AVFrameSideData *sd = av_frame_new_side_data_from_buf(frame, AV_FRAME_DATA_ICC_PROFILE, ctx->iccp); AVFrameSideData *sd = av_frame_new_side_data_from_buf(frame, AV_FRAME_DATA_ICC_PROFILE, ctx->iccp);
if (!sd) if (!sd)

View File

@ -73,7 +73,7 @@ static int librsvg_decode_frame(AVCodecContext *avctx, AVFrame *frame,
if ((ret = ff_get_buffer(avctx, frame, 0))) if ((ret = ff_get_buffer(avctx, frame, 0)))
return ret; return ret;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
image = cairo_image_surface_create_for_data(frame->data[0], CAIRO_FORMAT_ARGB32, image = cairo_image_surface_create_for_data(frame->data[0], CAIRO_FORMAT_ARGB32,
frame->width, frame->height, frame->width, frame->height,

View File

@ -96,7 +96,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
av_log(NULL, AV_LOG_WARNING, "Error frame type in uavs3d: %d.\n", dec_frame->type); av_log(NULL, AV_LOG_WARNING, "Error frame type in uavs3d: %d.\n", dec_frame->type);
} else { } else {
frm->pict_type = ff_avs3_image_type[dec_frame->type]; frm->pict_type = ff_avs3_image_type[dec_frame->type];
frm->key_frame = (frm->pict_type == AV_PICTURE_TYPE_I); if (frm->pict_type == AV_PICTURE_TYPE_I)
frm->flags |= AV_FRAME_FLAG_KEY;
else
frm->flags &= ~AV_FRAME_FLAG_KEY;
} }
for (i = 0; i < 3; i++) { for (i = 0; i < 3; i++) {

View File

@ -206,7 +206,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
if ((ret = ff_get_buffer(avctx, p, 0)) < 0) if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
return ret; return ret;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
#define ADVANCE_BY_DECODED do { \ #define ADVANCE_BY_DECODED do { \
if (decoded < 0 || decoded >= buf_size) goto buf_too_small; \ if (decoded < 0 || decoded >= buf_size) goto buf_too_small; \

View File

@ -154,10 +154,13 @@ static int decode_frame_lscr(AVCodecContext *avctx, AVFrame *rframe,
size = bytestream2_get_le32(gb); size = bytestream2_get_le32(gb);
frame->key_frame = (nb_blocks == 1) && if ((nb_blocks == 1) &&
(w == avctx->width) && (w == avctx->width) &&
(h == avctx->height) && (h == avctx->height) &&
(x == 0) && (y == 0); (x == 0) && (y == 0))
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
bytestream2_seek(gb, 2 + nb_blocks * 12 + offset, SEEK_SET); bytestream2_seek(gb, 2 + nb_blocks * 12 + offset, SEEK_SET);
csize = bytestream2_get_be32(gb); csize = bytestream2_get_be32(gb);
@ -199,7 +202,7 @@ static int decode_frame_lscr(AVCodecContext *avctx, AVFrame *rframe,
} }
} }
frame->pict_type = frame->key_frame ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; frame->pict_type = (frame->flags & AV_FRAME_FLAG_KEY) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
if ((ret = av_frame_ref(rframe, frame)) < 0) if ((ret = av_frame_ref(rframe, frame)) < 0)
return ret; return ret;

View File

@ -67,7 +67,7 @@ static int m101_decode_frame(AVCodecContext *avctx, AVFrame *frame,
if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
return ret; return ret;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
if ((avctx->extradata[3*4] & 3) != 3) { if ((avctx->extradata[3*4] & 3) != 3) {
frame->flags |= AV_FRAME_FLAG_INTERLACED; frame->flags |= AV_FRAME_FLAG_INTERLACED;
if (avctx->extradata[3*4] & 1) if (avctx->extradata[3*4] & 1)

View File

@ -637,7 +637,7 @@ static int magy_decode_frame(AVCodecContext *avctx, AVFrame *p,
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
if ((ret = ff_thread_get_buffer(avctx, p, 0)) < 0) if ((ret = ff_thread_get_buffer(avctx, p, 0)) < 0)
return ret; return ret;

View File

@ -177,7 +177,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
if ((ret = ff_thread_get_buffer(avctx, frame, 0)) < 0) if ((ret = ff_thread_get_buffer(avctx, frame, 0)) < 0)
return ret; return ret;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
av_fast_padded_malloc(&a->bitstream_buffer, &a->bitstream_buffer_size, buf_size); av_fast_padded_malloc(&a->bitstream_buffer, &a->bitstream_buffer_size, buf_size);
if (!a->bitstream_buffer) if (!a->bitstream_buffer)

View File

@ -222,7 +222,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe,
return ret; return ret;
frame->pict_type = key ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; frame->pict_type = key ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
frame->key_frame = key; if (key)
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -745,7 +745,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
if (s->avctx->skip_frame == AVDISCARD_ALL) { if (s->avctx->skip_frame == AVDISCARD_ALL) {
s->picture_ptr->pict_type = AV_PICTURE_TYPE_I; s->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
s->picture_ptr->key_frame = 1; s->picture_ptr->flags |= AV_FRAME_FLAG_KEY;
s->got_picture = 1; s->got_picture = 1;
return 0; return 0;
} }
@ -754,7 +754,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
if (ff_get_buffer(s->avctx, s->picture_ptr, AV_GET_BUFFER_FLAG_REF) < 0) if (ff_get_buffer(s->avctx, s->picture_ptr, AV_GET_BUFFER_FLAG_REF) < 0)
return -1; return -1;
s->picture_ptr->pict_type = AV_PICTURE_TYPE_I; s->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
s->picture_ptr->key_frame = 1; s->picture_ptr->flags |= AV_FRAME_FLAG_KEY;
s->got_picture = 1; s->got_picture = 1;
// Lets clear the palette to avoid leaving uninitialized values in it // Lets clear the palette to avoid leaving uninitialized values in it

View File

@ -1235,7 +1235,7 @@ static int mobiclip_decode(AVCodecContext *avctx, AVFrame *rframe,
if (get_bits1(gb)) { if (get_bits1(gb)) {
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
s->moflex = get_bits1(gb); s->moflex = get_bits1(gb);
s->dct_tab_idx = get_bits1(gb); s->dct_tab_idx = get_bits1(gb);
@ -1256,7 +1256,7 @@ static int mobiclip_decode(AVCodecContext *avctx, AVFrame *rframe,
memset(motion, 0, s->motion_size); memset(motion, 0, s->motion_size);
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;
frame->key_frame = 0; frame->flags &= ~AV_FRAME_FLAG_KEY;
s->dct_tab_idx = 0; s->dct_tab_idx = 0;
ret = setup_qtables(avctx, s->quantizer + (int64_t)get_se_golomb(gb)); ret = setup_qtables(avctx, s->quantizer + (int64_t)get_se_golomb(gb));

View File

@ -1343,7 +1343,10 @@ static int mpeg1_decode_picture(AVCodecContext *avctx, const uint8_t *buf,
s->mpeg_f_code[1][1] = f_code; s->mpeg_f_code[1][1] = f_code;
} }
s->current_picture.f->pict_type = s->pict_type; s->current_picture.f->pict_type = s->pict_type;
s->current_picture.f->key_frame = s->pict_type == AV_PICTURE_TYPE_I; if (s->pict_type == AV_PICTURE_TYPE_I)
s->current_picture.f->flags |= AV_FRAME_FLAG_KEY;
else
s->current_picture.f->flags &= ~AV_FRAME_FLAG_KEY;
if (avctx->debug & FF_DEBUG_PICT_INFO) if (avctx->debug & FF_DEBUG_PICT_INFO)
av_log(avctx, AV_LOG_DEBUG, av_log(avctx, AV_LOG_DEBUG,
@ -1525,7 +1528,10 @@ static int mpeg_decode_picture_coding_extension(Mpeg1Context *s1)
} else } else
s->pict_type = AV_PICTURE_TYPE_B; s->pict_type = AV_PICTURE_TYPE_B;
s->current_picture.f->pict_type = s->pict_type; s->current_picture.f->pict_type = s->pict_type;
s->current_picture.f->key_frame = s->pict_type == AV_PICTURE_TYPE_I; if (s->pict_type == AV_PICTURE_TYPE_I)
s->current_picture.f->flags |= AV_FRAME_FLAG_KEY;
else
s->current_picture.f->flags &= ~AV_FRAME_FLAG_KEY;
} }
s->intra_dc_precision = get_bits(&s->gb, 2); s->intra_dc_precision = get_bits(&s->gb, 2);
@ -3046,7 +3052,7 @@ static int ipu_decode_frame(AVCodecContext *avctx, AVFrame *frame,
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -290,7 +290,7 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s)
AVRational aspect_ratio = s->avctx->sample_aspect_ratio; AVRational aspect_ratio = s->avctx->sample_aspect_ratio;
int aspect_ratio_info; int aspect_ratio_info;
if (!s->current_picture.f->key_frame) if (!(s->current_picture.f->flags & AV_FRAME_FLAG_KEY))
return; return;
if (aspect_ratio.num == 0 || aspect_ratio.den == 0) if (aspect_ratio.num == 0 || aspect_ratio.den == 0)

View File

@ -343,7 +343,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
s->current_picture_ptr->field_picture = s->picture_structure != PICT_FRAME; s->current_picture_ptr->field_picture = s->picture_structure != PICT_FRAME;
s->current_picture_ptr->f->pict_type = s->pict_type; s->current_picture_ptr->f->pict_type = s->pict_type;
s->current_picture_ptr->f->key_frame = s->pict_type == AV_PICTURE_TYPE_I; if (s->pict_type == AV_PICTURE_TYPE_I)
s->current_picture.f->flags |= AV_FRAME_FLAG_KEY;
else
s->current_picture.f->flags &= ~AV_FRAME_FLAG_KEY;
if ((ret = ff_mpeg_ref_picture(s->avctx, &s->current_picture, if ((ret = ff_mpeg_ref_picture(s->avctx, &s->current_picture,
s->current_picture_ptr)) < 0) s->current_picture_ptr)) < 0)
@ -382,7 +385,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
s->last_picture_ptr = &s->picture[idx]; s->last_picture_ptr = &s->picture[idx];
s->last_picture_ptr->reference = 3; s->last_picture_ptr->reference = 3;
s->last_picture_ptr->f->key_frame = 0; s->last_picture_ptr->f->flags &= ~AV_FRAME_FLAG_KEY;
s->last_picture_ptr->f->pict_type = AV_PICTURE_TYPE_P; s->last_picture_ptr->f->pict_type = AV_PICTURE_TYPE_P;
if (alloc_picture(s, s->last_picture_ptr) < 0) { if (alloc_picture(s, s->last_picture_ptr) < 0) {
@ -424,7 +427,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
s->next_picture_ptr = &s->picture[idx]; s->next_picture_ptr = &s->picture[idx];
s->next_picture_ptr->reference = 3; s->next_picture_ptr->reference = 3;
s->next_picture_ptr->f->key_frame = 0; s->next_picture_ptr->f->flags &= ~AV_FRAME_FLAG_KEY;
s->next_picture_ptr->f->pict_type = AV_PICTURE_TYPE_P; s->next_picture_ptr->f->pict_type = AV_PICTURE_TYPE_P;
if (alloc_picture(s, s->next_picture_ptr) < 0) { if (alloc_picture(s, s->next_picture_ptr) < 0) {

View File

@ -1703,7 +1703,10 @@ static int frame_start(MpegEncContext *s)
} }
s->current_picture_ptr->f->pict_type = s->pict_type; s->current_picture_ptr->f->pict_type = s->pict_type;
s->current_picture_ptr->f->key_frame = s->pict_type == AV_PICTURE_TYPE_I; if (s->pict_type == AV_PICTURE_TYPE_I)
s->current_picture.f->flags |= AV_FRAME_FLAG_KEY;
else
s->current_picture.f->flags &= ~AV_FRAME_FLAG_KEY;
ff_mpeg_unref_picture(s->avctx, &s->current_picture); ff_mpeg_unref_picture(s->avctx, &s->current_picture);
if ((ret = ff_mpeg_ref_picture(s->avctx, &s->current_picture, if ((ret = ff_mpeg_ref_picture(s->avctx, &s->current_picture,
@ -1979,7 +1982,7 @@ vbv_retry:
return ret; return ret;
} }
if (s->current_picture.f->key_frame) if (s->current_picture.f->flags & AV_FRAME_FLAG_KEY)
pkt->flags |= AV_PKT_FLAG_KEY; pkt->flags |= AV_PKT_FLAG_KEY;
if (s->mb_info) if (s->mb_info)
av_packet_shrink_side_data(pkt, AV_PKT_DATA_H263_MB_INFO, s->mb_info_size); av_packet_shrink_side_data(pkt, AV_PKT_DATA_H263_MB_INFO, s->mb_info_size);
@ -3783,12 +3786,17 @@ static int encode_picture(MpegEncContext *s)
} }
//FIXME var duplication //FIXME var duplication
s->current_picture_ptr->f->key_frame = if (s->pict_type == AV_PICTURE_TYPE_I) {
s->current_picture.f->key_frame = s->pict_type == AV_PICTURE_TYPE_I; //FIXME pic_ptr s->current_picture_ptr->f->flags |= AV_FRAME_FLAG_KEY; //FIXME pic_ptr
s->current_picture.f->flags |= AV_FRAME_FLAG_KEY;
} else {
s->current_picture_ptr->f->flags &= ~AV_FRAME_FLAG_KEY; //FIXME pic_ptr
s->current_picture.f->flags &= ~AV_FRAME_FLAG_KEY;
}
s->current_picture_ptr->f->pict_type = s->current_picture_ptr->f->pict_type =
s->current_picture.f->pict_type = s->pict_type; s->current_picture.f->pict_type = s->pict_type;
if (s->current_picture.f->key_frame) if (s->current_picture.f->flags & AV_FRAME_FLAG_KEY)
s->picture_in_gop_number=0; s->picture_in_gop_number=0;
s->mb_x = s->mb_y = 0; s->mb_x = s->mb_y = 0;

View File

@ -200,7 +200,7 @@ inflate_error:
s->uncomp_buf + s->bpp * j * avctx->width, s->bpp * avctx->width); s->uncomp_buf + s->bpp * j * avctx->width, s->bpp * avctx->width);
} }
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
*got_frame = 1; *got_frame = 1;

View File

@ -47,7 +47,7 @@ static int msp2_decode_frame(AVCodecContext *avctx, AVFrame *p,
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
bytestream2_init(&idx, buf, 2 * avctx->height); bytestream2_init(&idx, buf, 2 * avctx->height);
buf += 2 * avctx->height; buf += 2 * avctx->height;

View File

@ -165,12 +165,12 @@ static int mss1_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
c->corrupted = 0; c->corrupted = 0;
ff_mss12_slicecontext_reset(&ctx->sc); ff_mss12_slicecontext_reset(&ctx->sc);
pal_changed = decode_pal(c, &acoder); pal_changed = decode_pal(c, &acoder);
ctx->pic->key_frame = 1; ctx->pic->flags |= AV_FRAME_FLAG_KEY;
ctx->pic->pict_type = AV_PICTURE_TYPE_I; ctx->pic->pict_type = AV_PICTURE_TYPE_I;
} else { } else {
if (c->corrupted) if (c->corrupted)
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
ctx->pic->key_frame = 0; ctx->pic->flags &= ~AV_FRAME_FLAG_KEY;
ctx->pic->pict_type = AV_PICTURE_TYPE_P; ctx->pic->pict_type = AV_PICTURE_TYPE_P;
} }
c->corrupted = ff_mss12_decode_rect(&ctx->sc, &acoder, 0, 0, c->corrupted = ff_mss12_decode_rect(&ctx->sc, &acoder, 0, 0,

View File

@ -660,7 +660,10 @@ static int mss2_decode_frame(AVCodecContext *avctx, AVFrame *frame,
frame->linesize[0] * (avctx->height - 1); frame->linesize[0] * (avctx->height - 1);
c->rgb_stride = -frame->linesize[0]; c->rgb_stride = -frame->linesize[0];
frame->key_frame = keyframe; if (keyframe)
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; frame->pict_type = keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
if (is_555) { if (is_555) {

View File

@ -740,7 +740,10 @@ static int mss3_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0) if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0)
return ret; return ret;
c->pic->key_frame = keyframe; if (keyframe)
c->pic->flags |= AV_FRAME_FLAG_KEY;
else
c->pic->flags &= ~AV_FRAME_FLAG_KEY;
c->pic->pict_type = keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; c->pic->pict_type = keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
if (!bytestream2_get_bytes_left(&gb)) { if (!bytestream2_get_bytes_left(&gb)) {
if ((ret = av_frame_ref(rframe, c->pic)) < 0) if ((ret = av_frame_ref(rframe, c->pic)) < 0)

View File

@ -503,7 +503,10 @@ static int mss4_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0) if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0)
return ret; return ret;
c->pic->key_frame = (frame_type == INTRA_FRAME); if (frame_type == INTRA_FRAME)
c->pic->flags |= AV_FRAME_FLAG_KEY;
else
c->pic->flags &= ~AV_FRAME_FLAG_KEY;
c->pic->pict_type = (frame_type == INTRA_FRAME) ? AV_PICTURE_TYPE_I c->pic->pict_type = (frame_type == INTRA_FRAME) ? AV_PICTURE_TYPE_I
: AV_PICTURE_TYPE_P; : AV_PICTURE_TYPE_P;
if (frame_type == SKIP_FRAME) { if (frame_type == SKIP_FRAME) {

View File

@ -623,9 +623,8 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
get_qtable(s->intraq_tab[0], s->intra_quant, luma_tab); get_qtable(s->intraq_tab[0], s->intra_quant, luma_tab);
get_qtable(s->intraq_tab[1], s->intra_quant, chroma_tab); get_qtable(s->intraq_tab[1], s->intra_quant, chroma_tab);
frame->key_frame = s->is_inter == 0; if (s->is_inter == 0) {
frame->flags |= AV_FRAME_FLAG_KEY;
if (frame->key_frame) {
ret = decode_intra(avctx, gb, frame); ret = decode_intra(avctx, gb, frame);
if (ret < 0) if (ret < 0)
return ret; return ret;
@ -638,6 +637,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
return AVERROR_INVALIDDATA; return AVERROR_INVALIDDATA;
} }
frame->flags &= ~AV_FRAME_FLAG_KEY;
ret = decode_inter(avctx, gb, frame, s->prev_frame); ret = decode_inter(avctx, gb, frame, s->prev_frame);
if (ret < 0) if (ret < 0)
return ret; return ret;

View File

@ -247,7 +247,7 @@ static int mvc_decode_frame(AVCodecContext *avctx, AVFrame *frame,
return ret; return ret;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;

View File

@ -272,7 +272,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
} }
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;
return avpkt->size; return avpkt->size;

View File

@ -119,10 +119,13 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
bytestream2_init(&gbp, s->prev_frame->data[0], avctx->height * s->prev_frame->linesize[0]); bytestream2_init(&gbp, s->prev_frame->data[0], avctx->height * s->prev_frame->linesize[0]);
bytestream2_init_writer(&pb, frame->data[0], avctx->height * frame->linesize[0]); bytestream2_init_writer(&pb, frame->data[0], avctx->height * frame->linesize[0]);
frame->key_frame = rle_uncompress(&gb, &pb, &gbp, avctx->width, avctx->height, avctx->width * 3, if (rle_uncompress(&gb, &pb, &gbp, avctx->width, avctx->height, avctx->width * 3,
frame->linesize[0], s->prev_frame->linesize[0]); frame->linesize[0], s->prev_frame->linesize[0]))
frame->flags |= AV_FRAME_FLAG_KEY;
else
frame->flags &= ~AV_FRAME_FLAG_KEY;
frame->pict_type = frame->key_frame ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; frame->pict_type = (frame->flags & AV_FRAME_FLAG_KEY) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
av_frame_unref(s->prev_frame); av_frame_unref(s->prev_frame);
if ((ret = av_frame_ref(s->prev_frame, frame)) < 0) if ((ret = av_frame_ref(s->prev_frame, frame)) < 0)

View File

@ -286,11 +286,11 @@ static int mxpeg_decode_frame(AVCodecContext *avctx, AVFrame *rframe,
AV_GET_BUFFER_FLAG_REF)) < 0) AV_GET_BUFFER_FLAG_REF)) < 0)
return ret; return ret;
jpg->picture_ptr->pict_type = AV_PICTURE_TYPE_P; jpg->picture_ptr->pict_type = AV_PICTURE_TYPE_P;
jpg->picture_ptr->key_frame = 0; jpg->picture_ptr->flags &= ~AV_FRAME_FLAG_KEY;
jpg->got_picture = 1; jpg->got_picture = 1;
} else { } else {
jpg->picture_ptr->pict_type = AV_PICTURE_TYPE_I; jpg->picture_ptr->pict_type = AV_PICTURE_TYPE_I;
jpg->picture_ptr->key_frame = 1; jpg->picture_ptr->flags |= AV_FRAME_FLAG_KEY;
} }
if (s->got_mxm_bitmask) { if (s->got_mxm_bitmask) {

View File

@ -514,7 +514,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p,
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
*got_frame = 1; *got_frame = 1;

View File

@ -263,7 +263,10 @@ retry:
} }
c->pic->pict_type = keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; c->pic->pict_type = keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
c->pic->key_frame = keyframe; if (keyframe)
c->pic->flags |= AV_FRAME_FLAG_KEY;
else
c->pic->flags &= ~AV_FRAME_FLAG_KEY;
// decompress/copy/whatever data // decompress/copy/whatever data
switch (comptype) { switch (comptype) {
case NUV_LZO: case NUV_LZO:

View File

@ -296,10 +296,10 @@ static int paf_video_decode(AVCodecContext *avctx, AVFrame *rframe,
if (code & 0x20) { // frame is keyframe if (code & 0x20) { // frame is keyframe
memset(c->pic->data[1], 0, AVPALETTE_SIZE); memset(c->pic->data[1], 0, AVPALETTE_SIZE);
c->current_frame = 0; c->current_frame = 0;
c->pic->key_frame = 1; c->pic->flags |= AV_FRAME_FLAG_KEY;
c->pic->pict_type = AV_PICTURE_TYPE_I; c->pic->pict_type = AV_PICTURE_TYPE_I;
} else { } else {
c->pic->key_frame = 0; c->pic->flags &= ~AV_FRAME_FLAG_KEY;
c->pic->pict_type = AV_PICTURE_TYPE_P; c->pic->pict_type = AV_PICTURE_TYPE_P;
} }

View File

@ -107,7 +107,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame,
return ret; return ret;
if (avpkt->flags & AV_PKT_FLAG_KEY) { if (avpkt->flags & AV_PKT_FLAG_KEY) {
frame->key_frame = 1; frame->flags |= AV_FRAME_FLAG_KEY;
frame->pict_type = AV_PICTURE_TYPE_I; frame->pict_type = AV_PICTURE_TYPE_I;
} else { } else {
frame->pict_type = AV_PICTURE_TYPE_P; frame->pict_type = AV_PICTURE_TYPE_P;

View File

@ -140,7 +140,7 @@ static int pgx_decode_frame(AVCodecContext *avctx, AVFrame *p,
if ((ret = ff_get_buffer(avctx, p, 0)) < 0) if ((ret = ff_get_buffer(avctx, p, 0)) < 0)
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
avctx->bits_per_raw_sample = depth; avctx->bits_per_raw_sample = depth;
if (bpp == 8) if (bpp == 8)
write_frame_8(p, &g, width, height, sign, depth); write_frame_8(p, &g, width, height, sign, depth);

View File

@ -332,7 +332,7 @@ static int photocd_decode_frame(AVCodecContext *avctx, AVFrame *p,
return ret; return ret;
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
bytestream2_init(gb, avpkt->data, avpkt->size); bytestream2_init(gb, avpkt->data, avpkt->size);

View File

@ -667,7 +667,7 @@ static int pixlet_decode_frame(AVCodecContext *avctx, AVFrame *p,
bytestream2_skip(&ctx->gb, 8); bytestream2_skip(&ctx->gb, 8);
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
p->color_range = AVCOL_RANGE_JPEG; p->color_range = AVCOL_RANGE_JPEG;
ret = ff_thread_get_buffer(avctx, p, 0); ret = ff_thread_get_buffer(avctx, p, 0);

View File

@ -840,7 +840,7 @@ static int decode_idat_chunk(AVCodecContext *avctx, PNGDecContext *s,
} }
p->pict_type = AV_PICTURE_TYPE_I; p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1; p->flags |= AV_FRAME_FLAG_KEY;
p->flags |= AV_FRAME_FLAG_INTERLACED * !!s->interlace_type; p->flags |= AV_FRAME_FLAG_INTERLACED * !!s->interlace_type;
if ((ret = populate_avctx_color_fields(avctx, p)) < 0) if ((ret = populate_avctx_color_fields(avctx, p)) < 0)

Some files were not shown because too many files have changed in this diff Show More