From dc7bd7c5a5ad5ea800dfb63cc5dd15670d065527 Mon Sep 17 00:00:00 2001 From: James Almer Date: Wed, 12 Apr 2023 13:58:54 -0300 Subject: avcodec: use the new AVFrame key_frame flag in all decoders and encoders Signed-off-by: James Almer --- libavcodec/012v.c | 2 +- libavcodec/4xm.c | 5 ++++- libavcodec/agm.c | 7 +++++-- libavcodec/aic.c | 2 +- libavcodec/aliaspixdec.c | 2 +- libavcodec/arbc.c | 5 ++++- libavcodec/argo.c | 5 ++++- libavcodec/asvdec.c | 2 +- libavcodec/av1dec.c | 5 ++++- libavcodec/avrndec.c | 2 +- libavcodec/avs.c | 4 ++-- libavcodec/avuidec.c | 2 +- libavcodec/bfi.c | 4 ++-- libavcodec/bitpacked_dec.c | 2 +- libavcodec/bmp.c | 2 +- libavcodec/brenderpix.c | 2 +- libavcodec/c93.c | 4 ++-- libavcodec/cdxl.c | 2 +- libavcodec/cinepak.c | 4 ++-- libavcodec/clearvideo.c | 4 ++-- libavcodec/cljrdec.c | 2 +- libavcodec/cllc.c | 2 +- libavcodec/cpia.c | 4 ++-- libavcodec/cri.c | 2 +- libavcodec/cscd.c | 4 ++-- libavcodec/cuviddec.c | 5 ++++- libavcodec/dds.c | 2 +- libavcodec/decode.c | 3 +++ libavcodec/diracdec.c | 5 ++++- libavcodec/dnxhddec.c | 2 +- libavcodec/dvdec.c | 2 +- libavcodec/dxa.c | 10 +++++----- libavcodec/dxtory.c | 2 +- libavcodec/dxv.c | 2 +- libavcodec/eacmv.c | 4 ++-- libavcodec/eatgq.c | 2 +- libavcodec/eatgv.c | 4 ++-- libavcodec/encode.c | 2 ++ libavcodec/ffv1dec.c | 14 +++++++------- libavcodec/fic.c | 4 ++-- libavcodec/fitsdec.c | 2 +- libavcodec/fmvc.c | 4 ++-- libavcodec/fraps.c | 2 +- libavcodec/frwu.c | 2 +- libavcodec/g2meet.c | 5 ++++- libavcodec/gemdec.c | 2 +- libavcodec/gifdec.c | 4 ++-- libavcodec/h261dec.c | 5 ++++- libavcodec/h264_slice.c | 10 +++++----- libavcodec/h264dec.c | 4 ++-- libavcodec/hapdec.c | 2 +- libavcodec/hdrdec.c | 2 +- libavcodec/hevcdec.c | 5 ++++- libavcodec/hnm4video.c | 4 ++-- libavcodec/hq_hqa.c | 2 +- libavcodec/hqx.c | 2 +- libavcodec/iff.c | 4 ++-- libavcodec/imm4.c | 10 +++++----- libavcodec/imx.c | 10 +++++----- libavcodec/jpeg2000dec.c | 2 +- libavcodec/jvdec.c | 2 +- libavcodec/kmvc.c | 4 ++-- libavcodec/lagarith.c | 2 +- libavcodec/lcldec.c | 2 +- libavcodec/libaomdec.c | 5 ++++- libavcodec/libdav1d.c | 5 ++++- libavcodec/libjxldec.c | 2 +- libavcodec/librsvgdec.c | 2 +- libavcodec/libuavs3d.c | 5 ++++- libavcodec/loco.c | 2 +- libavcodec/lscrdec.c | 13 ++++++++----- libavcodec/m101.c | 2 +- libavcodec/magicyuv.c | 2 +- libavcodec/mdec.c | 2 +- libavcodec/midivid.c | 5 ++++- libavcodec/mjpegdec.c | 4 ++-- libavcodec/mobiclip.c | 4 ++-- libavcodec/mpeg12dec.c | 12 +++++++++--- libavcodec/mpeg12enc.c | 2 +- libavcodec/mpegvideo_dec.c | 9 ++++++--- libavcodec/mpegvideo_enc.c | 18 +++++++++++++----- libavcodec/mscc.c | 2 +- libavcodec/msp2dec.c | 2 +- libavcodec/mss1.c | 4 ++-- libavcodec/mss2.c | 5 ++++- libavcodec/mss3.c | 5 ++++- libavcodec/mss4.c | 5 ++++- libavcodec/mv30.c | 6 +++--- libavcodec/mvcdec.c | 2 +- libavcodec/mvha.c | 2 +- libavcodec/mwsc.c | 9 ++++++--- libavcodec/mxpegdec.c | 4 ++-- libavcodec/notchlc.c | 2 +- libavcodec/nuv.c | 5 ++++- libavcodec/pafvideo.c | 4 ++-- libavcodec/pdvdec.c | 2 +- libavcodec/pgxdec.c | 2 +- libavcodec/photocd.c | 2 +- libavcodec/pixlet.c | 2 +- libavcodec/pngdec.c | 2 +- libavcodec/pnmdec.c | 2 +- libavcodec/proresdec2.c | 2 +- libavcodec/prosumer.c | 2 +- libavcodec/qdrw.c | 2 +- libavcodec/qoidec.c | 2 +- libavcodec/qpeg.c | 5 ++++- libavcodec/qsvdec.c | 8 ++++++-- libavcodec/r210dec.c | 2 +- libavcodec/rasc.c | 5 ++++- libavcodec/rawdec.c | 2 +- libavcodec/rscc.c | 2 +- libavcodec/sanm.c | 4 +++- libavcodec/scpr.c | 12 ++++++------ libavcodec/screenpresso.c | 2 +- libavcodec/sga.c | 2 +- libavcodec/sgidec.c | 2 +- libavcodec/sgirledec.c | 2 +- libavcodec/sheervideo.c | 2 +- libavcodec/smacker.c | 8 +++++--- libavcodec/snow.c | 7 +++++-- libavcodec/snowenc.c | 4 ++-- libavcodec/speedhqdec.c | 2 +- libavcodec/svq3.c | 5 ++++- libavcodec/targa_y216dec.c | 2 +- libavcodec/tdsc.c | 2 +- libavcodec/tiff.c | 3 ++- libavcodec/tmv.c | 2 +- libavcodec/truemotion2.c | 8 +++++--- libavcodec/truemotion2rt.c | 2 +- libavcodec/utvideodec.c | 2 +- libavcodec/v210dec.c | 2 +- libavcodec/v210x.c | 2 +- libavcodec/v308dec.c | 2 +- libavcodec/v408dec.c | 2 +- libavcodec/v410dec.c | 2 +- libavcodec/v4l2_buffers.c | 3 ++- libavcodec/vble.c | 2 +- libavcodec/vbndec.c | 2 +- libavcodec/vc1dec.c | 5 ++++- libavcodec/vcr1.c | 2 +- libavcodec/vmnc.c | 4 ++-- libavcodec/vp3.c | 5 ++++- libavcodec/vp5.c | 11 +++++++---- libavcodec/vp56.c | 11 ++++++----- libavcodec/vp6.c | 11 +++++++---- libavcodec/vp8.c | 5 ++++- libavcodec/vp9.c | 5 ++++- libavcodec/wbmpdec.c | 2 +- libavcodec/wcmv.c | 5 ++++- libavcodec/webp.c | 2 +- libavcodec/wnv1.c | 2 +- libavcodec/xbmdec.c | 2 +- libavcodec/xl.c | 2 +- libavcodec/xpmdec.c | 2 +- libavcodec/xwddec.c | 2 +- libavcodec/y41pdec.c | 2 +- libavcodec/ylc.c | 2 +- libavcodec/yuv4dec.c | 2 +- libavcodec/zerocodec.c | 4 ++-- libavcodec/zmbv.c | 4 ++-- 160 files changed, 371 insertions(+), 243 deletions(-) diff --git a/libavcodec/012v.c b/libavcodec/012v.c index f0197cd8f9..fa5eb0f95e 100644 --- a/libavcodec/012v.c +++ b/libavcodec/012v.c @@ -65,7 +65,7 @@ static int zero12v_decode_frame(AVCodecContext *avctx, AVFrame *pic, return ret; pic->pict_type = AV_PICTURE_TYPE_I; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; line_end = avpkt->data + stride; for (line = 0; line < avctx->height; line++) { diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c index fab3fb5b77..411e50da7c 100644 --- a/libavcodec/4xm.c +++ b/libavcodec/4xm.c @@ -957,7 +957,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *picture, 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], (const uint8_t*)f->frame_buffer, avctx->width * 2, diff --git a/libavcodec/agm.c b/libavcodec/agm.c index b37f1a42c9..55cf0b47c8 100644 --- a/libavcodec/agm.c +++ b/libavcodec/agm.c @@ -1100,7 +1100,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, return AVERROR_INVALIDDATA; 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; 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) return ret; - if (frame->key_frame) { + if (frame->flags & AV_FRAME_FLAG_KEY) { if (!s->dct && !s->rgb) ret = decode_raw_intra(avctx, gbyte, frame); else if (!s->dct && s->rgb) diff --git a/libavcodec/aic.c b/libavcodec/aic.c index 7ba1c02fdd..f8b0f60354 100644 --- a/libavcodec/aic.c +++ b/libavcodec/aic.c @@ -393,7 +393,7 @@ static int aic_decode_frame(AVCodecContext *avctx, AVFrame *frame, ctx->frame = frame; 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); diff --git a/libavcodec/aliaspixdec.c b/libavcodec/aliaspixdec.c index 45155d79cd..72f810d408 100644 --- a/libavcodec/aliaspixdec.c +++ b/libavcodec/aliaspixdec.c @@ -70,7 +70,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *f, return ret; f->pict_type = AV_PICTURE_TYPE_I; - f->key_frame = 1; + f->flags |= AV_FRAME_FLAG_KEY; x = 0; y = 1; diff --git a/libavcodec/arbc.c b/libavcodec/arbc.c index 343c56695e..1b349f4dd6 100644 --- a/libavcodec/arbc.c +++ b/libavcodec/arbc.c @@ -171,7 +171,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, return ret; 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; return avpkt->size; diff --git a/libavcodec/argo.c b/libavcodec/argo.c index 9bedb1394d..589feed410 100644 --- a/libavcodec/argo.c +++ b/libavcodec/argo.c @@ -666,7 +666,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, return ret; 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; return avpkt->size; diff --git a/libavcodec/asvdec.c b/libavcodec/asvdec.c index 699aab9f8f..62295b2dbb 100644 --- a/libavcodec/asvdec.c +++ b/libavcodec/asvdec.c @@ -245,7 +245,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; 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) { av_fast_padded_malloc(&a->bitstream_buffer, &a->bitstream_buffer_size, diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index 807852e317..c90c9c1a69 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -846,7 +846,10 @@ static int av1_frame_alloc(AVCodecContext *avctx, AV1Frame *f) goto fail; 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) { case AV1_FRAME_KEY: diff --git a/libavcodec/avrndec.c b/libavcodec/avrndec.c index ef194058fc..97d2824625 100644 --- a/libavcodec/avrndec.c +++ b/libavcodec/avrndec.c @@ -68,7 +68,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; p->pict_type= AV_PICTURE_TYPE_I; - p->key_frame= 1; + p->flags |= AV_FRAME_FLAG_KEY; if(a->interlace) { buf += (true_height - avctx->height)*avctx->width; diff --git a/libavcodec/avs.c b/libavcodec/avs.c index a1c9d3c436..b53175f640 100644 --- a/libavcodec/avs.c +++ b/libavcodec/avs.c @@ -61,7 +61,7 @@ static int avs_decode_frame(AVCodecContext * avctx, AVFrame *picture, if ((ret = ff_reget_buffer(avctx, p, 0)) < 0) return ret; p->pict_type = AV_PICTURE_TYPE_P; - p->key_frame = 0; + p->flags &= ~AV_FRAME_FLAG_KEY; out = p->data[0]; stride = p->linesize[0]; @@ -97,7 +97,7 @@ static int avs_decode_frame(AVCodecContext * avctx, AVFrame *picture, switch (sub_type) { case AVS_I_FRAME: p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; case AVS_P_FRAME_3X3: vect_w = 3; vect_h = 3; diff --git a/libavcodec/avuidec.c b/libavcodec/avuidec.c index ba157e167c..48b23d4875 100644 --- a/libavcodec/avuidec.c +++ b/libavcodec/avuidec.c @@ -71,7 +71,7 @@ static int avui_decode_frame(AVCodecContext *avctx, AVFrame *pic, if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) return ret; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; if (!interlaced) { diff --git a/libavcodec/bfi.c b/libavcodec/bfi.c index c268272451..55429d4b7c 100644 --- a/libavcodec/bfi.c +++ b/libavcodec/bfi.c @@ -68,7 +68,7 @@ static int bfi_decode_frame(AVCodecContext *avctx, AVFrame *frame, /* Set frame parameters and palette, if necessary */ if (!avctx->frame_num) { frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; /* Setting the palette */ if (avctx->extradata_size > 768) { 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; } else { frame->pict_type = AV_PICTURE_TYPE_P; - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->palette_has_changed = 0; memcpy(frame->data[1], bfi->pal, sizeof(bfi->pal)); } diff --git a/libavcodec/bitpacked_dec.c b/libavcodec/bitpacked_dec.c index a1ffef185c..c88f861993 100644 --- a/libavcodec/bitpacked_dec.c +++ b/libavcodec/bitpacked_dec.c @@ -134,7 +134,7 @@ static int bitpacked_decode(AVCodecContext *avctx, AVFrame *frame, return res; frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return buf_size; diff --git a/libavcodec/bmp.c b/libavcodec/bmp.c index d7e01f0725..d117c06cf4 100644 --- a/libavcodec/bmp.c +++ b/libavcodec/bmp.c @@ -210,7 +210,7 @@ static int bmp_decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; buf = buf0 + hsize; dsize = buf_size - hsize; diff --git a/libavcodec/brenderpix.c b/libavcodec/brenderpix.c index e95ab3d4af..85eb55f50b 100644 --- a/libavcodec/brenderpix.c +++ b/libavcodec/brenderpix.c @@ -278,7 +278,7 @@ static int pix_decode_frame(AVCodecContext *avctx, AVFrame *frame, bytes_per_scanline, hdr.height); frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/c93.c b/libavcodec/c93.c index bfcbc7c150..b872f95e9b 100644 --- a/libavcodec/c93.c +++ b/libavcodec/c93.c @@ -147,10 +147,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, b = bytestream2_get_byte(&gb); if (b & C93_FIRST_FRAME) { newpic->pict_type = AV_PICTURE_TYPE_I; - newpic->key_frame = 1; + newpic->flags |= AV_FRAME_FLAG_KEY; } else { newpic->pict_type = AV_PICTURE_TYPE_P; - newpic->key_frame = 0; + newpic->flags &= ~AV_FRAME_FLAG_KEY; } for (y = 0; y < HEIGHT; y += 8) { diff --git a/libavcodec/cdxl.c b/libavcodec/cdxl.c index 6b3b3e85e0..885047af84 100644 --- a/libavcodec/cdxl.c +++ b/libavcodec/cdxl.c @@ -305,7 +305,7 @@ static int cdxl_decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; if (encoding) { av_fast_padded_malloc(&c->new_video, &c->new_video_size, diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c index 282614fd1d..e91f2f1012 100644 --- a/libavcodec/cinepak.c +++ b/libavcodec/cinepak.c @@ -379,7 +379,7 @@ static int cinepak_decode (CinepakContext *s) 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++) { if ((s->data + 12) > eod) @@ -395,7 +395,7 @@ static int cinepak_decode (CinepakContext *s) s->strips[i].x2 = AV_RB16 (&s->data[10]); 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; if (strip_size < 0) diff --git a/libavcodec/clearvideo.c b/libavcodec/clearvideo.c index e77661d187..f84e3e6ea4 100644 --- a/libavcodec/clearvideo.c +++ b/libavcodec/clearvideo.c @@ -511,7 +511,7 @@ static int clv_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0) return ret; - c->pic->key_frame = 1; + c->pic->flags |= AV_FRAME_FLAG_KEY; c->pic->pict_type = AV_PICTURE_TYPE_I; 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); - c->pic->key_frame = 0; + c->pic->flags &= ~AV_FRAME_FLAG_KEY; c->pic->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/cljrdec.c b/libavcodec/cljrdec.c index 914f853c8f..a4baa015f6 100644 --- a/libavcodec/cljrdec.c +++ b/libavcodec/cljrdec.c @@ -51,7 +51,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; 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); diff --git a/libavcodec/cllc.c b/libavcodec/cllc.c index 911717b68d..52cb86e50b 100644 --- a/libavcodec/cllc.c +++ b/libavcodec/cllc.c @@ -460,7 +460,7 @@ static int cllc_decode_frame(AVCodecContext *avctx, AVFrame *pic, return AVERROR_INVALIDDATA; } - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; *got_picture_ptr = 1; diff --git a/libavcodec/cpia.c b/libavcodec/cpia.c index bfd270dae2..f62100c419 100644 --- a/libavcodec/cpia.c +++ b/libavcodec/cpia.c @@ -94,10 +94,10 @@ static int cpia_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if (header[28] == NOT_COMPRESSED) { frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; } else { frame->pict_type = AV_PICTURE_TYPE_P; - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; } // Get buffer filled with previous frame diff --git a/libavcodec/cri.c b/libavcodec/cri.c index 5761152c2d..0380a0c665 100644 --- a/libavcodec/cri.c +++ b/libavcodec/cri.c @@ -408,7 +408,7 @@ skip: } p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; diff --git a/libavcodec/cscd.c b/libavcodec/cscd.c index b4ed3332a9..23dd2df99e 100644 --- a/libavcodec/cscd.c +++ b/libavcodec/cscd.c @@ -110,12 +110,12 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, // flip upside down, add difference frame if (buf[0] & 1) { // keyframe 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, c->linelen, c->height); } else { 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, c->linelen, c->height); } diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c index 95d29a2e78..3d43bbd466 100644 --- a/libavcodec/cuviddec.c +++ b/libavcodec/cuviddec.c @@ -599,7 +599,10 @@ static int cuvid_output_frame(AVCodecContext *avctx, AVFrame *frame) 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; frame->width = avctx->width; diff --git a/libavcodec/dds.c b/libavcodec/dds.c index 4bb425dbb3..670a42fbf9 100644 --- a/libavcodec/dds.c +++ b/libavcodec/dds.c @@ -702,7 +702,7 @@ static int dds_decode(AVCodecContext *avctx, AVFrame *frame, /* Frame is ready to be output. */ frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 64a448b54c..a5a6209eae 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -570,6 +570,9 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) } 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 FF_DISABLE_DEPRECATION_WARNINGS frame->interlaced_frame = !!(frame->flags & AV_FRAME_FLAG_INTERLACED); diff --git a/libavcodec/diracdec.c b/libavcodec/diracdec.c index 0ae582befe..277c730cc7 100644 --- a/libavcodec/diracdec.c +++ b/libavcodec/diracdec.c @@ -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->dc_prediction = (parse_code & 0x28) == 0x08; /* [DIRAC_STD] using_dc_prediction() */ 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 */ /* VC-2 Low Delay has a different parse code than the Dirac Low Delay */ diff --git a/libavcodec/dnxhddec.c b/libavcodec/dnxhddec.c index 30a4e39695..834390b93b 100644 --- a/libavcodec/dnxhddec.c +++ b/libavcodec/dnxhddec.c @@ -653,7 +653,7 @@ decode_coding_unit: if ((ret = ff_thread_get_buffer(avctx, picture, 0)) < 0) return ret; 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; diff --git a/libavcodec/dvdec.c b/libavcodec/dvdec.c index 2b4d70ac3d..750e25a4af 100644 --- a/libavcodec/dvdec.c +++ b/libavcodec/dvdec.c @@ -646,7 +646,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, AVFrame *frame, } s->frame = frame; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; avctx->pix_fmt = s->sys->pix_fmt; avctx->framerate = av_inv_q(s->sys->time_base); diff --git a/libavcodec/dxa.c b/libavcodec/dxa.c index 8d2d2d771b..ecb48c9d3f 100644 --- a/libavcodec/dxa.c +++ b/libavcodec/dxa.c @@ -258,19 +258,19 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, switch(compr){ case -1: - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; if (c->prev->data[0]) memcpy(frame->data[0], c->prev->data[0], frame->linesize[0] * avctx->height); else{ // Should happen only when first frame is 'NULL' 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; } break; case 2: case 4: - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; for (j = 0; j < avctx->height; j++) { 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)) return AVERROR_INVALIDDATA; } - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; for (j = 0; j < avctx->height; j++) { if(tmpptr){ @@ -300,7 +300,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, break; case 12: // ScummVM coding case 13: - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; if (!c->prev->data[0]) { av_log(avctx, AV_LOG_ERROR, "Missing reference frame\n"); diff --git a/libavcodec/dxtory.c b/libavcodec/dxtory.c index e13d274862..f36420cdd9 100644 --- a/libavcodec/dxtory.c +++ b/libavcodec/dxtory.c @@ -864,7 +864,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *pic, return ret; pic->pict_type = AV_PICTURE_TYPE_I; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c index 7c84874229..5923811b29 100644 --- a/libavcodec/dxv.c +++ b/libavcodec/dxv.c @@ -1220,7 +1220,7 @@ static int dxv_decode(AVCodecContext *avctx, AVFrame *frame, /* Frame is ready to be output. */ frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/eacmv.c b/libavcodec/eacmv.c index 18f27dfdf0..e73e310c4a 100644 --- a/libavcodec/eacmv.c +++ b/libavcodec/eacmv.c @@ -202,10 +202,10 @@ static int cmv_decode_frame(AVCodecContext *avctx, AVFrame *frame, buf += EA_PREAMBLE_SIZE; if ((buf[0]&1)) { // subtype 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; }else{ - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; cmv_decode_intra(s, frame, buf+2, buf_end); } diff --git a/libavcodec/eatgq.c b/libavcodec/eatgq.c index 01e1acd4e4..0f0ed3585f 100644 --- a/libavcodec/eatgq.c +++ b/libavcodec/eatgq.c @@ -237,7 +237,7 @@ static int tgq_decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; for (y = 0; y < FFALIGN(avctx->height, 16) >> 4; y++) diff --git a/libavcodec/eatgv.c b/libavcodec/eatgv.c index 29f7ee12f5..a2aead46eb 100644 --- a/libavcodec/eatgv.c +++ b/libavcodec/eatgv.c @@ -310,7 +310,7 @@ static int tgv_decode_frame(AVCodecContext *avctx, AVFrame *frame, if (chunk_type == kVGT_TAG) { int y; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; 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"); return buf_size; } - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; if (tgv_decode_inter(s, frame, buf, buf_end) < 0) { av_log(avctx, AV_LOG_WARNING, "truncated inter frame\n"); diff --git a/libavcodec/encode.c b/libavcodec/encode.c index 0c4b2b0f99..04ee59879e 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -192,6 +192,8 @@ int ff_encode_get_frame(AVCodecContext *avctx, AVFrame *frame) av_frame_move_ref(frame, avci->buffer_frame); + if (frame->key_frame) + frame->flags |= AV_FRAME_FLAG_KEY; #if FF_API_INTERLACED_FRAME FF_DISABLE_DEPRECATION_WARNINGS if (frame->interlaced_frame) diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c index c49db83b5c..54cf075b8f 100644 --- a/libavcodec/ffv1dec.c +++ b/libavcodec/ffv1dec.c @@ -264,16 +264,16 @@ static int decode_slice(AVCodecContext *c, void *arg) 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); - if(f->fsrc && !p->key_frame) { + if(f->fsrc && !(p->flags & AV_FRAME_FLAG_KEY)) { FFV1Context *fssrc = f->fsrc->slice_context[si]; FFV1Context *fsdst = f->slice_context[si]; av_assert1(fsdst->plane_count == fssrc->plane_count); av_assert1(fsdst == fs); - if (!p->key_frame) + if (!(p->flags & AV_FRAME_FLAG_KEY)) fsdst->slice_damaged |= fssrc->slice_damaged; 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) 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); } else if (fs->slice_damaged) { 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 if (get_rac(c, &keystate)) { - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; f->key_frame_ok = 0; if ((ret = read_header(f)) < 0) return ret; @@ -903,7 +903,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, "Cannot decode non-keyframe without valid keyframe\n"); return AVERROR_INVALIDDATA; } - p->key_frame = 0; + p->flags &= ~AV_FRAME_FLAG_KEY; } 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) 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); diff --git a/libavcodec/fic.c b/libavcodec/fic.c index 94cf42887f..fb99802137 100644 --- a/libavcodec/fic.c +++ b/libavcodec/fic.c @@ -406,11 +406,11 @@ static int fic_decode_frame(AVCodecContext *avctx, AVFrame *rframe, NULL, nslices, sizeof(ctx->slice_data[0]))) < 0) return ret; - ctx->frame->key_frame = 1; + ctx->frame->flags |= AV_FRAME_FLAG_KEY; ctx->frame->pict_type = AV_PICTURE_TYPE_I; for (slice = 0; slice < nslices; slice++) { 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; break; } diff --git a/libavcodec/fitsdec.c b/libavcodec/fitsdec.c index b9c51e70c3..44135309f2 100644 --- a/libavcodec/fitsdec.c +++ b/libavcodec/fitsdec.c @@ -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; *got_frame = 1; diff --git a/libavcodec/fmvc.c b/libavcodec/fmvc.c index 3ee915cc4c..5e26a541ca 100644 --- a/libavcodec/fmvc.c +++ b/libavcodec/fmvc.c @@ -433,7 +433,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; src = s->buffer; @@ -519,7 +519,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; ssrc = s->buffer; diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c index 4c4c46b602..e7a23f20fe 100644 --- a/libavcodec/fraps.c +++ b/libavcodec/fraps.c @@ -216,7 +216,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *f, } 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->color_range = version & 1 ? AVCOL_RANGE_UNSPECIFIED diff --git a/libavcodec/frwu.c b/libavcodec/frwu.c index cf183f8410..70bc136765 100644 --- a/libavcodec/frwu.c +++ b/libavcodec/frwu.c @@ -63,7 +63,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *pic, return ret; pic->pict_type = AV_PICTURE_TYPE_I; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; for (field = 0; field < 2; field++) { int i; diff --git a/libavcodec/g2meet.c b/libavcodec/g2meet.c index 05b5a5124f..2dfa73df74 100644 --- a/libavcodec/g2meet.c +++ b/libavcodec/g2meet.c @@ -1560,7 +1560,10 @@ static int g2m_decode_frame(AVCodecContext *avctx, AVFrame *pic, if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) 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; for (i = 0; i < avctx->height; i++) diff --git a/libavcodec/gemdec.c b/libavcodec/gemdec.c index c8fd8dcdcd..73e907c041 100644 --- a/libavcodec/gemdec.c +++ b/libavcodec/gemdec.c @@ -180,7 +180,7 @@ static int gem_decode_frame(AVCodecContext *avctx, AVFrame *p, return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->palette_has_changed = 1; palette = (uint32_t *)p->data[1]; diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c index f47390c3bd..0835c5bdd0 100644 --- a/libavcodec/gifdec.c +++ b/libavcodec/gifdec.c @@ -501,7 +501,7 @@ static int gif_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return AVERROR(ENOMEM); s->frame->pict_type = AV_PICTURE_TYPE_I; - s->frame->key_frame = 1; + s->frame->flags |= AV_FRAME_FLAG_KEY; s->keyframe_ok = 1; } else { if (!s->keyframe_ok) { @@ -513,7 +513,7 @@ static int gif_decode_frame(AVCodecContext *avctx, AVFrame *rframe, return ret; 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); diff --git a/libavcodec/h261dec.c b/libavcodec/h261dec.c index 8496293964..620b7eef83 100644 --- a/libavcodec/h261dec.c +++ b/libavcodec/h261dec.c @@ -643,7 +643,10 @@ retry: // for skipping the frame 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) || (avctx->skip_frame >= AVDISCARD_NONKEY && s->pict_type != AV_PICTURE_TYPE_I) || diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c index f44b60c642..8526782560 100644 --- a/libavcodec/h264_slice.c +++ b/libavcodec/h264_slice.c @@ -501,7 +501,7 @@ FF_ENABLE_DEPRECATION_WARNINGS * in later. * See decode_nal_units(). */ - pic->f->key_frame = 0; + pic->f->flags &= ~AV_FRAME_FLAG_KEY; pic->mmco_reset = 0; pic->recovered = 0; pic->invalid_gap = 0; @@ -1326,7 +1326,7 @@ static int h264_select_output_frame(H264Context *h) out = h->delayed_pic[0]; out_idx = 0; 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; i++) if (h->delayed_pic[i]->poc < out->poc) { @@ -1334,7 +1334,7 @@ static int h264_select_output_frame(H264Context *h) out_idx = i; } 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; 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) { 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; } else 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 || (h->recovery_frame == h->poc.frame_num && nal->ref_idc)) { diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 2d691731c5..cdd4b98c83 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -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); 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) { 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; 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; i++) if (h->delayed_pic[i]->poc < out->poc) { diff --git a/libavcodec/hapdec.c b/libavcodec/hapdec.c index 3df69e6335..fee3c04d84 100644 --- a/libavcodec/hapdec.c +++ b/libavcodec/hapdec.c @@ -328,7 +328,7 @@ static int hap_decode(AVCodecContext *avctx, AVFrame *frame, /* Frame is ready to be output */ frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/hdrdec.c b/libavcodec/hdrdec.c index 998227744b..9b6395bb6d 100644 --- a/libavcodec/hdrdec.c +++ b/libavcodec/hdrdec.c @@ -212,7 +212,7 @@ convert: } } - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_I; *got_frame = 1; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 21e4d0db28..7e1bf4e915 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2910,7 +2910,10 @@ static int hevc_frame_start(HEVCContext *s) 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->avctx->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN) && diff --git a/libavcodec/hnm4video.c b/libavcodec/hnm4video.c index f223bb82fc..51e75789d2 100644 --- a/libavcodec/hnm4video.c +++ b/libavcodec/hnm4video.c @@ -420,7 +420,7 @@ static int hnm_decode_frame(AVCodecContext *avctx, AVFrame *frame, postprocess_current_frame(avctx); copy_processed_frame(avctx, frame); 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); *got_frame = 1; } 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); 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); *got_frame = 1; FFSWAP(uint8_t *, hnm->current, hnm->previous); diff --git a/libavcodec/hq_hqa.c b/libavcodec/hq_hqa.c index 6ce73b7ae4..db0ac7d9e4 100644 --- a/libavcodec/hq_hqa.c +++ b/libavcodec/hq_hqa.c @@ -354,7 +354,7 @@ static int hq_hqa_decode_frame(AVCodecContext *avctx, AVFrame *pic, return ret; } - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; *got_frame = 1; diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c index 6083946550..6554b15ec6 100644 --- a/libavcodec/hqx.c +++ b/libavcodec/hqx.c @@ -504,7 +504,7 @@ static int hqx_decode_frame(AVCodecContext *avctx, AVFrame *frame, 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; *got_picture_ptr = 1; diff --git a/libavcodec/iff.c b/libavcodec/iff.c index e02d2e77e5..faf4e21c42 100644 --- a/libavcodec/iff.c +++ b/libavcodec/iff.c @@ -1887,10 +1887,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, } if (avpkt->flags & AV_PKT_FLAG_KEY) { - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; } else { - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/imm4.c b/libavcodec/imm4.c index ccec5dff43..b95ad86921 100644 --- a/libavcodec/imm4.c +++ b/libavcodec/imm4.c @@ -420,11 +420,11 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, switch (type) { case 0x19781977: - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; break; case 0x12250926: - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; break; default: @@ -434,7 +434,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if (avctx->width != width || 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"); return AVERROR_INVALIDDATA; } @@ -445,10 +445,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if (ret < 0) 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; - if (frame->key_frame) { + if (frame->flags & AV_FRAME_FLAG_KEY) { ret = decode_intra(avctx, gb, frame); if (ret < 0) return ret; diff --git a/libavcodec/imx.c b/libavcodec/imx.c index 44bab23c27..4ae68eb93c 100644 --- a/libavcodec/imx.c +++ b/libavcodec/imx.c @@ -59,9 +59,9 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if (ff_copy_palette(imx->pal, avpkt, avctx)) { frame->palette_has_changed = 1; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; } else { - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->palette_has_changed = 0; } @@ -92,7 +92,7 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe, break; } - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; break; case 1: if (len == 0) { @@ -114,7 +114,7 @@ static int imx_decode_frame(AVCodecContext *avctx, AVFrame *rframe, break; } - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; } else { while (len > 0) { 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) return ret; diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c index 40e6650110..0e95cca64e 100644 --- a/libavcodec/jpeg2000dec.c +++ b/libavcodec/jpeg2000dec.c @@ -2482,7 +2482,7 @@ static int jpeg2000_decode_frame(AVCodecContext *avctx, AVFrame *picture, if ((ret = ff_thread_get_buffer(avctx, picture, 0)) < 0) goto end; picture->pict_type = AV_PICTURE_TYPE_I; - picture->key_frame = 1; + picture->flags |= AV_FRAME_FLAG_KEY; if (ret = jpeg2000_read_bitstream_packets(s)) goto end; diff --git a/libavcodec/jvdec.c b/libavcodec/jvdec.c index e0287a9cb9..f44b21af11 100644 --- a/libavcodec/jvdec.c +++ b/libavcodec/jvdec.c @@ -211,7 +211,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, } 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->palette_has_changed = s->palette_has_changed; s->palette_has_changed = 0; diff --git a/libavcodec/kmvc.c b/libavcodec/kmvc.c index 153cea03b9..de01f6b75b 100644 --- a/libavcodec/kmvc.c +++ b/libavcodec/kmvc.c @@ -288,10 +288,10 @@ static int decode_frame(AVCodecContext * avctx, AVFrame *frame, } if (header & KMVC_KEYFRAME) { - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; } else { - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/lagarith.c b/libavcodec/lagarith.c index 78ccbc15b9..ebc1f7613a 100644 --- a/libavcodec/lagarith.c +++ b/libavcodec/lagarith.c @@ -550,7 +550,7 @@ static int lag_decode_frame(AVCodecContext *avctx, AVFrame *p, int i, j, planes = 3; int ret = 0; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_I; frametype = buf[0]; diff --git a/libavcodec/lcldec.c b/libavcodec/lcldec.c index eb5139a5c5..ed78d9d570 100644 --- a/libavcodec/lcldec.c +++ b/libavcodec/lcldec.c @@ -478,7 +478,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, return AVERROR_INVALIDDATA; } - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; *got_frame = 1; diff --git a/libavcodec/libaomdec.c b/libavcodec/libaomdec.c index 53982559d9..767c216aa9 100644 --- a/libavcodec/libaomdec.c +++ b/libavcodec/libaomdec.c @@ -185,7 +185,10 @@ static int aom_decode(AVCodecContext *avctx, AVFrame *picture, aom_codec_frame_flags_t flags; ret = aom_codec_control(&ctx->decoder, AOMD_GET_FRAME_FLAGS, &flags); 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)) picture->pict_type = AV_PICTURE_TYPE_I; else if (flags & AOM_FRAME_IS_SWITCH) diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index ddf2311a41..87aed16749 100644 --- a/libavcodec/libdav1d.c +++ b/libavcodec/libdav1d.c @@ -463,7 +463,10 @@ FF_ENABLE_DEPRECATION_WARNINGS goto fail; 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) { case DAV1D_FRAME_TYPE_KEY: diff --git a/libavcodec/libjxldec.c b/libavcodec/libjxldec.c index 045a1535f9..65966b7b57 100644 --- a/libavcodec/libjxldec.c +++ b/libavcodec/libjxldec.c @@ -411,7 +411,7 @@ static int libjxl_decode_frame(AVCodecContext *avctx, AVFrame *frame, int *got_f /* full image is one frame, even if animated */ av_log(avctx, AV_LOG_DEBUG, "FULL_IMAGE event emitted\n"); frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; if (ctx->iccp) { AVFrameSideData *sd = av_frame_new_side_data_from_buf(frame, AV_FRAME_DATA_ICC_PROFILE, ctx->iccp); if (!sd) diff --git a/libavcodec/librsvgdec.c b/libavcodec/librsvgdec.c index 9c8aa2dedc..2f160edcdf 100644 --- a/libavcodec/librsvgdec.c +++ b/libavcodec/librsvgdec.c @@ -73,7 +73,7 @@ static int librsvg_decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, frame, 0))) return ret; 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, frame->width, frame->height, diff --git a/libavcodec/libuavs3d.c b/libavcodec/libuavs3d.c index 5c08d2b8d3..66e8d31001 100644 --- a/libavcodec/libuavs3d.c +++ b/libavcodec/libuavs3d.c @@ -96,7 +96,10 @@ FF_ENABLE_DEPRECATION_WARNINGS av_log(NULL, AV_LOG_WARNING, "Error frame type in uavs3d: %d.\n", dec_frame->type); } else { 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++) { diff --git a/libavcodec/loco.c b/libavcodec/loco.c index d57a67317a..3d11823284 100644 --- a/libavcodec/loco.c +++ b/libavcodec/loco.c @@ -206,7 +206,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; #define ADVANCE_BY_DECODED do { \ if (decoded < 0 || decoded >= buf_size) goto buf_too_small; \ diff --git a/libavcodec/lscrdec.c b/libavcodec/lscrdec.c index 76a46751f0..415914bf0a 100644 --- a/libavcodec/lscrdec.c +++ b/libavcodec/lscrdec.c @@ -154,10 +154,13 @@ static int decode_frame_lscr(AVCodecContext *avctx, AVFrame *rframe, size = bytestream2_get_le32(gb); - frame->key_frame = (nb_blocks == 1) && - (w == avctx->width) && - (h == avctx->height) && - (x == 0) && (y == 0); + if ((nb_blocks == 1) && + (w == avctx->width) && + (h == avctx->height) && + (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); 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) return ret; diff --git a/libavcodec/m101.c b/libavcodec/m101.c index 809c89c4f3..43a3c7bbe5 100644 --- a/libavcodec/m101.c +++ b/libavcodec/m101.c @@ -67,7 +67,7 @@ static int m101_decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) return ret; frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; if ((avctx->extradata[3*4] & 3) != 3) { frame->flags |= AV_FRAME_FLAG_INTERLACED; if (avctx->extradata[3*4] & 1) diff --git a/libavcodec/magicyuv.c b/libavcodec/magicyuv.c index 62263409b1..7898cd5be4 100644 --- a/libavcodec/magicyuv.c +++ b/libavcodec/magicyuv.c @@ -637,7 +637,7 @@ static int magy_decode_frame(AVCodecContext *avctx, AVFrame *p, return ret; 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) return ret; diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c index 640b671a0f..44b12471a9 100644 --- a/libavcodec/mdec.c +++ b/libavcodec/mdec.c @@ -177,7 +177,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_thread_get_buffer(avctx, frame, 0)) < 0) return ret; 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); if (!a->bitstream_buffer) diff --git a/libavcodec/midivid.c b/libavcodec/midivid.c index 599d5c8f8f..70730231b5 100644 --- a/libavcodec/midivid.c +++ b/libavcodec/midivid.c @@ -222,7 +222,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, return ret; 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; return avpkt->size; diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index acdeb68596..ab7fa73819 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -745,7 +745,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s) if (s->avctx->skip_frame == AVDISCARD_ALL) { 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; 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) return -1; 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; // Lets clear the palette to avoid leaving uninitialized values in it diff --git a/libavcodec/mobiclip.c b/libavcodec/mobiclip.c index c3b2383dbc..381b492de3 100644 --- a/libavcodec/mobiclip.c +++ b/libavcodec/mobiclip.c @@ -1235,7 +1235,7 @@ static int mobiclip_decode(AVCodecContext *avctx, AVFrame *rframe, if (get_bits1(gb)) { frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; s->moflex = 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); frame->pict_type = AV_PICTURE_TYPE_P; - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; s->dct_tab_idx = 0; ret = setup_qtables(avctx, s->quantizer + (int64_t)get_se_golomb(gb)); diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c index 6c4cbccc59..ebde68a4dd 100644 --- a/libavcodec/mpeg12dec.c +++ b/libavcodec/mpeg12dec.c @@ -1343,7 +1343,10 @@ static int mpeg1_decode_picture(AVCodecContext *avctx, const uint8_t *buf, s->mpeg_f_code[1][1] = f_code; } 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) av_log(avctx, AV_LOG_DEBUG, @@ -1525,7 +1528,10 @@ static int mpeg_decode_picture_coding_extension(Mpeg1Context *s1) } else s->pict_type = AV_PICTURE_TYPE_B; 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); @@ -3046,7 +3052,7 @@ static int ipu_decode_frame(AVCodecContext *avctx, AVFrame *frame, return AVERROR_INVALIDDATA; frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index c7438fbe07..4aa45e9e86 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -290,7 +290,7 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s) AVRational aspect_ratio = s->avctx->sample_aspect_ratio; int aspect_ratio_info; - if (!s->current_picture.f->key_frame) + if (!(s->current_picture.f->flags & AV_FRAME_FLAG_KEY)) return; if (aspect_ratio.num == 0 || aspect_ratio.den == 0) diff --git a/libavcodec/mpegvideo_dec.c b/libavcodec/mpegvideo_dec.c index 482f388b99..765ccd0ba4 100644 --- a/libavcodec/mpegvideo_dec.c +++ b/libavcodec/mpegvideo_dec.c @@ -343,7 +343,10 @@ FF_ENABLE_DEPRECATION_WARNINGS 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->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, s->current_picture_ptr)) < 0) @@ -382,7 +385,7 @@ FF_ENABLE_DEPRECATION_WARNINGS s->last_picture_ptr = &s->picture[idx]; 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; 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->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; if (alloc_picture(s, s->next_picture_ptr) < 0) { diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index efd8e63aa8..9bdf5dbe07 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -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->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); if ((ret = ff_mpeg_ref_picture(s->avctx, &s->current_picture, @@ -1979,7 +1982,7 @@ vbv_retry: 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; if (s->mb_info) 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 - s->current_picture_ptr->f->key_frame = - s->current_picture.f->key_frame = s->pict_type == AV_PICTURE_TYPE_I; //FIXME pic_ptr + if (s->pict_type == AV_PICTURE_TYPE_I) { + 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.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->mb_x = s->mb_y = 0; diff --git a/libavcodec/mscc.c b/libavcodec/mscc.c index e8406aa268..1844664477 100644 --- a/libavcodec/mscc.c +++ b/libavcodec/mscc.c @@ -200,7 +200,7 @@ inflate_error: 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; *got_frame = 1; diff --git a/libavcodec/msp2dec.c b/libavcodec/msp2dec.c index 9c51c35c61..30a2825e47 100644 --- a/libavcodec/msp2dec.c +++ b/libavcodec/msp2dec.c @@ -47,7 +47,7 @@ static int msp2_decode_frame(AVCodecContext *avctx, AVFrame *p, return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; bytestream2_init(&idx, buf, 2 * avctx->height); buf += 2 * avctx->height; diff --git a/libavcodec/mss1.c b/libavcodec/mss1.c index 775852102a..dc06a9e236 100644 --- a/libavcodec/mss1.c +++ b/libavcodec/mss1.c @@ -165,12 +165,12 @@ static int mss1_decode_frame(AVCodecContext *avctx, AVFrame *rframe, c->corrupted = 0; ff_mss12_slicecontext_reset(&ctx->sc); 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; } else { if (c->corrupted) return AVERROR_INVALIDDATA; - ctx->pic->key_frame = 0; + ctx->pic->flags &= ~AV_FRAME_FLAG_KEY; ctx->pic->pict_type = AV_PICTURE_TYPE_P; } c->corrupted = ff_mss12_decode_rect(&ctx->sc, &acoder, 0, 0, diff --git a/libavcodec/mss2.c b/libavcodec/mss2.c index 1d1ed11f54..98103f7fed 100644 --- a/libavcodec/mss2.c +++ b/libavcodec/mss2.c @@ -660,7 +660,10 @@ static int mss2_decode_frame(AVCodecContext *avctx, AVFrame *frame, frame->linesize[0] * (avctx->height - 1); 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; if (is_555) { diff --git a/libavcodec/mss3.c b/libavcodec/mss3.c index 023f110ec8..2701e9b912 100644 --- a/libavcodec/mss3.c +++ b/libavcodec/mss3.c @@ -740,7 +740,10 @@ static int mss3_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0) 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; if (!bytestream2_get_bytes_left(&gb)) { if ((ret = av_frame_ref(rframe, c->pic)) < 0) diff --git a/libavcodec/mss4.c b/libavcodec/mss4.c index dceb42da25..75f31beda6 100644 --- a/libavcodec/mss4.c +++ b/libavcodec/mss4.c @@ -503,7 +503,10 @@ static int mss4_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0) 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 : AV_PICTURE_TYPE_P; if (frame_type == SKIP_FRAME) { diff --git a/libavcodec/mv30.c b/libavcodec/mv30.c index 24b04400fd..c2d0547053 100644 --- a/libavcodec/mv30.c +++ b/libavcodec/mv30.c @@ -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[1], s->intra_quant, chroma_tab); - frame->key_frame = s->is_inter == 0; - - if (frame->key_frame) { + if (s->is_inter == 0) { + frame->flags |= AV_FRAME_FLAG_KEY; ret = decode_intra(avctx, gb, frame); if (ret < 0) return ret; @@ -638,6 +637,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, return AVERROR_INVALIDDATA; } + frame->flags &= ~AV_FRAME_FLAG_KEY; ret = decode_inter(avctx, gb, frame, s->prev_frame); if (ret < 0) return ret; diff --git a/libavcodec/mvcdec.c b/libavcodec/mvcdec.c index 1e99f44a7d..6c971f709e 100644 --- a/libavcodec/mvcdec.c +++ b/libavcodec/mvcdec.c @@ -247,7 +247,7 @@ static int mvc_decode_frame(AVCodecContext *avctx, AVFrame *frame, return ret; frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; diff --git a/libavcodec/mvha.c b/libavcodec/mvha.c index 55056c91cf..8fb4a69e9e 100644 --- a/libavcodec/mvha.c +++ b/libavcodec/mvha.c @@ -272,7 +272,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, } frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/mwsc.c b/libavcodec/mwsc.c index f57648bb15..c7045ac793 100644 --- a/libavcodec/mwsc.c +++ b/libavcodec/mwsc.c @@ -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_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, - frame->linesize[0], s->prev_frame->linesize[0]); + if (rle_uncompress(&gb, &pb, &gbp, avctx->width, avctx->height, avctx->width * 3, + 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); if ((ret = av_frame_ref(s->prev_frame, frame)) < 0) diff --git a/libavcodec/mxpegdec.c b/libavcodec/mxpegdec.c index 760b12f0cc..73df2ff9ff 100644 --- a/libavcodec/mxpegdec.c +++ b/libavcodec/mxpegdec.c @@ -286,11 +286,11 @@ static int mxpeg_decode_frame(AVCodecContext *avctx, AVFrame *rframe, AV_GET_BUFFER_FLAG_REF)) < 0) return ret; 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; } else { 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) { diff --git a/libavcodec/notchlc.c b/libavcodec/notchlc.c index 90704e1aeb..d973c83ac7 100644 --- a/libavcodec/notchlc.c +++ b/libavcodec/notchlc.c @@ -514,7 +514,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; diff --git a/libavcodec/nuv.c b/libavcodec/nuv.c index d5391eee54..82048e9326 100644 --- a/libavcodec/nuv.c +++ b/libavcodec/nuv.c @@ -263,7 +263,10 @@ retry: } 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 switch (comptype) { case NUV_LZO: diff --git a/libavcodec/pafvideo.c b/libavcodec/pafvideo.c index 458fe9ff47..fa914ccbaa 100644 --- a/libavcodec/pafvideo.c +++ b/libavcodec/pafvideo.c @@ -296,10 +296,10 @@ static int paf_video_decode(AVCodecContext *avctx, AVFrame *rframe, if (code & 0x20) { // frame is keyframe memset(c->pic->data[1], 0, AVPALETTE_SIZE); c->current_frame = 0; - c->pic->key_frame = 1; + c->pic->flags |= AV_FRAME_FLAG_KEY; c->pic->pict_type = AV_PICTURE_TYPE_I; } else { - c->pic->key_frame = 0; + c->pic->flags &= ~AV_FRAME_FLAG_KEY; c->pic->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/pdvdec.c b/libavcodec/pdvdec.c index b1fc19b1c9..3ac2f98b3d 100644 --- a/libavcodec/pdvdec.c +++ b/libavcodec/pdvdec.c @@ -107,7 +107,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, return ret; if (avpkt->flags & AV_PKT_FLAG_KEY) { - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; } else { frame->pict_type = AV_PICTURE_TYPE_P; diff --git a/libavcodec/pgxdec.c b/libavcodec/pgxdec.c index e5d1df784e..cc7cdb8c9a 100644 --- a/libavcodec/pgxdec.c +++ b/libavcodec/pgxdec.c @@ -140,7 +140,7 @@ static int pgx_decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; avctx->bits_per_raw_sample = depth; if (bpp == 8) write_frame_8(p, &g, width, height, sign, depth); diff --git a/libavcodec/photocd.c b/libavcodec/photocd.c index 3030a80e0d..3a09b81908 100644 --- a/libavcodec/photocd.c +++ b/libavcodec/photocd.c @@ -332,7 +332,7 @@ static int photocd_decode_frame(AVCodecContext *avctx, AVFrame *p, return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; bytestream2_init(gb, avpkt->data, avpkt->size); diff --git a/libavcodec/pixlet.c b/libavcodec/pixlet.c index b349d397f4..6e925308b8 100644 --- a/libavcodec/pixlet.c +++ b/libavcodec/pixlet.c @@ -667,7 +667,7 @@ static int pixlet_decode_frame(AVCodecContext *avctx, AVFrame *p, bytestream2_skip(&ctx->gb, 8); p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->color_range = AVCOL_RANGE_JPEG; ret = ff_thread_get_buffer(avctx, p, 0); diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c index 03b3efdabc..83db0ad66d 100644 --- a/libavcodec/pngdec.c +++ b/libavcodec/pngdec.c @@ -840,7 +840,7 @@ static int decode_idat_chunk(AVCodecContext *avctx, PNGDecContext *s, } 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; if ((ret = populate_avctx_color_fields(avctx, p)) < 0) diff --git a/libavcodec/pnmdec.c b/libavcodec/pnmdec.c index 978e4c037e..72bc83b272 100644 --- a/libavcodec/pnmdec.c +++ b/libavcodec/pnmdec.c @@ -65,7 +65,7 @@ static int pnm_decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; avctx->bits_per_raw_sample = av_log2(s->maxval) + 1; switch (avctx->pix_fmt) { diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c index 88f4c49ce6..6445d948d9 100644 --- a/libavcodec/proresdec2.c +++ b/libavcodec/proresdec2.c @@ -793,7 +793,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, ctx->frame = frame; ctx->frame->pict_type = AV_PICTURE_TYPE_I; - ctx->frame->key_frame = 1; + ctx->frame->flags |= AV_FRAME_FLAG_KEY; ctx->first_field = 1; buf += 8; diff --git a/libavcodec/prosumer.c b/libavcodec/prosumer.c index e199d1aaa9..a1ed6a9e53 100644 --- a/libavcodec/prosumer.c +++ b/libavcodec/prosumer.c @@ -195,7 +195,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, } frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/qdrw.c b/libavcodec/qdrw.c index e41451e9a7..65e7269e5d 100644 --- a/libavcodec/qdrw.c +++ b/libavcodec/qdrw.c @@ -503,7 +503,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, if (*got_frame) { p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; return avpkt->size; } else { diff --git a/libavcodec/qoidec.c b/libavcodec/qoidec.c index 9414d2fbe9..37bc2084c0 100644 --- a/libavcodec/qoidec.c +++ b/libavcodec/qoidec.c @@ -106,7 +106,7 @@ static int qoi_decode_frame(AVCodecContext *avctx, AVFrame *p, memcpy(&dst[off_x * channels], px, channels); } - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_I; *got_frame = 1; diff --git a/libavcodec/qpeg.c b/libavcodec/qpeg.c index 5bca338acf..43a24fab08 100644 --- a/libavcodec/qpeg.c +++ b/libavcodec/qpeg.c @@ -304,7 +304,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = av_frame_ref(ref, p)) < 0) return ret; - p->key_frame = intra; + if (intra) + p->flags |= AV_FRAME_FLAG_KEY; + else + p->flags &= ~AV_FRAME_FLAG_KEY; p->pict_type = intra ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; *got_frame = 1; diff --git a/libavcodec/qsvdec.c b/libavcodec/qsvdec.c index e137a38e3c..da700f25e9 100644 --- a/libavcodec/qsvdec.c +++ b/libavcodec/qsvdec.c @@ -834,8 +834,12 @@ static int qsv_decode(AVCodecContext *avctx, QSVContext *q, !(outsurf->Info.PicStruct & MFX_PICSTRUCT_PROGRESSIVE); frame->pict_type = ff_qsv_map_pictype(aframe.frame->dec_info.FrameType); //Key frame is IDR frame is only suitable for H264. For HEVC, IRAPs are key frames. - if (avctx->codec_id == AV_CODEC_ID_H264) - frame->key_frame = !!(aframe.frame->dec_info.FrameType & MFX_FRAMETYPE_IDR); + if (avctx->codec_id == AV_CODEC_ID_H264) { + if (aframe.frame->dec_info.FrameType & MFX_FRAMETYPE_IDR) + frame->flags |= AV_FRAME_FLAG_KEY; + else + frame->flags &= ~AV_FRAME_FLAG_KEY; + } /* update the surface properties */ if (avctx->pix_fmt == AV_PIX_FMT_QSV) diff --git a/libavcodec/r210dec.c b/libavcodec/r210dec.c index ae80f46eb6..fe6a025988 100644 --- a/libavcodec/r210dec.c +++ b/libavcodec/r210dec.c @@ -57,7 +57,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *pic, return ret; pic->pict_type = AV_PICTURE_TYPE_I; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; g_line = pic->data[0]; b_line = pic->data[1]; r_line = pic->data[2]; diff --git a/libavcodec/rasc.c b/libavcodec/rasc.c index cfa3d6b079..4d057e80e7 100644 --- a/libavcodec/rasc.c +++ b/libavcodec/rasc.c @@ -740,7 +740,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if (!s->skip_cursor) draw_cursor(avctx); - s->frame->key_frame = intra; + if (intra) + s->frame->flags |= AV_FRAME_FLAG_KEY; + else + s->frame->flags &= ~AV_FRAME_FLAG_KEY; s->frame->pict_type = intra ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; *got_frame = 1; diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c index 72920d86f0..baca16c743 100644 --- a/libavcodec/rawdec.c +++ b/libavcodec/rawdec.c @@ -227,7 +227,7 @@ static int raw_decode(AVCodecContext *avctx, AVFrame *frame, need_copy = !avpkt->buf || context->is_1_2_4_8_bpp || context->is_yuv2 || context->is_lt_16bpp; frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; res = ff_decode_frame_props(avctx, frame); if (res < 0) diff --git a/libavcodec/rscc.c b/libavcodec/rscc.c index 61a25df382..2ae8899977 100644 --- a/libavcodec/rscc.c +++ b/libavcodec/rscc.c @@ -339,7 +339,7 @@ static int rscc_decode_frame(AVCodecContext *avctx, AVFrame *frame, /* Keyframe when the number of pixels updated matches the whole surface */ if (pixel_size == ctx->inflated_size) { frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; } else { frame->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/sanm.c b/libavcodec/sanm.c index bec3c770ec..b70daab7ac 100644 --- a/libavcodec/sanm.c +++ b/libavcodec/sanm.c @@ -1484,11 +1484,13 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, return ret; ctx->rotate_code = header.rotate_code; - if ((ctx->frame->key_frame = !header.seq_num)) { + if (!header.seq_num) { + ctx->frame->flags |= AV_FRAME_FLAG_KEY; ctx->frame->pict_type = AV_PICTURE_TYPE_I; fill_frame(ctx->frm1, ctx->npixels, header.bg_color); fill_frame(ctx->frm2, ctx->npixels, header.bg_color); } else { + ctx->frame->flags &= ~AV_FRAME_FLAG_KEY; ctx->frame->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/scpr.c b/libavcodec/scpr.c index 7630adb3e0..b096965de5 100644 --- a/libavcodec/scpr.c +++ b/libavcodec/scpr.c @@ -516,18 +516,18 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, s->version = 1; s->get_freq = get_freq0; s->decode = decode0; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; ret = decompress_i(avctx, (uint32_t *)s->current_frame->data[0], s->current_frame->linesize[0] / 4); } else if (type == 18) { s->version = 2; s->get_freq = get_freq; s->decode = decode; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; ret = decompress_i(avctx, (uint32_t *)s->current_frame->data[0], s->current_frame->linesize[0] / 4); } else if (type == 34) { - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; s->version = 3; ret = decompress_i3(avctx, (uint32_t *)s->current_frame->data[0], s->current_frame->linesize[0] / 4); @@ -538,7 +538,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, if (bytestream2_get_bytes_left(gb) < 3) return AVERROR_INVALIDDATA; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; bytestream2_skip(gb, 1); if (avctx->bits_per_coded_sample == 16) { uint16_t value = bytestream2_get_le16(gb); @@ -557,7 +557,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, dst += s->current_frame->linesize[0] / 4; } } else if (type == 0 || type == 1) { - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; if (s->version == 1 || s->version == 2) ret = decompress_p(avctx, (uint32_t *)s->current_frame->data[0], @@ -612,7 +612,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, } } - 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; FFSWAP(AVFrame *, s->current_frame, s->last_frame); diff --git a/libavcodec/screenpresso.c b/libavcodec/screenpresso.c index 0d9e485043..b27154991c 100644 --- a/libavcodec/screenpresso.c +++ b/libavcodec/screenpresso.c @@ -173,7 +173,7 @@ static int screenpresso_decode_frame(AVCodecContext *avctx, AVFrame *frame, /* Usual properties */ if (keyframe) { frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; } else { frame->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/sga.c b/libavcodec/sga.c index d3f4924298..16442b40be 100644 --- a/libavcodec/sga.c +++ b/libavcodec/sga.c @@ -499,7 +499,7 @@ static int sga_decode_frame(AVCodecContext *avctx, AVFrame *frame, memcpy(frame->data[1], s->pal, AVPALETTE_SIZE); frame->palette_has_changed = 1; frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; diff --git a/libavcodec/sgidec.c b/libavcodec/sgidec.c index 92083f23de..04a347c51e 100644 --- a/libavcodec/sgidec.c +++ b/libavcodec/sgidec.c @@ -249,7 +249,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, break; } p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; /* Skip header. */ bytestream2_seek(&g, SGI_HEADER_SIZE, SEEK_SET); diff --git a/libavcodec/sgirledec.c b/libavcodec/sgirledec.c index 9e3a220ad4..18bf8081fc 100644 --- a/libavcodec/sgirledec.c +++ b/libavcodec/sgirledec.c @@ -124,7 +124,7 @@ static int sgirle_decode_frame(AVCodecContext *avctx, AVFrame *frame, return ret; frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; diff --git a/libavcodec/sheervideo.c b/libavcodec/sheervideo.c index eee6014742..d9c94ea9eb 100644 --- a/libavcodec/sheervideo.c +++ b/libavcodec/sheervideo.c @@ -1973,7 +1973,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, } 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) return ret; diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c index a514120b65..08841f4cce 100644 --- a/libavcodec/smacker.c +++ b/libavcodec/smacker.c @@ -393,11 +393,13 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, bytestream2_init(&gb2, avpkt->data, avpkt->size); flags = bytestream2_get_byteu(&gb2); smk->pic->palette_has_changed = flags & 1; - smk->pic->key_frame = !!(flags & 2); - if (smk->pic->key_frame) + if (flags & 2) { + smk->pic->flags |= AV_FRAME_FLAG_KEY; smk->pic->pict_type = AV_PICTURE_TYPE_I; - else + } else { + smk->pic->flags &= ~AV_FRAME_FLAG_KEY; smk->pic->pict_type = AV_PICTURE_TYPE_P; + } for(i = 0; i < 256; i++) *pal++ = 0xFFU << 24 | bytestream2_get_be24u(&gb2); diff --git a/libavcodec/snow.c b/libavcodec/snow.c index b6c8d5e256..5eb3ee1e9e 100644 --- a/libavcodec/snow.c +++ b/libavcodec/snow.c @@ -606,7 +606,7 @@ int ff_snow_frame_start(SnowContext *s){ }else{ int i; for(i=0; imax_ref_frames && s->last_picture[i]->data[0]; i++) - if(i && s->last_picture[i-1]->key_frame) + if(i && (s->last_picture[i-1]->flags & AV_FRAME_FLAG_KEY)) break; s->ref_frames= i; if(s->ref_frames==0){ @@ -617,7 +617,10 @@ int ff_snow_frame_start(SnowContext *s){ if ((ret = ff_snow_get_buffer(s, s->current_picture)) < 0) return ret; - s->current_picture->key_frame= s->keyframe; + if (s->keyframe) + s->current_picture->flags |= AV_FRAME_FLAG_KEY; + else + s->current_picture->flags &= ~AV_FRAME_FLAG_KEY; return 0; } diff --git a/libavcodec/snowenc.c b/libavcodec/snowenc.c index 31a48972a5..1360343aec 100644 --- a/libavcodec/snowenc.c +++ b/libavcodec/snowenc.c @@ -1763,7 +1763,7 @@ redo_frame: ff_build_rac_states(c, (1LL<<32)/20, 256-8); pic->pict_type= AV_PICTURE_TYPE_I; s->keyframe=1; - s->current_picture->key_frame=1; + s->current_picture->flags |= AV_FRAME_FLAG_KEY; goto redo_frame; } @@ -1891,7 +1891,7 @@ redo_frame: } pkt->size = ff_rac_terminate(c, 0); - if (s->current_picture->key_frame) + if (s->current_picture->flags & AV_FRAME_FLAG_KEY) pkt->flags |= AV_PKT_FLAG_KEY; *got_packet = 1; diff --git a/libavcodec/speedhqdec.c b/libavcodec/speedhqdec.c index e1e6f9a5f5..ff106009a9 100644 --- a/libavcodec/speedhqdec.c +++ b/libavcodec/speedhqdec.c @@ -436,7 +436,7 @@ static int speedhq_decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = ff_get_buffer(avctx, frame, 0)) < 0) { return ret; } - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; if (second_field_offset == 4 || second_field_offset == (buf_size-4)) { /* diff --git a/libavcodec/svq3.c b/libavcodec/svq3.c index df514030b9..2d03dbc457 100644 --- a/libavcodec/svq3.c +++ b/libavcodec/svq3.c @@ -1408,7 +1408,10 @@ static int svq3_decode_frame(AVCodecContext *avctx, AVFrame *rframe, /* for skipping the frame */ s->cur_pic->f->pict_type = s->pict_type; - s->cur_pic->f->key_frame = (s->pict_type == AV_PICTURE_TYPE_I); + if (s->pict_type == AV_PICTURE_TYPE_I) + s->cur_pic->f->flags |= AV_FRAME_FLAG_KEY; + else + s->cur_pic->f->flags &= ~AV_FRAME_FLAG_KEY; ret = get_buffer(avctx, s->cur_pic); if (ret < 0) diff --git a/libavcodec/targa_y216dec.c b/libavcodec/targa_y216dec.c index d5234c16ae..2874a51aae 100644 --- a/libavcodec/targa_y216dec.c +++ b/libavcodec/targa_y216dec.c @@ -47,7 +47,7 @@ static int y216_decode_frame(AVCodecContext *avctx, AVFrame *pic, if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) return ret; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; y = (uint16_t *)pic->data[0]; diff --git a/libavcodec/tdsc.c b/libavcodec/tdsc.c index b5ab2e171b..739738d9b1 100644 --- a/libavcodec/tdsc.c +++ b/libavcodec/tdsc.c @@ -612,7 +612,7 @@ static int tdsc_decode_frame(AVCodecContext *avctx, AVFrame *frame, /* Frame is ready to be output */ if (keyframe) { frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; } else { frame->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index 1a1879de89..560cb3e5b3 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -1036,7 +1036,7 @@ static int dng_decode_tiles(AVCodecContext *avctx, AVFrame *frame, /* Frame is ready to be output */ frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; return avpkt->size; } @@ -2379,6 +2379,7 @@ again: } } + p->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/tmv.c b/libavcodec/tmv.c index cdb83452e5..582b6ddd02 100644 --- a/libavcodec/tmv.c +++ b/libavcodec/tmv.c @@ -57,7 +57,7 @@ static int tmv_decode_frame(AVCodecContext *avctx, AVFrame *frame, } frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; dst = frame->data[0]; frame->palette_has_changed = 1; diff --git a/libavcodec/truemotion2.c b/libavcodec/truemotion2.c index b168b9cda1..73c93359da 100644 --- a/libavcodec/truemotion2.c +++ b/libavcodec/truemotion2.c @@ -930,11 +930,13 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, } offset += t; } - p->key_frame = tm2_decode_blocks(l, p); - if (p->key_frame) + if (tm2_decode_blocks(l, p)) { + p->flags |= AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_I; - else + } else { + p->flags &= ~AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_P; + } l->cur = !l->cur; *got_frame = 1; diff --git a/libavcodec/truemotion2rt.c b/libavcodec/truemotion2rt.c index c6015b278a..4f8590fc82 100644 --- a/libavcodec/truemotion2rt.c +++ b/libavcodec/truemotion2rt.c @@ -202,7 +202,7 @@ static int truemotion2rt_decode_frame(AVCodecContext *avctx, AVFrame *p, } p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/utvideodec.c b/libavcodec/utvideodec.c index c7ef725e5e..1f00c58950 100644 --- a/libavcodec/utvideodec.c +++ b/libavcodec/utvideodec.c @@ -869,7 +869,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, break; } - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; if (c->interlaced) frame->flags |= AV_FRAME_FLAG_INTERLACED; diff --git a/libavcodec/v210dec.c b/libavcodec/v210dec.c index 26c9841d83..814d65bbda 100644 --- a/libavcodec/v210dec.c +++ b/libavcodec/v210dec.c @@ -187,7 +187,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *pic, return ret; pic->pict_type = AV_PICTURE_TYPE_I; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; if (stride) { td.stride = stride; diff --git a/libavcodec/v210x.c b/libavcodec/v210x.c index 96594e2a43..55630fa2fb 100644 --- a/libavcodec/v210x.c +++ b/libavcodec/v210x.c @@ -62,7 +62,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *pic, vdst = (uint16_t *)pic->data[2]; yend = ydst + width; pic->pict_type = AV_PICTURE_TYPE_I; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; for (;;) { uint32_t v = av_be2ne32(*src++); diff --git a/libavcodec/v308dec.c b/libavcodec/v308dec.c index a81771fc5f..4bc4ea4e21 100644 --- a/libavcodec/v308dec.c +++ b/libavcodec/v308dec.c @@ -48,7 +48,7 @@ static int v308_decode_frame(AVCodecContext *avctx, AVFrame *pic, if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) return ret; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; y = pic->data[0]; diff --git a/libavcodec/v408dec.c b/libavcodec/v408dec.c index edc9976d94..191c050fb2 100644 --- a/libavcodec/v408dec.c +++ b/libavcodec/v408dec.c @@ -51,7 +51,7 @@ static int v408_decode_frame(AVCodecContext *avctx, AVFrame *pic, if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) return ret; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; y = pic->data[0]; diff --git a/libavcodec/v410dec.c b/libavcodec/v410dec.c index fb859e8cca..35e4a8ae03 100644 --- a/libavcodec/v410dec.c +++ b/libavcodec/v410dec.c @@ -102,7 +102,7 @@ static int v410_decode_frame(AVCodecContext *avctx, AVFrame *pic, if ((ret = ff_thread_get_buffer(avctx, pic, 0)) < 0) return ret; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; td.buf = src; diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c index 3f5471067a..2277135699 100644 --- a/libavcodec/v4l2_buffers.c +++ b/libavcodec/v4l2_buffers.c @@ -427,7 +427,8 @@ int ff_v4l2_buffer_buf_to_avframe(AVFrame *frame, V4L2Buffer *avbuf) return ret; /* 2. get frame information */ - frame->key_frame = !!(avbuf->buf.flags & V4L2_BUF_FLAG_KEYFRAME); + if (avbuf->buf.flags & V4L2_BUF_FLAG_KEYFRAME) + frame->flags |= AV_FRAME_FLAG_KEY; frame->color_primaries = v4l2_get_color_primaries(avbuf); frame->colorspace = v4l2_get_color_space(avbuf); frame->color_range = v4l2_get_color_range(avbuf); diff --git a/libavcodec/vble.c b/libavcodec/vble.c index 9307b0d165..7711bf1bb1 100644 --- a/libavcodec/vble.c +++ b/libavcodec/vble.c @@ -135,7 +135,7 @@ static int vble_decode_frame(AVCodecContext *avctx, AVFrame *pic, return ret; /* Set flags */ - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; /* Version should always be 1 */ diff --git a/libavcodec/vbndec.c b/libavcodec/vbndec.c index d92dcd46b9..02ed43f874 100644 --- a/libavcodec/vbndec.c +++ b/libavcodec/vbndec.c @@ -151,7 +151,7 @@ static int vbn_decode_frame(AVCodecContext *avctx, goto out; frame->pict_type = AV_PICTURE_TYPE_I; - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; if (format == VBN_FORMAT_RAW) { uint8_t *flipped = frame->data[0] + frame->linesize[0] * (frame->height - 1); diff --git a/libavcodec/vc1dec.c b/libavcodec/vc1dec.c index a103a73445..8298cefbc7 100644 --- a/libavcodec/vc1dec.c +++ b/libavcodec/vc1dec.c @@ -1060,7 +1060,10 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, // for skipping the frame 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; /* skip B-frames if we don't have reference frames */ if (!s->last_picture_ptr && s->pict_type == AV_PICTURE_TYPE_B) { diff --git a/libavcodec/vcr1.c b/libavcodec/vcr1.c index 853d4459a8..771337e262 100644 --- a/libavcodec/vcr1.c +++ b/libavcodec/vcr1.c @@ -63,7 +63,7 @@ static int vcr1_decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; for (i = 0; i < 16; i++) { a->delta[i] = *bytestream++; diff --git a/libavcodec/vmnc.c b/libavcodec/vmnc.c index 8daaf08c5d..17e3a2f3c1 100644 --- a/libavcodec/vmnc.c +++ b/libavcodec/vmnc.c @@ -339,7 +339,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, if ((ret = ff_reget_buffer(avctx, c->pic, 0)) < 0) return ret; - c->pic->key_frame = 0; + c->pic->flags &= ~AV_FRAME_FLAG_KEY; c->pic->pict_type = AV_PICTURE_TYPE_P; // restore screen after cursor @@ -441,7 +441,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *rframe, bytestream2_skip(gb, 4); break; case MAGIC_WMVi: // ServerInitialization struct - c->pic->key_frame = 1; + c->pic->flags |= AV_FRAME_FLAG_KEY; c->pic->pict_type = AV_PICTURE_TYPE_I; depth = bytestream2_get_byte(gb); if (depth != c->bpp) { diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c index 2234855946..9e097c8905 100644 --- a/libavcodec/vp3.c +++ b/libavcodec/vp3.c @@ -2677,7 +2677,10 @@ static int vp3_decode_frame(AVCodecContext *avctx, AVFrame *frame, s->current_frame.f->pict_type = s->keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; - s->current_frame.f->key_frame = s->keyframe; + if (s->keyframe) + s->current_frame.f->flags |= AV_FRAME_FLAG_KEY; + else + s->current_frame.f->flags &= ~AV_FRAME_FLAG_KEY; if ((ret = ff_thread_get_ext_buffer(avctx, &s->current_frame, AV_GET_BUFFER_FLAG_REF)) < 0) goto error; diff --git a/libavcodec/vp5.c b/libavcodec/vp5.c index 579333506a..78d4b38ce3 100644 --- a/libavcodec/vp5.c +++ b/libavcodec/vp5.c @@ -44,10 +44,13 @@ static int vp5_parse_header(VP56Context *s, const uint8_t *buf, int buf_size) ret = ff_vpx_init_range_decoder(&s->c, buf, buf_size); if (ret < 0) return ret; - s->frames[VP56_FRAME_CURRENT]->key_frame = !vpx_rac_get(c); + if (!vpx_rac_get(c)) + s->frames[VP56_FRAME_CURRENT]->flags |= AV_FRAME_FLAG_KEY; + else + s->frames[VP56_FRAME_CURRENT]->flags &= ~AV_FRAME_FLAG_KEY; vpx_rac_get(c); ff_vp56_init_dequant(s, vp56_rac_gets(c, 6)); - if (s->frames[VP56_FRAME_CURRENT]->key_frame) + if (s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY) { int render_x, render_y; @@ -148,7 +151,7 @@ static int vp5_parse_coeff_models(VP56Context *s) if (vpx_rac_get_prob_branchy(c, vp5_dccv_pct[pt][node])) { def_prob[node] = vp56_rac_gets_nn(c, 7); model->coeff_dccv[pt][node] = def_prob[node]; - } else if (s->frames[VP56_FRAME_CURRENT]->key_frame) { + } else if (s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY) { model->coeff_dccv[pt][node] = def_prob[node]; } @@ -159,7 +162,7 @@ static int vp5_parse_coeff_models(VP56Context *s) if (vpx_rac_get_prob_branchy(c, vp5_ract_pct[ct][pt][cg][node])) { def_prob[node] = vp56_rac_gets_nn(c, 7); model->coeff_ract[pt][ct][cg][node] = def_prob[node]; - } else if (s->frames[VP56_FRAME_CURRENT]->key_frame) { + } else if (s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY) { model->coeff_ract[pt][ct][cg][node] = def_prob[node]; } diff --git a/libavcodec/vp56.c b/libavcodec/vp56.c index bd994428a4..a5c5b23622 100644 --- a/libavcodec/vp56.c +++ b/libavcodec/vp56.c @@ -350,7 +350,7 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src, if (s->avctx->skip_loop_filter >= AVDISCARD_ALL || (s->avctx->skip_loop_filter >= AVDISCARD_NONKEY - && !s->frames[VP56_FRAME_CURRENT]->key_frame)) + && !(s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY))) deblock_filtering = 0; dx = s->mv[b].x / s->vp56_coord_div[b]; @@ -493,7 +493,7 @@ static int vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha) VP56mb mb_type; int ret; - if (s->frames[VP56_FRAME_CURRENT]->key_frame) + if (s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY) mb_type = VP56_MB_INTRA; else mb_type = vp56_decode_mv(s, row, col); @@ -511,7 +511,7 @@ static int vp56_conceal_mb(VP56Context *s, int row, int col, int is_alpha) { VP56mb mb_type; - if (s->frames[VP56_FRAME_CURRENT]->key_frame) + if (s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY) mb_type = VP56_MB_INTRA; else mb_type = vp56_conceal_mv(s, row, col); @@ -596,6 +596,7 @@ int ff_vp56_decode_frame(AVCodecContext *avctx, AVFrame *rframe, if (s->alpha_context) av_frame_unref(s->alpha_context->frames[i]); } + s->frames[VP56_FRAME_CURRENT]->flags |= AV_FRAME_FLAG_KEY; //FIXME } ret = ff_get_buffer(avctx, p, AV_GET_BUFFER_FLAG_REF); @@ -670,7 +671,7 @@ static int ff_vp56_decode_mbs(AVCodecContext *avctx, void *data, int res; int damaged = 0; - if (p->key_frame) { + if (p->flags & AV_FRAME_FLAG_KEY) { p->pict_type = AV_PICTURE_TYPE_I; s->default_models_init(s); for (block=0; blockmb_height*s->mb_width; block++) @@ -762,7 +763,7 @@ static int ff_vp56_decode_mbs(AVCodecContext *avctx, void *data, s->have_undamaged_frame = 1; next: - if (p->key_frame || s->golden_frame) { + if ((p->flags & AV_FRAME_FLAG_KEY) || s->golden_frame) { av_frame_unref(s->frames[VP56_FRAME_GOLDEN]); if ((res = av_frame_ref(s->frames[VP56_FRAME_GOLDEN], p)) < 0) return res; diff --git a/libavcodec/vp6.c b/libavcodec/vp6.c index 9bbfa0eb5d..7a519cf10d 100644 --- a/libavcodec/vp6.c +++ b/libavcodec/vp6.c @@ -57,10 +57,13 @@ static int vp6_parse_header(VP56Context *s, const uint8_t *buf, int buf_size) int ret; int separated_coeff = buf[0] & 1; - s->frames[VP56_FRAME_CURRENT]->key_frame = !(buf[0] & 0x80); + if (!(buf[0] & 0x80)) + s->frames[VP56_FRAME_CURRENT]->flags |= AV_FRAME_FLAG_KEY; + else + s->frames[VP56_FRAME_CURRENT]->flags &= ~AV_FRAME_FLAG_KEY; ff_vp56_init_dequant(s, (buf[0] >> 1) & 0x3F); - if (s->frames[VP56_FRAME_CURRENT]->key_frame) { + if (s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY) { sub_version = buf[1] >> 3; if (sub_version > 8) return AVERROR_INVALIDDATA; @@ -299,7 +302,7 @@ static int vp6_parse_coeff_models(VP56Context *s) if (vpx_rac_get_prob_branchy(c, vp6_dccv_pct[pt][node])) { def_prob[node] = vp56_rac_gets_nn(c, 7); model->coeff_dccv[pt][node] = def_prob[node]; - } else if (s->frames[VP56_FRAME_CURRENT]->key_frame) { + } else if (s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY) { model->coeff_dccv[pt][node] = def_prob[node]; } @@ -322,7 +325,7 @@ static int vp6_parse_coeff_models(VP56Context *s) if (vpx_rac_get_prob_branchy(c, vp6_ract_pct[ct][pt][cg][node])) { def_prob[node] = vp56_rac_gets_nn(c, 7); model->coeff_ract[pt][ct][cg][node] = def_prob[node]; - } else if (s->frames[VP56_FRAME_CURRENT]->key_frame) { + } else if (s->frames[VP56_FRAME_CURRENT]->flags & AV_FRAME_FLAG_KEY) { model->coeff_ract[pt][ct][cg][node] = def_prob[node]; } diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index db2419deaf..2ab06c8293 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -2732,7 +2732,10 @@ int vp78_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame, goto err; } - curframe->tf.f->key_frame = s->keyframe; + if (s->keyframe) + curframe->tf.f->flags |= AV_FRAME_FLAG_KEY; + else + curframe->tf.f->flags &= ~AV_FRAME_FLAG_KEY; curframe->tf.f->pict_type = s->keyframe ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; if ((ret = vp8_alloc_frame(s, curframe, referenced)) < 0) diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c index 7ff387faf4..d8a31507fa 100644 --- a/libavcodec/vp9.c +++ b/libavcodec/vp9.c @@ -1613,7 +1613,10 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, if ((ret = vp9_frame_alloc(avctx, &s->s.frames[CUR_FRAME])) < 0) return ret; f = s->s.frames[CUR_FRAME].tf.f; - f->key_frame = s->s.h.keyframe; + if (s->s.h.keyframe) + f->flags |= AV_FRAME_FLAG_KEY; + else + f->flags &= ~AV_FRAME_FLAG_KEY; f->pict_type = (s->s.h.keyframe || s->s.h.intraonly) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; if (s->s.frames[REF_FRAME_SEGMAP].tf.f->buf[0] && diff --git a/libavcodec/wbmpdec.c b/libavcodec/wbmpdec.c index 8b105bc135..3b5753abcd 100644 --- a/libavcodec/wbmpdec.c +++ b/libavcodec/wbmpdec.c @@ -74,7 +74,7 @@ static int wbmp_decode_frame(AVCodecContext *avctx, AVFrame *p, else readbits(p->data[0], width, height, p->linesize[0], gb.buffer, gb.buffer_end - gb.buffer); - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_I; *got_frame = 1; diff --git a/libavcodec/wcmv.c b/libavcodec/wcmv.c index 097ac8b8e9..b2413ee9c0 100644 --- a/libavcodec/wcmv.c +++ b/libavcodec/wcmv.c @@ -195,7 +195,10 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, } } - s->prev_frame->key_frame = intra; + if (intra) + s->prev_frame->flags |= AV_FRAME_FLAG_KEY; + else + s->prev_frame->flags &= ~AV_FRAME_FLAG_KEY; s->prev_frame->pict_type = intra ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; if ((ret = av_frame_ref(frame, s->prev_frame)) < 0) diff --git a/libavcodec/webp.c b/libavcodec/webp.c index b4357f95d5..d35cb66f8d 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -1186,7 +1186,7 @@ static int vp8_lossless_decode_frame(AVCodecContext *avctx, AVFrame *p, *got_frame = 1; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; ret = data_size; free_and_return: diff --git a/libavcodec/wnv1.c b/libavcodec/wnv1.c index 88532ee426..5c57db0054 100644 --- a/libavcodec/wnv1.c +++ b/libavcodec/wnv1.c @@ -69,7 +69,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; if ((ret = init_get_bits8(&gb, buf + 8, buf_size - 8)) < 0) return ret; diff --git a/libavcodec/xbmdec.c b/libavcodec/xbmdec.c index a0cc1cb8c6..ecfc957a3f 100644 --- a/libavcodec/xbmdec.c +++ b/libavcodec/xbmdec.c @@ -130,7 +130,7 @@ static int xbm_decode_frame(AVCodecContext *avctx, AVFrame *p, } } - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_I; *got_frame = 1; diff --git a/libavcodec/xl.c b/libavcodec/xl.c index 283cd39aa7..f008d56e89 100644 --- a/libavcodec/xl.c +++ b/libavcodec/xl.c @@ -60,7 +60,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; Y = p->data[0]; U = p->data[1]; diff --git a/libavcodec/xpmdec.c b/libavcodec/xpmdec.c index 2550afb9d6..5bc02378c8 100644 --- a/libavcodec/xpmdec.c +++ b/libavcodec/xpmdec.c @@ -422,7 +422,7 @@ static int xpm_decode_frame(AVCodecContext *avctx, AVFrame *p, ptr += mod_strcspn(ptr, ",") + 1; } - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_I; *got_frame = 1; diff --git a/libavcodec/xwddec.c b/libavcodec/xwddec.c index 6c5bc44a02..f691587be9 100644 --- a/libavcodec/xwddec.c +++ b/libavcodec/xwddec.c @@ -216,7 +216,7 @@ static int xwd_decode_frame(AVCodecContext *avctx, AVFrame *p, if ((ret = ff_get_buffer(avctx, p, 0)) < 0) return ret; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; p->pict_type = AV_PICTURE_TYPE_I; if (avctx->pix_fmt == AV_PIX_FMT_PAL8) { diff --git a/libavcodec/y41pdec.c b/libavcodec/y41pdec.c index b461f349ad..14e36dc998 100644 --- a/libavcodec/y41pdec.c +++ b/libavcodec/y41pdec.c @@ -51,7 +51,7 @@ static int y41p_decode_frame(AVCodecContext *avctx, AVFrame *pic, if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) return ret; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; for (i = avctx->height - 1; i >= 0 ; i--) { diff --git a/libavcodec/ylc.c b/libavcodec/ylc.c index 29c10f05da..c0c4d27c09 100644 --- a/libavcodec/ylc.c +++ b/libavcodec/ylc.c @@ -427,7 +427,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *p, } p->pict_type = AV_PICTURE_TYPE_I; - p->key_frame = 1; + p->flags |= AV_FRAME_FLAG_KEY; *got_frame = 1; return avpkt->size; diff --git a/libavcodec/yuv4dec.c b/libavcodec/yuv4dec.c index 15424b1940..ad83a2125c 100644 --- a/libavcodec/yuv4dec.c +++ b/libavcodec/yuv4dec.c @@ -46,7 +46,7 @@ static int yuv4_decode_frame(AVCodecContext *avctx, AVFrame *pic, if ((ret = ff_get_buffer(avctx, pic, 0)) < 0) return ret; - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; y = pic->data[0]; diff --git a/libavcodec/zerocodec.c b/libavcodec/zerocodec.c index 42fb24ff6c..6c3bcebce0 100644 --- a/libavcodec/zerocodec.c +++ b/libavcodec/zerocodec.c @@ -40,7 +40,7 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, AVFrame *pic, int i, j, zret, ret; if (avpkt->flags & AV_PKT_FLAG_KEY) { - pic->key_frame = 1; + pic->flags |= AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_I; } else { if (!prev) { @@ -50,7 +50,7 @@ static int zerocodec_decode_frame(AVCodecContext *avctx, AVFrame *pic, prev += (avctx->height - 1) * prev_pic->linesize[0]; - pic->key_frame = 0; + pic->flags &= ~AV_FRAME_FLAG_KEY; pic->pict_type = AV_PICTURE_TYPE_P; } diff --git a/libavcodec/zmbv.c b/libavcodec/zmbv.c index 0b44851811..d309a8612b 100644 --- a/libavcodec/zmbv.c +++ b/libavcodec/zmbv.c @@ -559,11 +559,11 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *frame, return ret; if (c->flags & ZMBV_KEYFRAME) { - frame->key_frame = 1; + frame->flags |= AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_I; zmbv_decode_intra(c); } else { - frame->key_frame = 0; + frame->flags &= ~AV_FRAME_FLAG_KEY; frame->pict_type = AV_PICTURE_TYPE_P; if (c->decomp_len < 2LL * ((c->width + c->bw - 1) / c->bw) * ((c->height + c->bh - 1) / c->bh)) return AVERROR_INVALIDDATA; -- cgit v1.2.3