[FFmpeg-devel] [PATCH] Extract rotation in MOV metadata

Jean-Daniel Dupas devlists at shadowlab.org
Sat Apr 30 01:09:15 CEST 2011


Le 30 avr. 2011 à 00:55, Stefano Sabatini a écrit :

> On date Tuesday 2011-04-05 16:53:32 -0700, Baptiste Coudurier encoded:
>> Hi Dave,
>> 
>> On 04/05/2011 04:49 PM, Dave Badia wrote:
> [...]
>>> Interrogate MOV metadata for orientation of video so that software can
>>> determine if the video needs to be rotated.
>>> ---
>>> libavformat/mov.c |    4 ++++
>>> 1 files changed, 4 insertions(+), 0 deletions(-)
>>> 
>>> diff --git a/libavformat/mov.c b/libavformat/mov.c
>>> index 23ba1d4..b12890f 100644
>>> --- a/libavformat/mov.c
>>> +++ b/libavformat/mov.c
>>> @@ -1907,6 +1907,10 @@ static int mov_read_tkhd(MOVContext *c, AVIOContext *pb,
>>> MOVAtom atom)
>>>     sc->width = width >> 16;
>>>     sc->height = height >> 16;
>>> 
>>> +    if (display_matrix[0][0] == -65536 && display_matrix[1][1] == -65536) {
>>> +         av_metadata_set2(&c->fc->metadata, "rotate", "180", 0);
>>> +    }
> 
> It was already said, but why such a specific check? IMO it would much
> more useful to export the rotation information (e.g. 90, 180,
> etc.). Which are the acceptable rotation values?
> 
> Also, how should we export this information to the application level
> (e.g. for auto-inserting a corresponding rotation filter at the begin
> of the filterchain)?

If your goal is to apply a filter based on the track matrix, I don't understand what the point of extracting the rotation only.
It would be easier to extract the whole matrix, and write an 'affine transform' filter to apply the matrix instead of bothering with rotation, which is just a special case of affine transform.
If the track matrix specifies a rotation, a translation, and a scaling, applying only one transform will be wrong anyway.


-- Jean-Daniel






More information about the ffmpeg-devel mailing list