[FFmpeg-devel] [PATCH 2/2] lavf/mxfdec: begin utilizing the newly parsed widths and heights
Jan Ekström
jeebjp at gmail.com
Mon Sep 26 02:52:42 EEST 2016
* Updates the width/height sanity check to check all values against
INT_MAX.
* Correctly utilizes the stored width or height by default, and if
sampled or display values are available they are utilized.
Signed-off-by: Jan Ekström <jeebjp at gmail.com>
---
libavformat/mxfdec.c | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 54fc6fb..f90a85c 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -2061,15 +2061,39 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
if (st->codecpar->codec_id == AV_CODEC_ID_NONE)
st->codecpar->codec_id = container_ul->id;
- if (descriptor->stored_width > INT_MAX || descriptor->stored_height > INT_MAX) {
+ if (descriptor->stored_width > INT_MAX || descriptor->stored_height > INT_MAX ||
+ descriptor->sampled_width > INT_MAX || descriptor->sampled_height > INT_MAX ||
+ descriptor->display_width > INT_MAX || descriptor->display_height > INT_MAX) {
av_log(mxf->fc, AV_LOG_ERROR,
- "One or both of the descriptor's storage width/height values does not fit within an integer! "
- "(width=%"PRIu32", height=%"PRIu32")\n", descriptor->stored_width, descriptor->stored_height);
+ "One or more of the descriptor's storage width/height values does not fit within an integer:\n"
+ "(stored_width=%"PRIu32", stored_height=%"PRIu32")\n"
+ "(sampled_width=%"PRIu32", sampled_height=%"PRIu32")\n"
+ "(display_width=%"PRIu32", display_height=%"PRIu32")\n",
+ descriptor->stored_width, descriptor->stored_height,
+ descriptor->sampled_width, descriptor->sampled_height,
+ descriptor->display_width, descriptor->display_height);
ret = AVERROR(AVERROR_PATCHWELCOME);
goto fail_and_free;
}
st->codecpar->width = descriptor->stored_width;
st->codecpar->height = descriptor->stored_height; /* Field height, not frame height */
+
+ /*
+ Widths and heights get overridden storage->sampled->display.
+ In case of an unset value the previous value shall be used.
+ */
+ if (descriptor->sampled_width)
+ st->codecpar->width = descriptor->sampled_width;
+
+ if (descriptor->display_width)
+ st->codecpar->width = descriptor->display_width;
+
+ if (descriptor->sampled_height)
+ st->codecpar->height = descriptor->sampled_height;
+
+ if (descriptor->display_height)
+ st->codecpar->height = descriptor->display_height;
+
switch (descriptor->frame_layout) {
case FullFrame:
st->codecpar->field_order = AV_FIELD_PROGRESSIVE;
--
2.7.4
More information about the ffmpeg-devel
mailing list