These properties are unreliable because they depend on the frames decoded so
far, users should check directly the presence of the decoded AVFrame side data
or AVFrame flags.

Signed-off-by: Marton Balint <c...@passwd.hu>
---
 doc/APIchanges             | 3 +++
 libavcodec/av1dec.c        | 8 ++++++++
 libavcodec/avcodec.c       | 4 ++++
 libavcodec/avcodec.h       | 3 +++
 libavcodec/h2645_sei.c     | 8 ++++++++
 libavcodec/hevc/hevcdec.c  | 8 ++++++++
 libavcodec/jpeg2000dec.c   | 4 ++++
 libavcodec/libdav1d.c      | 8 ++++++++
 libavcodec/mjpegdec.c      | 8 ++++++++
 libavcodec/mpeg12dec.c     | 4 ++++
 libavcodec/pthread_frame.c | 4 ++++
 libavcodec/version.h       | 2 +-
 libavcodec/version_major.h | 1 +
 libavcodec/vp9.c           | 4 ++++
 libavcodec/webp.c          | 4 ++++
 libavformat/dump.c         | 4 ++++
 16 files changed, 76 insertions(+), 1 deletion(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index bfba0946d3..52850d2cd4 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2024-03-07
 
 API changes, most recent first:
 
+2024-12-xx - xxxxxxxxxx - lavc 61.28.100 - frame.h
+  Deprecate AVCodecContext->properties.
+
 2024-12-xx - xxxxxxxxxx - lavc 61.27.100 - frame.h
   Add AV_FRAME_FLAG_LOSSLESS.
 
diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c
index bc4ef63e68..93551d9d7b 100644
--- a/libavcodec/av1dec.c
+++ b/libavcodec/av1dec.c
@@ -788,10 +788,14 @@ static int set_context_with_sequence(AVCodecContext 
*avctx,
         break;
     }
 
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
     if (seq->film_grain_params_present)
         avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN;
     else
         avctx->properties &= ~FF_CODEC_PROPERTY_FILM_GRAIN;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
     if (avctx->width != width || avctx->height != height) {
         int ret = ff_set_dimensions(avctx, width, height);
@@ -983,7 +987,11 @@ static int export_itut_t35(AVCodecContext *avctx, AVFrame 
*frame,
             if (ret < 0)
                 return ret;
 
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
             avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
             break;
         }
         default: // ignore unsupported identifiers
diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c
index 1fa8704c9d..89001158ca 100644
--- a/libavcodec/avcodec.c
+++ b/libavcodec/avcodec.c
@@ -647,12 +647,16 @@ void avcodec_string(char *buf, int buf_size, 
AVCodecContext *enc, int encode)
         if (encode) {
             av_bprintf(&bprint, ", q=%d-%d", enc->qmin, enc->qmax);
         } else {
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
             if (enc->properties & FF_CODEC_PROPERTY_CLOSED_CAPTIONS)
                 av_bprintf(&bprint, ", Closed Captions");
             if (enc->properties & FF_CODEC_PROPERTY_FILM_GRAIN)
                 av_bprintf(&bprint, ", Film Grain");
             if (enc->properties & FF_CODEC_PROPERTY_LOSSLESS)
                 av_bprintf(&bprint, ", lossless");
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
         }
         break;
     case AVMEDIA_TYPE_AUDIO:
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 77ca8dee1f..cc6317075a 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -1798,15 +1798,18 @@ typedef struct AVCodecContext {
 #define FF_LEVEL_UNKNOWN -99
 #endif
 
+#if FF_API_CODEC_PROPS
     /**
      * Properties of the stream that gets decoded
      * - encoding: unused
      * - decoding: set by libavcodec
      */
+    attribute_deprecated
     unsigned properties;
 #define FF_CODEC_PROPERTY_LOSSLESS        0x00000001
 #define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002
 #define FF_CODEC_PROPERTY_FILM_GRAIN      0x00000004
+#endif
 
     /**
      * Skip loop filtering for selected frames.
diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c
index 986d1d250a..d7a5a84790 100644
--- a/libavcodec/h2645_sei.c
+++ b/libavcodec/h2645_sei.c
@@ -807,7 +807,11 @@ int ff_h2645_sei_to_frame(AVFrame *frame, H2645SEI *sei,
         if (!sd)
             av_buffer_unref(&a53->buf_ref);
         a53->buf_ref = NULL;
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
         avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
     }
 
     ret = h2645_sei_to_side_data(avctx, sei, &frame->side_data, 
&frame->nb_side_data);
@@ -900,7 +904,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
         else
             fgc->present = fgc->persistence_flag;
 
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
         avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
     }
 
 #if CONFIG_HEVC_SEI
diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c
index be35a9de82..8fbfc19ca3 100644
--- a/libavcodec/hevc/hevcdec.c
+++ b/libavcodec/hevc/hevcdec.c
@@ -403,8 +403,12 @@ static int export_stream_params_from_sei(HEVCContext *s)
 {
     AVCodecContext *avctx = s->avctx;
 
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
     if (s->sei.common.a53_caption.buf_ref)
         s->avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
     if (s->sei.common.alternative_transfer.present &&
         
av_color_transfer_name(s->sei.common.alternative_transfer.preferred_transfer_characteristics)
 &&
@@ -412,9 +416,13 @@ static int export_stream_params_from_sei(HEVCContext *s)
         avctx->color_trc = 
s->sei.common.alternative_transfer.preferred_transfer_characteristics;
     }
 
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
     if ((s->sei.common.film_grain_characteristics && 
s->sei.common.film_grain_characteristics->present) ||
         s->sei.common.aom_film_grain.enable)
         avctx->properties |= FF_CODEC_PROPERTY_FILM_GRAIN;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
     return 0;
 }
diff --git a/libavcodec/jpeg2000dec.c b/libavcodec/jpeg2000dec.c
index df13bea815..e5e897a29f 100644
--- a/libavcodec/jpeg2000dec.c
+++ b/libavcodec/jpeg2000dec.c
@@ -542,9 +542,13 @@ static int get_cox(Jpeg2000DecoderContext *s, 
Jpeg2000CodingStyle *c)
     /* set integer 9/7 DWT in case of BITEXACT flag */
     if ((s->avctx->flags & AV_CODEC_FLAG_BITEXACT) && (c->transform == 
FF_DWT97))
         c->transform = FF_DWT97_INT;
+#if FF_API_CODEC_PROPS
     else if (c->transform == FF_DWT53) {
+FF_DISABLE_DEPRECATION_WARNINGS
         s->avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
+FF_ENABLE_DEPRECATION_WARNINGS
     }
+#endif
 
     if (c->csty & JPEG2000_CSTY_PREC) {
         int i;
diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
index 546b42e9c6..4d9ac12eb7 100644
--- a/libavcodec/libdav1d.c
+++ b/libavcodec/libdav1d.c
@@ -162,10 +162,14 @@ static void libdav1d_init_params(AVCodecContext *c, const 
Dav1dSequenceHeader *s
                                     (unsigned)seq->num_units_in_tick,
                                     (unsigned)seq->time_scale);
 
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
    if (seq->film_grain_present)
        c->properties |= FF_CODEC_PROPERTY_FILM_GRAIN;
    else
        c->properties &= ~FF_CODEC_PROPERTY_FILM_GRAIN;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 }
 
 static av_cold int libdav1d_parse_extradata(AVCodecContext *c)
@@ -532,7 +536,11 @@ static int libdav1d_receive_frame(AVCodecContext *c, 
AVFrame *frame)
                 if (res < 0)
                     goto fail;
 
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
                 c->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
                 break;
             }
             default: // ignore unsupported identifiers
diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
index fefa5e7877..bd1b502e50 100644
--- a/libavcodec/mjpegdec.c
+++ b/libavcodec/mjpegdec.c
@@ -2508,7 +2508,11 @@ redo_for_pal8:
             break;
         case SOF3:
             avctx->profile     = AV_PROFILE_MJPEG_HUFFMAN_LOSSLESS;
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
             avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
             s->lossless    = 1;
             s->ls          = 0;
             s->progressive = 0;
@@ -2517,7 +2521,11 @@ redo_for_pal8:
             break;
         case SOF48:
             avctx->profile     = AV_PROFILE_MJPEG_JPEG_LS;
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
             avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
             s->lossless    = 1;
             s->ls          = 1;
             s->progressive = 0;
diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 208ee28b04..bbcaa71e2e 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -1919,7 +1919,11 @@ static void mpeg_set_cc_format(AVCodecContext *avctx, 
enum Mpeg2ClosedCaptionsFo
         av_log(avctx, AV_LOG_DEBUG, "CC: first seen substream is %s format\n", 
label);
     }
 
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
     avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 }
 
 static int mpeg_decode_a53_cc(AVCodecContext *avctx,
diff --git a/libavcodec/pthread_frame.c b/libavcodec/pthread_frame.c
index 1b1b96623f..b027aa8991 100644
--- a/libavcodec/pthread_frame.c
+++ b/libavcodec/pthread_frame.c
@@ -365,7 +365,11 @@ static int update_context_from_thread(AVCodecContext *dst, 
const AVCodecContext
 
         dst->has_b_frames = src->has_b_frames;
         dst->idct_algo    = src->idct_algo;
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
         dst->properties   = src->properties;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
         dst->bits_per_coded_sample = src->bits_per_coded_sample;
         dst->sample_aspect_ratio   = src->sample_aspect_ratio;
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 735c8b813c..87b7284a95 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
 
 #include "version_major.h"
 
-#define LIBAVCODEC_VERSION_MINOR  27
+#define LIBAVCODEC_VERSION_MINOR  28
 #define LIBAVCODEC_VERSION_MICRO 100
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
diff --git a/libavcodec/version_major.h b/libavcodec/version_major.h
index 86f4218b65..35df5eb779 100644
--- a/libavcodec/version_major.h
+++ b/libavcodec/version_major.h
@@ -49,6 +49,7 @@
 #define FF_API_VDPAU_ALLOC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 62)
 #define FF_API_QUALITY_FACTOR      (LIBAVCODEC_VERSION_MAJOR < 62)
 #define FF_API_V408_CODECID        (LIBAVCODEC_VERSION_MAJOR < 62)
+#define FF_API_CODEC_PROPS         (LIBAVCODEC_VERSION_MAJOR < 63)
 
 // reminder to remove the OMX encoder on next major bump
 #define FF_CODEC_OMX               (LIBAVCODEC_VERSION_MAJOR < 62)
diff --git a/libavcodec/vp9.c b/libavcodec/vp9.c
index b4b6fd933d..712938065e 100644
--- a/libavcodec/vp9.c
+++ b/libavcodec/vp9.c
@@ -682,8 +682,12 @@ static int decode_frame_header(AVCodecContext *avctx,
     s->s.h.uvac_qdelta = get_bits1(&s->gb) ? get_sbits_inv(&s->gb, 4) : 0;
     s->s.h.lossless    = s->s.h.yac_qi == 0 && s->s.h.ydc_qdelta == 0 &&
                        s->s.h.uvdc_qdelta == 0 && s->s.h.uvac_qdelta == 0;
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
     if (s->s.h.lossless)
         avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
 
     /* segmentation header info */
     if ((s->s.h.segmentation.enabled = get_bits1(&s->gb))) {
diff --git a/libavcodec/webp.c b/libavcodec/webp.c
index a965e50ac4..9f83b518ad 100644
--- a/libavcodec/webp.c
+++ b/libavcodec/webp.c
@@ -1407,7 +1407,11 @@ static int webp_decode_frame(AVCodecContext *avctx, 
AVFrame *p,
                                                 chunk_size, 0);
                 if (ret < 0)
                     return ret;
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
                 avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
             }
             bytestream2_skip(&gb, chunk_size);
             break;
diff --git a/libavformat/dump.c b/libavformat/dump.c
index b7125a652f..4eb0ff803d 100644
--- a/libavformat/dump.c
+++ b/libavformat/dump.c
@@ -620,7 +620,11 @@ static void dump_stream_format(const AVFormatContext *ic, 
int i,
 
     // Fields which are missing from AVCodecParameters need to be taken from 
the AVCodecContext
     if (sti->avctx) {
+#if FF_API_CODEC_PROPS
+FF_DISABLE_DEPRECATION_WARNINGS
         avctx->properties   = sti->avctx->properties;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
         avctx->codec        = sti->avctx->codec;
         avctx->qmin         = sti->avctx->qmin;
         avctx->qmax         = sti->avctx->qmax;
-- 
2.43.0

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to