summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/APIchanges3
-rw-r--r--libavutil/frame.c59
-rw-r--r--libavutil/frame.h17
-rw-r--r--libavutil/version.h2
-rw-r--r--tests/ref/fate/exif-image-embedded6
-rw-r--r--tests/ref/fate/exif-image-jpg6
6 files changed, 86 insertions, 7 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index f757f5063e..4c0ee7147a 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil: 2017-10-21
API changes, most recent first:
+2018-03-18 - xxxxxxx - lavu 56.11.100 - frame.h
+ Add AV_FRAME_DATA_QP_TABLE_PROPERTIES and AV_FRAME_DATA_QP_TABLE_DATA.
+
2018-03-15 - e0e72539cf - lavu 56.10.100 - opt.h
Add AV_OPT_FLAG_BSF_PARAM
diff --git a/libavutil/frame.c b/libavutil/frame.c
index 0db2a2d57b..ea13cd3ed6 100644
--- a/libavutil/frame.c
+++ b/libavutil/frame.c
@@ -46,8 +46,17 @@ MAKE_ACCESSORS(AVFrame, frame, enum AVColorRange, color_range)
av_get_channel_layout_nb_channels((frame)->channel_layout))
#if FF_API_FRAME_QP
+struct qp_properties {
+ int stride;
+ int type;
+};
+
int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int qp_type)
{
+ struct qp_properties *p;
+ AVFrameSideData *sd;
+ AVBufferRef *ref;
+
FF_DISABLE_DEPRECATION_WARNINGS
av_buffer_unref(&f->qp_table_buf);
@@ -57,20 +66,56 @@ FF_DISABLE_DEPRECATION_WARNINGS
f->qscale_type = qp_type;
FF_ENABLE_DEPRECATION_WARNINGS
+ av_frame_remove_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES);
+ av_frame_remove_side_data(f, AV_FRAME_DATA_QP_TABLE_DATA);
+
+ ref = av_buffer_ref(buf);
+ if (!av_frame_new_side_data_from_buf(f, AV_FRAME_DATA_QP_TABLE_DATA, ref)) {
+ av_buffer_unref(&ref);
+ return AVERROR(ENOMEM);
+ }
+
+ sd = av_frame_new_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES,
+ sizeof(struct qp_properties));
+ if (!sd)
+ return AVERROR(ENOMEM);
+
+ p = (struct qp_properties *)sd->data;
+ p->stride = stride;
+ p->type = qp_type;
+
return 0;
}
int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type)
{
-FF_DISABLE_DEPRECATION_WARNINGS
- *stride = f->qstride;
- *type = f->qscale_type;
+ AVBufferRef *buf = NULL;
- if (!f->qp_table_buf)
- return NULL;
+ *stride = 0;
+ *type = 0;
- return f->qp_table_buf->data;
+FF_DISABLE_DEPRECATION_WARNINGS
+ if (f->qp_table_buf) {
+ *stride = f->qstride;
+ *type = f->qscale_type;
+ buf = f->qp_table_buf;
FF_ENABLE_DEPRECATION_WARNINGS
+ } else {
+ AVFrameSideData *sd;
+ struct qp_properties *p;
+ sd = av_frame_get_side_data(f, AV_FRAME_DATA_QP_TABLE_PROPERTIES);
+ if (!sd)
+ return NULL;
+ p = (struct qp_properties *)sd->data;
+ sd = av_frame_get_side_data(f, AV_FRAME_DATA_QP_TABLE_DATA);
+ if (!sd)
+ return NULL;
+ *stride = p->stride;
+ *type = p->type;
+ buf = sd->buf;
+ }
+
+ return buf ? buf->data : NULL;
}
#endif
@@ -787,6 +832,8 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type)
case AV_FRAME_DATA_CONTENT_LIGHT_LEVEL: return "Content light level metadata";
case AV_FRAME_DATA_GOP_TIMECODE: return "GOP timecode";
case AV_FRAME_DATA_ICC_PROFILE: return "ICC profile";
+ case AV_FRAME_DATA_QP_TABLE_PROPERTIES: return "QP table properties";
+ case AV_FRAME_DATA_QP_TABLE_DATA: return "QP table data";
}
return NULL;
}
diff --git a/libavutil/frame.h b/libavutil/frame.h
index ddbac3156d..9d57d6ce66 100644
--- a/libavutil/frame.h
+++ b/libavutil/frame.h
@@ -141,6 +141,23 @@ enum AVFrameSideDataType {
* metadata key entry "name".
*/
AV_FRAME_DATA_ICC_PROFILE,
+
+#if FF_API_FRAME_QP
+ /**
+ * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA.
+ * The contents of this side data are undocumented and internal; use
+ * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a
+ * meaningful way instead.
+ */
+ AV_FRAME_DATA_QP_TABLE_PROPERTIES,
+
+ /**
+ * Raw QP table data. Its format is described by
+ * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and
+ * av_frame_get_qp_table() to access this instead.
+ */
+ AV_FRAME_DATA_QP_TABLE_DATA,
+#endif
};
enum AVActiveFormatDescription {
diff --git a/libavutil/version.h b/libavutil/version.h
index 9ca556ddc9..d166bb30e7 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
*/
#define LIBAVUTIL_VERSION_MAJOR 56
-#define LIBAVUTIL_VERSION_MINOR 10
+#define LIBAVUTIL_VERSION_MINOR 11
#define LIBAVUTIL_VERSION_MICRO 100
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/tests/ref/fate/exif-image-embedded b/tests/ref/fate/exif-image-embedded
index 306ae0854b..0b640767a8 100644
--- a/tests/ref/fate/exif-image-embedded
+++ b/tests/ref/fate/exif-image-embedded
@@ -29,6 +29,12 @@ color_transfer=unknown
chroma_location=center
TAG:UserComment=AppleMark
+[SIDE_DATA]
+side_data_type=QP table data
+[/SIDE_DATA]
+[SIDE_DATA]
+side_data_type=QP table properties
+[/SIDE_DATA]
[/FRAME]
[FRAME]
media_type=audio
diff --git a/tests/ref/fate/exif-image-jpg b/tests/ref/fate/exif-image-jpg
index b266501191..eb18dede21 100644
--- a/tests/ref/fate/exif-image-jpg
+++ b/tests/ref/fate/exif-image-jpg
@@ -229,4 +229,10 @@ TAG:ExposureMode= 0
TAG:WhiteBalance= 0
TAG:DigitalZoomRatio= 4000:4000
TAG:SceneCaptureType= 0
+[SIDE_DATA]
+side_data_type=QP table data
+[/SIDE_DATA]
+[SIDE_DATA]
+side_data_type=QP table properties
+[/SIDE_DATA]
[/FRAME]