This partially reverts cf70ba37ba74089a18295b29e77dead0a3222c9e, since it didn't take into account when rotation is 0, but there is another valid operation (eg. translation) in the matrix.
Sample-Id: white_zombie_scrunch.mov Found-by: Michael Niedermayer <[email protected]> --- libavformat/mov.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index 86b2de0..75bd5e9 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -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; } -- 1.9.3 (Apple Git-50) _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
