GES is not rotating a *.mov file which is tagged for rotation

Mathieu Duponchelle mathieu at centricular.com
Wed Jun 5 22:30:19 UTC 2019


GES itself will not do that, as a standard GES source only uses uridecodebin. The way image-orientation
works is that the demuxer (qtdemux here) will parse the tag and forward it downstream. Other elements
such as videoflip can then use it to actually perform the rotation. See the difference in behaviour between
the following pipelines:

gst-launch-1.0 uridecodebin uri=file:///home/meh/Downloads/rotate-180.mov ! xvimagesink
gst-launch-1.0 uridecodebin uri=file:///home/meh/Downloads/rotate-180.mov ! videoflip video-direction=auto ! xvimagesink

It could be argued that GES should always add a videoflip element with video-direction=auto, but for now
you can probably add videoflip as an effect :)

On 6/5/19 11:24 PM, David Ing wrote:
> Also, here is the output of gst-discoverer-1.0 --verbose
>
> I highlighted the relevant section which is image orientation: rotate-180.
>
> $ gst-discoverer-1.0 --verbose rotate-180.mov
> Analyzing file:///C:/Users/ding/Desktop/rotate-180.mov
> Done discovering file:///C:/Users/ding/Desktop/rotate-180.mov
>
> Topology:
>   container: video/quicktime
>     audio: audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1208, rate=(int)44100, channels=(int)1
>       Tags:
>         audio codec: MPEG-4 AAC audio
>         maximum bitrate: 64000
>         bitrate: 64000
>         datetime: 2016-03-14T08:26:08Z
>         QT atom: buffer of 34 bytes
>         container format: Quicktime
>
>       Codec:
>         audio/mpeg, mpegversion=(int)4, framed=(boolean)true, stream-format=(string)raw, level=(string)2, base-profile=(string)lc, profile=(string)lc, codec_data=(buffer)1208, rate=(int)44100, channels=(int)1
>       Additional info:
>         None
>       Stream ID: a2bd37016805819d7874188ad12d70943361aa53b0c7253a2b9813b7f8ab3cb5/002
>       Language: <unknown>
>       Channels: 1 (unknown layout)
>       Sample rate: 44100
>       Depth: 32
>       Bitrate: 64000
>       Max bitrate: 64000
>     video: video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.1, profile=(string)high, codec_data=(buffer)01640029ffe1001067640029ac5680780227e59a8080808101000528ee04f2c0, width=(int)1920, height=(int)1080, framerate=(fraction)24/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
>       Tags:
>         image orientation: rotate-180
>         video codec: H.264 / AVC
>         bitrate: 17149794
>         datetime: 2016-03-14T08:26:08Z
>         QT atom: buffer of 34 bytes
>         container format: Quicktime
>
>       Codec:
>         video/x-h264, stream-format=(string)avc, alignment=(string)au, level=(string)4.1, profile=(string)high, codec_data=(buffer)01640029ffe1001067640029ac5680780227e59a8080808101000528ee04f2c0, width=(int)1920, height=(int)1080, framerate=(fraction)24/1, pixel-aspect-ratio=(fraction)1/1, colorimetry=(string)bt709, interlace-mode=(string)progressive, chroma-format=(string)4:2:0, bit-depth-luma=(uint)8, bit-depth-chroma=(uint)8, parsed=(boolean)true
>       Additional info:
>         None
>       Stream ID: a2bd37016805819d7874188ad12d70943361aa53b0c7253a2b9813b7f8ab3cb5/001
>       Width: 1920
>       Height: 1080
>       Depth: 24
>       Frame rate: 24/1
>       Pixel aspect ratio: 1/1
>       Interlaced: false
>       Bitrate: 17149794
>       Max bitrate: 0
>
> Properties:
>   Duration: 0:00:10.955000000
>   Seekable: yes
>   Live: no
>   Tags:
>       audio codec: MPEG-4 AAC audio
>       maximum bitrate: 64000
>       bitrate: 64000
>       datetime: 2016-03-14T08:26:08Z
>       QT atom: buffer of 34 bytes
>       container format: Quicktime
>       image orientation: rotate-180
>       video codec: H.264 / AVC
>
> WARNING: no real random source present!
>
> On Wed, Jun 5, 2019 at 12:51 PM David Ing <ding at panopto.com <mailto:ding at panopto.com>> wrote:
>
>     I have an old *.mov file ...
>
>     https://drive.google.com/file/d/1qNm2ISC5qnI3VN0MwemCcb_QjweJAjYF/view?usp=sharing
>
>     ... which is tagged in a way that indicates it should be rotated when it is displayed.  Below (at end of this message) is an excerpt from an ffprobe command which demonstrates the how the file is tagged (I highlighted the relevant output).
>
>     I am using the file as a GESUriClip inside of a GESTimeline, and the rotation is not being applied.  It comes through upside-down.
>
>     *My question is*:  Is this a bug?  Or am I expected to detect the tags manually and then modify the "video-direction" property of GESVideoSource myself?
>
>     ---------------------------------
>     $ *ffprobe -v quiet -show_streams rotate-180.mov*
>     [STREAM]
>     index=0
>     codec_name=h264
>     codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
>     profile=High
>     codec_type=video
>     codec_time_base=2191/105200
>     codec_tag_string=avc1
>     codec_tag=0x31637661
>     width=1920
>     height=1080
>     coded_width=1920
>     coded_height=1088
>     has_b_frames=0
>     sample_aspect_ratio=N/A
>     display_aspect_ratio=N/A
>     pix_fmt=yuv420p
>     level=41
>     color_range=tv
>     color_space=bt709
>     color_transfer=bt709
>     color_primaries=bt709
>     chroma_location=left
>     field_order=unknown
>     timecode=N/A
>     refs=1
>     is_avc=true
>     nal_length_size=4
>     id=N/A
>     r_frame_rate=24/1
>     avg_frame_rate=52600/2191
>     time_base=1/600
>     start_pts=0
>     start_time=0.000000
>     duration_ts=6573
>     duration=10.955000
>     bit_rate=17150952
>     max_bit_rate=N/A
>     bits_per_raw_sample=8
>     nb_frames=263
>     nb_read_frames=N/A
>     nb_read_packets=N/A
>     DISPOSITION:default=1
>     DISPOSITION:dub=0
>     DISPOSITION:original=0
>     DISPOSITION:comment=0
>     DISPOSITION:lyrics=0
>     DISPOSITION:karaoke=0
>     DISPOSITION:forced=0
>     DISPOSITION:hearing_impaired=0
>     DISPOSITION:visual_impaired=0
>     DISPOSITION:clean_effects=0
>     DISPOSITION:attached_pic=0
>     DISPOSITION:timed_thumbnails=0
>     TAG:rotate=180
>     TAG:creation_time=2016-03-14T08:26:08.000000Z
>     TAG:language=und
>     TAG:handler_name=Core Media Video
>     TAG:encoder=H.264
>     [SIDE_DATA]
>     side_data_type=Display Matrix
>     displaymatrix=
>     00000000:       -65536           0           0
>     00000001:            0      -65536           0
>     00000002:    125829120    70778880  1073741824
>
>     rotation=-180
>     [/SIDE_DATA]
>     [/STREAM]
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20190606/c218eb55/attachment.html>


More information about the gstreamer-devel mailing list