mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 03:59:43 +00:00
avutil: add ROI (Region Of Interest) data struct and bump version
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@intel.com> Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
parent
af05070ddf
commit
1ef4828276
@ -15,6 +15,9 @@ libavutil: 2017-10-21
|
|||||||
|
|
||||||
API changes, most recent first:
|
API changes, most recent first:
|
||||||
|
|
||||||
|
2019-01-08 - xxxxxxxxxx - lavu 56.26.100 - frame.h
|
||||||
|
Add AV_FRAME_DATA_REGIONS_OF_INTEREST
|
||||||
|
|
||||||
2018-12-21 - 2744d6b364 - lavu 56.25.100 - hdr_dynamic_metadata.h
|
2018-12-21 - 2744d6b364 - lavu 56.25.100 - hdr_dynamic_metadata.h
|
||||||
Add AV_FRAME_DATA_DYNAMIC_HDR_PLUS enum value, av_dynamic_hdr_plus_alloc(),
|
Add AV_FRAME_DATA_DYNAMIC_HDR_PLUS enum value, av_dynamic_hdr_plus_alloc(),
|
||||||
av_dynamic_hdr_plus_create_side_data() functions, and related structs.
|
av_dynamic_hdr_plus_create_side_data() functions, and related structs.
|
||||||
|
@ -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";
|
case AV_FRAME_DATA_QP_TABLE_DATA: return "QP table data";
|
||||||
#endif
|
#endif
|
||||||
case AV_FRAME_DATA_DYNAMIC_HDR_PLUS: return "HDR Dynamic Metadata SMPTE2094-40 (HDR10+)";
|
case AV_FRAME_DATA_DYNAMIC_HDR_PLUS: return "HDR Dynamic Metadata SMPTE2094-40 (HDR10+)";
|
||||||
|
case AV_FRAME_DATA_REGIONS_OF_INTEREST: return "Regions Of Interest";
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -173,6 +173,12 @@ enum AVFrameSideDataType {
|
|||||||
* volume transform - application 4 of SMPTE 2094-40:2016 standard.
|
* volume transform - application 4 of SMPTE 2094-40:2016 standard.
|
||||||
*/
|
*/
|
||||||
AV_FRAME_DATA_DYNAMIC_HDR_PLUS,
|
AV_FRAME_DATA_DYNAMIC_HDR_PLUS,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Regions Of Interest, the data is an array of AVRegionOfInterest type, the number of
|
||||||
|
* array element is implied by AVFrameSideData.size / AVRegionOfInterest.self_size.
|
||||||
|
*/
|
||||||
|
AV_FRAME_DATA_REGIONS_OF_INTEREST,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum AVActiveFormatDescription {
|
enum AVActiveFormatDescription {
|
||||||
@ -200,6 +206,35 @@ typedef struct AVFrameSideData {
|
|||||||
AVBufferRef *buf;
|
AVBufferRef *buf;
|
||||||
} AVFrameSideData;
|
} AVFrameSideData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Structure to hold Region Of Interest.
|
||||||
|
*
|
||||||
|
* self_size specifies the size of this data structure. This value
|
||||||
|
* should be set to sizeof(AVRegionOfInterest). EINVAL is returned if self_size is zero.
|
||||||
|
*
|
||||||
|
* Number of pixels to discard from the top/bottom/left/right border of
|
||||||
|
* the frame to obtain the region of interest of the frame.
|
||||||
|
* They are encoder dependent and 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, and base rule here:
|
||||||
|
* returns EINVAL if AVRational.den is zero.
|
||||||
|
* the value (num/den) range is [-1.0, 1.0], clamp to +-1.0 if out of range.
|
||||||
|
* 0 means no picture quality change,
|
||||||
|
* negtive offset asks for better quality (and the best with value -1.0),
|
||||||
|
* positive offset asks for worse quality (and the worst with value 1.0).
|
||||||
|
* How to explain/implement the different quilaity requirement is encoder dependent.
|
||||||
|
*/
|
||||||
|
typedef struct AVRegionOfInterest {
|
||||||
|
uint32_t self_size;
|
||||||
|
int top;
|
||||||
|
int bottom;
|
||||||
|
int left;
|
||||||
|
int right;
|
||||||
|
AVRational qoffset;
|
||||||
|
} AVRegionOfInterest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This structure describes decoded (raw) audio or video data.
|
* This structure describes decoded (raw) audio or video data.
|
||||||
*
|
*
|
||||||
|
@ -79,7 +79,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_MAJOR 56
|
#define LIBAVUTIL_VERSION_MAJOR 56
|
||||||
#define LIBAVUTIL_VERSION_MINOR 25
|
#define LIBAVUTIL_VERSION_MINOR 26
|
||||||
#define LIBAVUTIL_VERSION_MICRO 100
|
#define LIBAVUTIL_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
|
||||||
|
Loading…
Reference in New Issue
Block a user