Commit 4c5fa628 authored by Vittorio Giovara's avatar Vittorio Giovara

mov: Do not compute negative SAR values

This partially reverts cf70ba37, since
it didn't take into account when rotation is 0, but there is another
valid operation (eg. translation) in the matrix.
Found-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 2a06c2a0
......@@ -35,7 +35,6 @@
#include "libavutil/time_internal.h"
#include "libavutil/avstring.h"
#include "libavutil/dict.h"
#include "libavutil/display.h"
#include "libavutil/opt.h"
#include "libavcodec/ac3tab.h"
#include "avformat.h"
......@@ -2579,10 +2578,9 @@ static int mov_read_tkhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
}
// transform the display width/height according to the matrix
// skip this if the rotation angle is 0 degrees
// skip this when the display matrix is the identity one
// to keep the same scale, use [width height 1<<16]
if (width && height && sc->display_matrix &&
av_display_rotation_get(sc->display_matrix) != 0.0f) {
if (width && height && sc->display_matrix) {
for (i = 0; i < 2; i++)
disp_transform[i] =
(int64_t) width * display_matrix[0][i] +
......@@ -2590,9 +2588,10 @@ static int mov_read_tkhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
((int64_t) display_matrix[2][i] << 16);
//sample aspect ratio is new width/height divided by old width/height
st->sample_aspect_ratio = av_d2q(
((double) disp_transform[0] * height) /
((double) disp_transform[1] * width), INT_MAX);
if (disp_transform[0] > 0 && disp_transform[1] > 0)
st->sample_aspect_ratio = av_d2q(
((double) disp_transform[0] * height) /
((double) disp_transform[1] * width), INT_MAX);
}
return 0;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment