[FFmpeg-devel] [PATCH V4 1/2] avutil: add ROI data struct and bump version
Guo, Yejun
yejun.guo at intel.com
Fri Dec 28 12:09:45 EET 2018
The encoders such as libx264 support different QPs offset for different MBs,
it makes possible for ROI-based encoding. It makes sense to add support
within ffmpeg to generate/accept ROI infos and pass into encoders.
Typical usage: After AVFrame is decoded, a ffmpeg filter or user's code
generates ROI info for that frame, and the encoder finally does the
ROI-based encoding.
The ROI info is maintained as side data of AVFrame.
Signed-off-by: Guo, Yejun <yejun.guo at intel.com>
---
libavutil/frame.c | 1 +
libavutil/frame.h | 23 +++++++++++++++++++++++
libavutil/version.h | 2 +-
3 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/libavutil/frame.c b/libavutil/frame.c
index 34a6210..bebc50e 100644
--- a/libavutil/frame.c
+++ b/libavutil/frame.c
@@ -841,6 +841,7 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type)
case AV_FRAME_DATA_QP_TABLE_DATA: return "QP table data";
#endif
case AV_FRAME_DATA_DYNAMIC_HDR_PLUS: return "HDR Dynamic Metadata SMPTE2094-40 (HDR10+)";
+ case AV_FRAME_DATA_ROIS: return "Regions Of Interest";
}
return NULL;
}
diff --git a/libavutil/frame.h b/libavutil/frame.h
index 582ac47..3460b01 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -173,6 +173,12 @@ enum AVFrameSideDataType {
* volume transform - application 4 of SMPTE 2094-40:2016 standard.
*/
AV_FRAME_DATA_DYNAMIC_HDR_PLUS,
+
+ /**
+ * Regions Of Interest, the data is an array of AVROI type, the array size
+ * is implied by AVFrameSideData::size / sizeof(AVROI).
+ */
+ AV_FRAME_DATA_ROIS,
};
enum AVActiveFormatDescription {
@@ -201,6 +207,23 @@ typedef struct AVFrameSideData {
} AVFrameSideData;
/**
+ * Structure to hold Region Of Interest.
+ *
+ * top/bottom/left/right are coordinates at frame pixel level.
+ * They will be extended internally if the codec requires an alignment.
+ * If the regions overlap, the last value in the list will be used.
+ *
+ * qoffset is quant offset, it is encoder dependent.
+ */
+typedef struct AVROI {
+ size_t top;
+ size_t bottom;
+ size_t left;
+ size_t right;
+ int qoffset;
+} AVROI;
+
+/**
* This structure describes decoded (raw) audio or video data.
*
* AVFrame must be allocated using av_frame_alloc(). Note that this only
diff --git a/libavutil/version.h b/libavutil/version.h
index f997615..1fcdea9 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 56
-#define LIBAVUTIL_VERSION_MINOR 25
+#define LIBAVUTIL_VERSION_MINOR 26
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
--
2.7.4
More information about the ffmpeg-devel
mailing list