On 09/01/15 11:24, Vittorio Giovara wrote: > When the display matrix is not the identity one, but the rotation angle > is zero, there is no need to update the sample aspect ratio. > > Otherwise, it is possible to obtain negative values which interferes > with transcoding in later stages. This kind of behaviour is reproducible > on mov files with "major_brand: MSNV". > > CC: [email protected] > Signed-off-by: Vittorio Giovara <[email protected]> > --- > libavformat/mov.c | 12 ++++-------- > 1 file changed, 4 insertions(+), 8 deletions(-) > > diff --git a/libavformat/mov.c b/libavformat/mov.c > index aa81661..86b2de0 100644 > --- a/libavformat/mov.c > +++ b/libavformat/mov.c > @@ -35,6 +35,7 @@ > #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" > @@ -2578,15 +2579,10 @@ static int mov_read_tkhd(MOVContext *c, AVIOContext > *pb, MOVAtom atom) > } > > // transform the display width/height according to the matrix > - // skip this if the display matrix is the default identity matrix > - // or if it is rotating the picture, ex iPhone 3GS > + // skip this if the rotation angle is 0 degrees > // to keep the same scale, use [width height 1<<16] > - if (width && height && > - ((display_matrix[0][0] != 65536 || > - display_matrix[1][1] != 65536) && > - !display_matrix[0][1] && > - !display_matrix[1][0] && > - !display_matrix[2][0] && !display_matrix[2][1])) { > + if (width && height && sc->display_matrix && > + av_display_rotation_get(sc->display_matrix) != 0.0f) { > for (i = 0; i < 2; i++) > disp_transform[i] = > (int64_t) width * display_matrix[0][i] + >
Seems fine. _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
