[FFmpeg-devel] [PATCH] avcodec/cbs_av1: add a function to return an upscaled frame width

James Almer jamrial at gmail.com
Mon Aug 24 02:39:16 EEST 2020


Signed-off-by: James Almer <jamrial at gmail.com>
---
 libavcodec/cbs_av1.c | 12 ++++++++++++
 libavcodec/cbs_av1.h |  5 +++++
 2 files changed, 17 insertions(+)

diff --git a/libavcodec/cbs_av1.c b/libavcodec/cbs_av1.c
index 72ad18151e..726a2211da 100644
--- a/libavcodec/cbs_av1.c
+++ b/libavcodec/cbs_av1.c
@@ -1247,6 +1247,18 @@ static void cbs_av1_close(CodedBitstreamContext *ctx)
     av_buffer_unref(&priv->frame_header_ref);
 }
 
+int ff_cbs_av1_get_frame_width(const AV1RawFrameHeader *frame)
+{
+    int denom, frame_width = frame->frame_width_minus_1 + 1;
+
+    if (!frame->use_superres)
+        return frame_width;
+
+    denom = frame->coded_denom + AV1_SUPERRES_DENOM_MIN;
+
+    return (frame_width * AV1_SUPERRES_NUM + denom / 2) / denom;
+}
+
 const CodedBitstreamType ff_cbs_type_av1 = {
     .codec_id          = AV_CODEC_ID_AV1,
 
diff --git a/libavcodec/cbs_av1.h b/libavcodec/cbs_av1.h
index 704a231209..fa41af666f 100644
--- a/libavcodec/cbs_av1.h
+++ b/libavcodec/cbs_av1.h
@@ -445,4 +445,9 @@ typedef struct CodedBitstreamAV1Context {
 } CodedBitstreamAV1Context;
 
 
+/**
+ * Return the frame's width with superres upscaling applied, if any.
+ */
+int ff_cbs_av1_get_frame_width(const AV1RawFrameHeader *frame);
+
 #endif /* AVCODEC_CBS_AV1_H */
-- 
2.27.0



More information about the ffmpeg-devel mailing list