OpenGL: Is it possible to store a 'glimagetransformation applied' video to a file?

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

OpenGL: Is it possible to store a 'glimagetransformation applied' video to a file?

sk_gst
Hi,

I have a pipeline which uses gltransformation and modifies the properties :
rotation-x/y/z.
Now this works perfectly fine, and I can see the changes in the video when I
use element 'glimagesink'.

Now I tried replacing glimagesink with a filesink, to see if I can store
this transformation applied video. The file is created but I am unable to
open the file.  Where am I going wrong?

actual pipeline: intervideosrc - glupload - glocolorconvert -
gltransformation - glimagesink

trial 1 : intervideosrc - glupload - glocolorconvert - gltransformation -
filesink (location=abc.avi)
trail 2 : intervideosrc -  filesink (location=abc.avi)

Both trial 1 & 2 pipelines created a file abc.avi but could not be read with
VLC media player.
Another observation was the the file size in trial1 was far more bigger as
compared to trial 2.

Below pipeline running for the same time, and the observed file sizes
trial 1 : ~4GB
trial 2 : ~300 MB


Could anyone point me out some hints for this issue?


Regards



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: OpenGL: Is it possible to store a 'glimagetransformation applied' video to a file?

MaZderMind
Hi

> Now I tried replacing glimagesink with a filesink, to see if I can store
> this transformation applied video. The file is created but I am unable to
> open the file.  Where am I going wrong?

At this point the Stream contains Buffers pointing to Memory in your
Graphicscard. First you'd have to download those buffers into your
computers Main-Memory (gldownload). Next yopu usually want to encode
those raw pixel values into some smaller form, ie h264 (x264enc). Now
this video-stream usually needs a container, ie. mp4 (mp4mux). Now you
can save this mp4-stream to a file.

This needs probably some color- and format-conversions, but it should
give you a rough indication of the Steps involved.

Best Regards,
Peter
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: OpenGL: Is it possible to store a 'glimagetransformation applied' video to a file?

sk_gst
This post was updated on .
Hi Mazdermind,


So this is what I tried based on your suggestion:

intervideosrc ! glupload ! glcolorconvert ! gltransformation ! gldownload !
video/x-raw ! videoconvert ! x264enc ! mp4mux ! filesink location=abc.mp4

In the above case, the file is created but when I open it there's nothing
that is displayed. I have the above pipeline in a python script which I
execute using:
     $./script.py -e  

I also tried the above pipeline with element autovideoconvert instead of videoconvert, and the output was the same. The file create is in the size of a few KBs(< 4KB)

I have checked the capabilities of the elements used in the pipeline and
they seem to be all compatible.
Do you see where I am going wrong?

Regards



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
gstreamer-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: OpenGL: Is it possible to store a 'glimagetransformation applied' video to a file?

sk_gst
An update to the question with further details about the pipelines for better
understanding:

My sender and receiver pipelines are as follows (works fine, issue with
storing the video in a file):

sender:
imxv4l2videosrc ! imxvpunenc_h264 ! h264parse ! rtph264pay ! rtpbin.send_rtp
! udpsink ! rtpbin.send_rtcp ! udpsink ! udpsrc ! rtpbin.recv_rtcp


receiver(decoupled pipelines):

pipe1 :
udpsrc ! application/x-rtp(with other details) ! rtpbin.recv_rtp !
rtph264depay ! h264parse ! avdec_h264 ! intervideosink ! udpsrc !
rtpbin.recv_rtcp ! rtpbin.send_rtcp ! udpsink

pipe2:
intervideosrc ! glupload ! glcolorconvert ! gltransformation ! glimagesink


Can anyone point out where I am going wrong ?

Regards



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: OpenGL: Is it possible to store a 'glimagetransformation applied' video to a file?

MaZderMind
In reply to this post by sk_gst
Hi

On 21.02.19 16:57, vk_gst wrote:
> In the above case, the file is created but when I open it there's nothing
> that is displayed.

Please be more specific. Is the file 0-bytes, has it size, does a
specific player not play it back?

What I suspect is, that upon termination of your program no EOS Event is
triggered (instead the application is just terminated), which prevents
mp4mux from writing a compatible .mp4 file. There is data in the file,
it is just not playable.

This command works only with the --eos-on-shutdown flag for that reason.

gst-launch-1.0 --eos-on-shutdown videotestsrc ! glupload !
glcolorconvert ! gltransformation rotation-y=30 ! gldownload !
videoconvert ! x264enc ! mp4mux ! filesink location=abc.mp4


Regards
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: OpenGL: Is it possible to store a 'glimagetransformation applied' video to a file?

sk_gst
No, the file is not of size 0 bytes. The file is approximately some 2-3 kBs
in size.

There are 2 ways I have tried using the --eos-on shutdown:
1. provide -e option with my python script: $./script.py -e

2. Using rtpbin signal 'on-timeout', I forcefully send a EOS event along the
bus which closes the pipeline. The timeout signal is received when the
sender stops sending the packets.  

I have tried both ways separately in my logic and the case was the same. The
video file of somebytes was created and could not be read by vlc or playbin.

following is my receiver pipeline which did not work:

receiver(decoupled pipelines):

pipe1 :
udpsrc ! application/x-rtp(with other details) ! rtpbin.recv_rtp !
rtph264depay ! h264parse ! avdec_h264 ! intervideosink ! udpsrc !
rtpbin.recv_rtcp ! rtpbin.send_rtcp ! udpsink

pipe2:
intervideosrc ! glupload ! glcolorconvert ! gltransformation ! gldownload !
video/x-raw ! videoconvert ! x264enc ! mp4mux ! filesink location=abc.mp4


One thing to note is that the gltransformation is being applied continuously
as and when required based on user input or network conditions. Storing file
without gltransformation works fine.


Regards




--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel