You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
mov: Do not compute negative SAR values
This partially reverts cf70ba37ba
, since
it didn't take into account when rotation is 0, but there is another
valid operation (eg. translation) in the matrix.
Found-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@@ -35,7 +35,6 @@
|
|||||||
#include "libavutil/time_internal.h"
|
#include "libavutil/time_internal.h"
|
||||||
#include "libavutil/avstring.h"
|
#include "libavutil/avstring.h"
|
||||||
#include "libavutil/dict.h"
|
#include "libavutil/dict.h"
|
||||||
#include "libavutil/display.h"
|
|
||||||
#include "libavutil/opt.h"
|
#include "libavutil/opt.h"
|
||||||
#include "libavcodec/ac3tab.h"
|
#include "libavcodec/ac3tab.h"
|
||||||
#include "avformat.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
|
// 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]
|
// to keep the same scale, use [width height 1<<16]
|
||||||
if (width && height && sc->display_matrix &&
|
if (width && height && sc->display_matrix) {
|
||||||
av_display_rotation_get(sc->display_matrix) != 0.0f) {
|
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
disp_transform[i] =
|
disp_transform[i] =
|
||||||
(int64_t) width * display_matrix[0][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);
|
((int64_t) display_matrix[2][i] << 16);
|
||||||
|
|
||||||
//sample aspect ratio is new width/height divided by old width/height
|
//sample aspect ratio is new width/height divided by old width/height
|
||||||
st->sample_aspect_ratio = av_d2q(
|
if (disp_transform[0] > 0 && disp_transform[1] > 0)
|
||||||
((double) disp_transform[0] * height) /
|
st->sample_aspect_ratio = av_d2q(
|
||||||
((double) disp_transform[1] * width), INT_MAX);
|
((double) disp_transform[0] * height) /
|
||||||
|
((double) disp_transform[1] * width), INT_MAX);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user