From: James Almer <jamrial@gmail.com>
To: ffmpeg-devel@ffmpeg.org
Subject: [FFmpeg-devel] [PATCH] avutil/frame: use bitfields for some boolean and enum fields
Date: Mon, 17 Apr 2023 11:39:30 -0300
Message-ID: <20230417143930.1186-1-jamrial@gmail.com> (raw)
Should reduce the size of AVFrame in the next major bump without changing the API.
Suggested-by: Anton Khirnov <anton@khirnov.net>
Signed-off-by: James Almer <jamrial@gmail.com>
---
This supersedes "avutil/frame: add new interlaced and top_field_first flags"
and "avutil/frame: add a keyframe flag to AVFrame".
libavutil/frame.h | 56 +++++++++++++++++++++++++++++++++++++++++++++
libavutil/version.h | 1 +
2 files changed, 57 insertions(+)
diff --git a/libavutil/frame.h b/libavutil/frame.h
index f85d630c5c..c26067f383 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -416,6 +416,7 @@ typedef struct AVFrame {
*/
int format;
+#if FF_API_BITFIELDS
/**
* 1 -> keyframe, 0-> not
*/
@@ -425,6 +426,57 @@ typedef struct AVFrame {
* Picture type of the frame.
*/
enum AVPictureType pict_type;
+#else
+ /**
+ * 1 -> keyframe, 0-> not
+ */
+ unsigned int key_frame: 1;
+
+ /**
+ * The content of the picture is interlaced.
+ */
+ unsigned int interlaced_frame: 1;
+
+ /**
+ * If the content is interlaced, is top field displayed first.
+ */
+ unsigned int top_field_first: 1;
+
+ /**
+ * Tell user application that palette has changed from previous frame.
+ */
+ unsigned int palette_has_changed: 1;
+
+ /**
+ * Reserved. Must not be touched.
+ */
+ unsigned int reserved_bitfield: (sizeof(unsigned int) * 8) - 9;
+
+ /**
+ * MPEG vs JPEG YUV range.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
+ */
+ enum AVColorRange color_range: 2;
+
+ enum AVChromaLocation chroma_location: 3;
+
+ /**
+ * Picture type of the frame.
+ */
+ enum AVPictureType pict_type: 8;
+
+ enum AVColorPrimaries color_primaries: 8;
+
+ enum AVColorTransferCharacteristic color_trc: 8;
+
+ /**
+ * YUV colorspace type.
+ * - encoding: Set by user
+ * - decoding: Set by libavcodec
+ */
+ enum AVColorSpace colorspace: 8;
+#endif
/**
* Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
@@ -491,6 +543,7 @@ typedef struct AVFrame {
*/
int repeat_pict;
+#if FF_API_BITFIELDS
/**
* The content of the picture is interlaced.
*/
@@ -505,6 +558,7 @@ typedef struct AVFrame {
* Tell user application that palette has changed from previous frame.
*/
int palette_has_changed;
+#endif
#if FF_API_REORDERED_OPAQUE
/**
@@ -595,6 +649,7 @@ typedef struct AVFrame {
*/
int flags;
+#if FF_API_BITFIELDS
/**
* MPEG vs JPEG YUV range.
* - encoding: Set by user
@@ -614,6 +669,7 @@ typedef struct AVFrame {
enum AVColorSpace colorspace;
enum AVChromaLocation chroma_location;
+#endif
/**
* frame timestamp estimated using various heuristics, in stream time base
diff --git a/libavutil/version.h b/libavutil/version.h
index 40f92af055..23cad31b46 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -115,6 +115,7 @@
#define FF_API_FRAME_PICTURE_NUMBER (LIBAVUTIL_VERSION_MAJOR < 59)
#define FF_API_HDR_VIVID_THREE_SPLINE (LIBAVUTIL_VERSION_MAJOR < 59)
#define FF_API_FRAME_PKT (LIBAVUTIL_VERSION_MAJOR < 59)
+#define FF_API_BITFIELDS (LIBAVUTIL_VERSION_MAJOR < 59)
/**
* @}
--
2.40.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-request@ffmpeg.org with subject "unsubscribe".
next reply other threads:[~2023-04-17 14:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-17 14:39 James Almer [this message]
2023-04-17 15:00 ` Lynne
2023-04-17 15:15 ` James Almer
2023-04-17 17:25 ` Lynne
2023-04-17 17:27 ` James Almer
2023-04-19 15:06 ` Lynne
2023-04-17 17:19 ` Anton Khirnov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230417143930.1186-1-jamrial@gmail.com \
--to=jamrial@gmail.com \
--cc=ffmpeg-devel@ffmpeg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git