Signed-off-by: James Almer <jamr...@gmail.com> --- libavformat/mov.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-)
diff --git a/libavformat/mov.c b/libavformat/mov.c index 33158ac4dd..fdf2238d47 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1234,14 +1234,26 @@ static int mov_read_wfex(MOVContext *c, AVIOContext *pb, MOVAtom atom) static int mov_read_clap(MOVContext *c, AVIOContext *pb, MOVAtom atom) { AVStream *st; + HEIFItem *item; AVPacketSideData *sd; + int width, height; AVRational aperture_width, aperture_height, horiz_off, vert_off; AVRational pc_x, pc_y; uint64_t top, bottom, left, right; - if (c->fc->nb_streams < 1) + item = heif_cur_item(c); + st = get_curr_st(c); + if (!st) return 0; - st = c->fc->streams[c->fc->nb_streams-1]; + + width = st->codecpar->width; + height = st->codecpar->height; + if ((!width || !height) && item) { + width = item->width; + height = item->height; + } + if (!width || !height) + return AVERROR_INVALIDDATA; aperture_width.num = avio_rb32(pb); aperture_width.den = avio_rb32(pb); @@ -1263,9 +1275,9 @@ static int mov_read_clap(MOVContext *c, AVIOContext *pb, MOVAtom atom) aperture_width.num, aperture_width.den, aperture_height.num, aperture_height.den, horiz_off.num, horiz_off.den, vert_off.num, vert_off.den); - pc_x = av_mul_q((AVRational) { st->codecpar->width - 1, 1 }, (AVRational) { 1, 2 }); + pc_x = av_mul_q((AVRational) { width - 1, 1 }, (AVRational) { 1, 2 }); pc_x = av_add_q(pc_x, horiz_off); - pc_y = av_mul_q((AVRational) { st->codecpar->height - 1, 1 }, (AVRational) { 1, 2 }); + pc_y = av_mul_q((AVRational) { height - 1, 1 }, (AVRational) { 1, 2 }); pc_y = av_add_q(pc_y, vert_off); aperture_width = av_sub_q(aperture_width, (AVRational) { 1, 1 }); @@ -1278,18 +1290,18 @@ static int mov_read_clap(MOVContext *c, AVIOContext *pb, MOVAtom atom) top = av_q2d(av_sub_q(pc_y, aperture_height)); bottom = av_q2d(av_add_q(pc_y, aperture_height)); - if (bottom > (st->codecpar->height - 1) || - right > (st->codecpar->width - 1)) + if (bottom > (height - 1) || + right > (width - 1)) return AVERROR_INVALIDDATA; - bottom = st->codecpar->height - 1 - bottom; - right = st->codecpar->width - 1 - right; + bottom = height - 1 - bottom; + right = width - 1 - right; if (!(left | right | top | bottom)) return 0; - if ((left + right) >= st->codecpar->width || - (top + bottom) >= st->codecpar->height) + if ((left + right) >= width || + (top + bottom) >= height) return AVERROR_INVALIDDATA; sd = av_packet_side_data_new(&st->codecpar->coded_side_data, -- 2.46.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".