1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

mov: Write the display matrix in order

This will allow to copy the matrix as is and it is just cleaner to keep
the matrix in the same order specified by the mov standard (which is
also explicitly described in the documentation).

In order to preserve compatibility, flip the angle sign in the display API
av_display_rotation_set() and av_display_rotation_get(), and improve the
documentation mentioning the rotation direction.
This commit is contained in:
Vittorio Giovara 2015-03-17 17:38:48 +00:00
parent e0046bc9c9
commit e4fe535d12
4 changed files with 9 additions and 9 deletions

View File

@ -2606,7 +2606,7 @@ static int mov_read_tkhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
for (i = 0; i < 3; i++) for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++) for (j = 0; j < 3; j++)
sc->display_matrix[i * 3 + j] = display_matrix[j][i]; sc->display_matrix[i * 3 + j] = display_matrix[i][j];
} }
// transform the display width/height according to the matrix // transform the display width/height according to the matrix

View File

@ -46,12 +46,12 @@ double av_display_rotation_get(const int32_t matrix[9])
rotation = atan2(CONV_FP(matrix[1]) / scale[1], rotation = atan2(CONV_FP(matrix[1]) / scale[1],
CONV_FP(matrix[0]) / scale[0]) * 180 / M_PI; CONV_FP(matrix[0]) / scale[0]) * 180 / M_PI;
return rotation; return -rotation;
} }
void av_display_rotation_set(int32_t matrix[9], double angle) void av_display_rotation_set(int32_t matrix[9], double angle)
{ {
double radians = angle * M_PI / 180.0f; double radians = -angle * M_PI / 180.0f;
double c = cos(radians); double c = cos(radians);
double s = sin(radians); double s = sin(radians);

View File

@ -55,9 +55,9 @@
* Extract the rotation component of the transformation matrix. * Extract the rotation component of the transformation matrix.
* *
* @param matrix the transformation matrix * @param matrix the transformation matrix
* @return the angle (in degrees) by which the transformation rotates the frame. * @return the angle (in degrees) by which the transformation rotates the frame
* The angle will be in range [-180.0, 180.0], or NaN if the matrix is * counterclockwise. The angle will be in range [-180.0, 180.0],
* singular. * or NaN if the matrix is singular.
* *
* @note floating point numbers are inherently inexact, so callers are * @note floating point numbers are inherently inexact, so callers are
* recommended to round the return value to nearest integer before use. * recommended to round the return value to nearest integer before use.
@ -65,8 +65,8 @@
double av_display_rotation_get(const int32_t matrix[9]); double av_display_rotation_get(const int32_t matrix[9]);
/** /**
* Initialize a transformation matrix describing a pure rotation by the * Initialize a transformation matrix describing a pure counterclockwise
* specified angle (in degrees). * rotation by the specified angle (in degrees).
* *
* @param matrix an allocated transformation matrix (will be fully overwritten * @param matrix an allocated transformation matrix (will be fully overwritten
* by this function) * by this function)

View File

@ -55,7 +55,7 @@
#define LIBAVUTIL_VERSION_MAJOR 54 #define LIBAVUTIL_VERSION_MAJOR 54
#define LIBAVUTIL_VERSION_MINOR 9 #define LIBAVUTIL_VERSION_MINOR 9
#define LIBAVUTIL_VERSION_MICRO 0 #define LIBAVUTIL_VERSION_MICRO 1
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
LIBAVUTIL_VERSION_MINOR, \ LIBAVUTIL_VERSION_MINOR, \