@@ -51,8 +51,16 @@ 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;
+
FF_DISABLE_DEPRECATION_WARNINGS
av_buffer_unref(&f->qp_table_buf);
@@ -62,20 +70,53 @@ 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);
+
+ if (!frame_new_side_data(f, AV_FRAME_DATA_QP_TABLE_DATA, av_buffer_ref(buf)))
+ 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
@@ -789,6 +830,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;
}
@@ -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 {
@@ -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
@@ -27,30 +27,30 @@ color_space=bt470bg
color_primaries=unknown
color_transfer=unknown
chroma_location=center
-TAG:ImageDescription=
+TAG:ImageDescription=
TAG:Make=Canon
TAG:Model=Canon PowerShot SX200 IS
TAG:Orientation= 1
-TAG:XResolution= 180:1
-TAG:YResolution= 180:1
+TAG:XResolution= 180:1
+TAG:YResolution= 180:1
TAG:ResolutionUnit= 2
TAG:DateTime=2013:07:18 13:12:03
TAG:YCbCrPositioning= 2
-TAG:ExposureTime= 1:1250
-TAG:FNumber= 40:10
+TAG:ExposureTime= 1:1250
+TAG:FNumber= 40:10
TAG:ISOSpeedRatings= 160
TAG:ExifVersion= 48, 50, 50, 49
TAG:DateTimeOriginal=2013:07:18 13:12:03
TAG:DateTimeDigitized=2013:07:18 13:12:03
TAG:ComponentsConfiguration= 1, 2, 3, 0
-TAG:CompressedBitsPerPixel= 3:1
-TAG:ShutterSpeedValue= 329:32
-TAG:ApertureValue= 128:32
-TAG:ExposureBiasValue= 0:3
-TAG:MaxApertureValue= 113:32
+TAG:CompressedBitsPerPixel= 3:1
+TAG:ShutterSpeedValue= 329:32
+TAG:ApertureValue= 128:32
+TAG:ExposureBiasValue= 0:3
+TAG:MaxApertureValue= 113:32
TAG:MeteringMode= 5
TAG:Flash= 16
-TAG:FocalLength= 5000:1000
+TAG:FocalLength= 5000:1000
TAG:MakerNote=
25, 0, 1, 0, 3, 0, 48, 0, 0, 0, 28, 4, 0, 0, 2, 0
3, 0, 4, 0, 0, 0, 124, 4, 0, 0, 3, 0, 3, 0, 4, 0
@@ -219,14 +219,20 @@ TAG:GPSLatitudeRef=R98
TAG:GPSLatitude= 48, 49, 48, 48
TAG:0x1001= 4000
TAG:0x1002= 2248
-TAG:FocalPlaneXResolution=4000000:244
-TAG:FocalPlaneYResolution=2248000:183
+TAG:FocalPlaneXResolution=4000000:244
+TAG:FocalPlaneYResolution=2248000:183
TAG:FocalPlaneResolutionUnit= 2
TAG:SensingMethod= 2
TAG:FileSource= 3
TAG:CustomRendered= 0
TAG:ExposureMode= 0
TAG:WhiteBalance= 0
-TAG:DigitalZoomRatio= 4000:4000
+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]