[gst-devel] Video transitions using gnloperation

Lane Brooks lane at brooks.nu
Tue Jan 4 18:56:55 CET 2011


On 01/04/2011 10:33 AM, Timothy Braun wrote:
> Make sure the gnl input sources have different priorities and set the gnloperations priority to 0.

Thanks for the idea. I tried setting the priority of the op to 0, src1 
to 1, and src2 to 2. Now when I run it the stream hangs after 2 seconds, 
which is when the gnloperation and src2 are starting up. I did some 
testing and the hanging only occurs if I set the priority on src2 to 
anything other than 0. I can set the priorities on the op and src1 
without hanging (it still doesn't work, however). Here is my code again 
with the updates:

         comp = gst.element_factory_make("gnlcomposition")
         src1 = gst.element_factory_make("gnlfilesource")
         src2 = gst.element_factory_make("gnlfilesource")

         comp.add(src1)
         src1.set_property("location", "/test1.mp4")
         src1.set_property("start",          0 * gst.SECOND)
         src1.set_property("duration",       5 * gst.SECOND)
         src1.set_property("media-start",    0 * gst.SECOND)
         src1.set_property("media-duration", 5 * gst.SECOND)
         src1.set_property("priority",       1)

         comp.add(src2)
         src2.set_property("location", "/test2.mp4")
         src2.set_property("start",          2 * gst.SECOND)
         src2.set_property("duration",       5 * gst.SECOND)
         src2.set_property("media-start",    0 * gst.SECOND)
         src2.set_property("media-duration", 5 * gst.SECOND)
         src2.set_property("priority",       2)

         op = gst.element_factory_make("gnloperation")
         tran = gst.element_factory_make("smpte")
         tran.set_property("type", 234)
         tran.set_property("duration", 3 * gst.SECOND)
         op.add(tran)
         op.set_property("start",          2 * gst.SECOND)
         op.set_property("duration",       3 * gst.SECOND)
         op.set_property("media-start",    0 * gst.SECOND)
         op.set_property("media-duration", 3 * gst.SECOND)
         op.set_property("priority",       0)
         comp.add(op)

I can get the smpte transition to work correctly on these two streams 
when not using the gnonlin elements, but that is not very interesting as 
I have to run the two streams in parallel.

Any other ideas?

Lane


> On Jan 4, 2011, at 12:01 PM, Lane Brooks<lane at brooks.nu>  wrote:
>
>> On 01/04/2011 05:39 AM, Edward Hervey wrote:
>>> On Mon, 2011-01-03 at 23:23 -0700, Lane Brooks wrote:
>>>> I have a gnlcomposition containing two video sources. I would like to
>>>> apply a smpte transition from one source to the next.
>>>>
>>>> I have tried overlapping the two gnlsources by 3 seconds. I then put a
>>>> 'smpte' element in a 'gnloperation' and add the 'gnloperation' to the
>>>> 'gnlcompostion'. The addition of the gnloperation doesn't seem to do
>>>> anything. The resulting video is the same regardless of whether I add
>>>> the gnloperation or not. The result is always that the second video
>>>> takes over during the period of overlap. Here is code I have (in python):
>>>>
>>>>           comp = gst.element_factory_make("gnlcomposition")
>>>>           src1 = gst.element_factory_make("gnlfilesource")
>>>>           src2 = gst.element_factory_make("gnlfilesource")
>>>>
>>>>           comp.add(src1)
>>>>           src1.set_property("location", "/test1.mp4")
>>>>           src1.set_property("start",          0 * gst.SECOND)
>>>>           src1.set_property("duration",       5 * gst.SECOND)
>>>>           src1.set_property("media-start",    0 * gst.SECOND)
>>>>           src1.set_property("media-duration", 5 * gst.SECOND)
>>>>
>>>>           comp.add(src2)
>>>>           src2.set_property("location", "/test2.mp4")
>>>>           src2.set_property("start",          2 * gst.SECOND)
>>>>           src2.set_property("duration",       5 * gst.SECOND)
>>>>           src2.set_property("media-start",    0 * gst.SECOND)
>>>>           src2.set_property("media-duration", 5 * gst.SECOND)
>>>>
>>>>           op = gst.element_factory_make("gnloperation")
>>>>           tran = gst.element_factory_make("smpte")
>>>>           tran.set_property("type", 234)
>>>>           tran.set_property("duration", 3 * gst.SECOND)
>>>>           op.add(tran)
>>>
>>>    Set the [media-]{start|duration} propertie son op also
>>
>> I had already tried this as well.
>>
>>          op.set_property("start",          2 * gst.SECOND)
>>          op.set_property("duration",       3 * gst.SECOND)
>>          op.set_property("media-start",    0 * gst.SECOND)
>>          op.set_property("media-duration", 3 * gst.SECOND)
>>
>> I am not sure what I should put the media-start at, but I have tried
>> both 0 and 2 and neither works. Any other ideas?
>>
>>
>>>
>>>>           comp.add(op)
>>>>
>>>> Anyone know if using an smpte transition is possible, and if so, what I
>>>> am doing wrong?
>>>>
>>>> Thanks,
>>>> Lane





More information about the gstreamer-devel mailing list