This commit is contained in:
Akkariin Meiko
2022-03-12 03:16:09 +08:00
Unverified
parent 12b76e0c7a
commit 27c4ec74a1
10075 changed files with 5122287 additions and 1 deletions
@@ -0,0 +1,142 @@
# GStreamer
# Copyright (C) 2015 Mathieu Duponchelle <mathieu.duponchelle@opencreed.com>
# Copyright (C) 2021 Stéphane Cerveau <scerveau@collabora.com>
#
# bash/zsh completion support for gst-validate
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301, USA.
_GST_HELPERDIR="${BASH_SOURCE[0]%/*}/../helpers"
if [[ ! -f $_GST_HELPERDIR/gst ]]; then
_GST_HELPERDIR="$(pkg-config --variable=bashhelpersdir gstreamer-1.0)"
else
_GST_HELPERDIR=`cd "$_GST_HELPERDIR"; pwd`
fi
# Common definitions
. "$_GST_HELPERDIR"/gst
_gst_validate_all_arguments ()
{
_gst_all_arguments gst-validate-1.0
}
_gst_complete_compatible_elements ()
{
COMPREPLY=( $(compgen -W "$($_GST_HELPER --compatible-with $previous_element)" -- $cur) )
}
_gst_complete_all_elements ()
{
COMPREPLY=( $(compgen -W "$($_GST_HELPER -l)" -- $cur) )
}
_gst_complete_element_properties ()
{
COMPREPLY=( $(compgen -W "$($_GST_HELPER --element-properties $previous_element)" -- $cur) )
}
_gstvalidate___exclude_ () { _gst_mandatory_argument gst-validate-1.0; }
_gst_validate_main ()
{
local i=1 command function_exists previous_element have_previous_element=0 completion_func
while [[ $i -ne $COMP_CWORD ]];
do
local var
var="${COMP_WORDS[i]}"
if [[ "$var" == "-"* ]]
then
command="$var"
fi
i=$(($i+1))
done
i=1
while [[ $i -ne $COMP_CWORD ]];
do
local var
var="${COMP_WORDS[i]}"
if [[ "$var" == "-"* ]]
then
i=$(($i+1))
continue
fi
$(gst-inspect-1.0 --exists $var)
if [ $? -eq 0 ]
then
previous_element="$var"
have_previous_element=1
fi
i=$(($i+1))
done
if [[ "$command" == "--gst"* ]]; then
completion_func="_${command//-/_}"
else
completion_func="_gstlaunch_${command//-/_}"
fi
# Seems like bash doesn't like "exclude" in function names
if [[ "$completion_func" == "_gstlaunch___exclude" ]]
then
completion_func="_gstvalidate___exclude_"
fi
declare -f $completion_func >/dev/null 2>&1
function_exists=$?
if [[ "$cur" == "-"* ]]; then
_gst_validate_all_arguments
elif [ $function_exists -eq 0 ]
then
$completion_func
elif [ $have_previous_element -ne 0 ] && [[ "$prev" == "!" ]]
then
_gst_complete_compatible_elements
elif [ $have_previous_element -ne 0 ]
then
_gst_complete_element_properties
else
_gst_complete_all_elements
fi
}
_gst_validate_func_wrap ()
{
local cur prev
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
$1
}
# Setup completion for certain functions defined above by setting common
# variables and workarounds.
# This is NOT a public function; use at your own risk.
_gst_validate_complete ()
{
local wrapper="__launch_wrap${2}"
eval "$wrapper () { _gst_validate_func_wrap $2 ; }"
complete -o bashdefault -o default -o nospace -F $wrapper $1 2>/dev/null \
|| complete -o default -o nospace -F $wrapper $1
}
_gst_validate_complete gst-validate-1.0 _gst_validate_main
@@ -0,0 +1,241 @@
### This file contains either validate specific suppressions or bugs that we
### can't easily address because they are lower in the stack.
### All the other suppressions should be added ton gstreamer/tests/check/gstreamer.supp
### Each set of suppression rules should be prefixed by either:
### - FIXED: if the bug/leak has been fixed upstream but we keep the rule
### because the fix may not be deployed yet (because it's lower in the
### stack and not in gst itself).
### - PENDING: if the bug/leak hasn't been fixed yet. In this case, please
### add an url to the bug report.
# PENDING: https://bugs.freedesktop.org/show_bug.cgi?id=90073
{
Leak in mesa fixed with http://lists.freedesktop.org/archives/mesa-dev/2015-April/082101.html
Memcheck:Leak
fun:malloc
fun:read_packet
fun:_xcb_in_read
fun:_xcb_conn_wait
fun:wait_for_reply
fun:xcb_wait_for_reply
fun:dri3_open
fun:dri3_create_screen
fun:AllocAndFetchScreenConfigs
fun:__glXInitialize
fun:glXQueryVersion
}
{
Leak in mesa fixed with http://lists.freedesktop.org/archives/mesa-dev/2015-April/082100.html
Memcheck:Leak
...
fun:get_render_node_from_id_path_tag
fun:loader_get_user_preferred_fd
fun:dri3_create_screen
fun:AllocAndFetchScreenConfigs
fun:__glXInitialize
fun:glXQueryVersion
}
# FIXED
{
Fixed in pixman master
Memcheck:Leak
fun:memalign
fun:allocate_and_init
fun:tls_get_addr_tail
}
# PENDING: https://bugzilla.gnome.org/show_bug.cgi?id=748417
{
Ignore all the invalid memory errors from libvpx
Memcheck:Cond
obj:/usr/lib64/libvpx.so*
}
{
Ignore all the invalid memory errors from libvpx
Memcheck:Value8
obj:/usr/lib64/libvpx.so*
}
# PENDING: https://bugzilla.gnome.org/show_bug.cgi?id=747110
{
https://bugzilla.gnome.org/show_bug.cgi?id=747110
Memcheck:Addr4
...
fun:aac_decode_frame_int
fun:aac_decode_frame
}
# PENDING: https://bugzilla.gnome.org/show_bug.cgi?id=752989
{
https://bugzilla.gnome.org/show_bug.cgi?id=752989
Memcheck:Value4
...
fun:aac_decode_frame_int
fun:aac_decode_frame
}
# PENDING: https://bugs.freedesktop.org/show_bug.cgi?id=90194
{
https://bugs.freedesktop.org/show_bug.cgi?id=90194
Memcheck:Param
ioctl(generic)
fun:ioctl
fun:drmIoctl
fun:drmPrimeHandleToFD
}
# PENDING: https://bugzilla.gnome.org/show_bug.cgi?id=749232
# x264 errors
{
<insert_a_suppression_name_here>
Memcheck:Cond
...
fun:x264_encoder_encode
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
...
fun:x264_encoder_encode
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
...
fun:x264_lookahead_thread
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
...
fun:x264_lookahead_thread
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
...
fun:x264_threadpool_thread
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
obj:/usr/lib64/libx264.so.*
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
obj:/usr/lib64/libx264.so.*
}
# PENDING: https://bugzilla.gnome.org/show_bug.cgi?id=749428
# Theora encoder
{
<insert_a_suppression_name_here>
Memcheck:Value8
...
fun:theora_enc_handle_frame
}
{
<insert_a_suppression_name_here>
Memcheck:Cond
...
fun:theora_enc_handle_frame
}
{
<insert_a_suppression_name_here>
Memcheck:Value8
fun:oc_enc_tokenize_ac
}
# FIXED
{
Fixed with mesa master
Memcheck:Cond
fun:lp_build_blend_factor_unswizzled
...
fun:gst_glimage_sink_on_draw
}
# FIXED
{
Fixed with mesa master
Memcheck:Leak
match-leak-kinds: definite
fun:calloc
...
fun:_do_convert_draw
fun:_do_convert_one_view
}
# FIXED
{
Fixed with mesa master
Memcheck:Leak
match-leak-kinds: definite
fun:malloc
...
fun:gst_gl_shader_compile
}
# FIXED
{
Fixed with mesa master
Memcheck:Leak
match-leak-kinds: definite
fun:calloc
...
fun:_draw_checker_background
fun:_draw_background
fun:gst_gl_video_mixer_callback
}
{
#https://bugs.freedesktop.org/show_bug.cgi?id=8215
#https://bugs.freedesktop.org/show_bug.cgi?id=8428
#FcPattern uses 'intptr_t elts_offset' instead of 'FcPatternEltPtr elts',
#which confuses valgrind.
font_config_bug_2
Memcheck:Leak
fun:*alloc
...
fun:Fc*Add*
}
{
#Same root cause as font_config_bug_2.
#The 'leak' here is a copy of rule values, as opposed to new values.
font_config_bug_3
Memcheck:Leak
fun:*alloc
...
fun:FcConfigValues
}
{
#Same root cause as font_config_bug_2.
#The 'leak' is copies of font or pattern values into returned pattern values.
font_config_bug_4
Memcheck:Leak
fun:*alloc
...
fun:FcValue*
fun:FcFontRenderPrepare
}
{
font_config_bug_6
Memcheck:Leak
fun:*alloc
...
obj:*/libfontconfig.so.*
}
@@ -0,0 +1 @@
subdir('scenarios')
@@ -0,0 +1,5 @@
description, duration=15.0
set-restriction, playback-time=5.0, restriction-caps="video/x-raw,framerate=(fraction)5/1"
set-restriction, playback-time=10.0, restriction-caps="video/x-raw,framerate=(fraction)30/1"
eos, playback-time=15.0
stop, playback-time=15.0
@@ -0,0 +1,7 @@
description, duration=25.0
set-restriction, playback-time=5.0, restriction-caps="video/x-raw,framerate=(fraction)5/1"
set-restriction, playback-time=10.0, restriction-caps="video/x-raw,height=20,width=20,framerate=(fraction)5/1"
set-restriction, playback-time=15.0, restriction-caps="video/x-raw,height=20,width=20,framerate=(fraction)30/1"
set-restriction, playback-time=20.0, restriction-caps="video/x-raw,height=720,width=1280,framerate=(fraction)30/1"
eos, playback-time=25.0
stop, playback-time=25.0
@@ -0,0 +1,5 @@
description, duration=15.0
set-restriction, playback-time=5.0, restriction-caps="video/x-raw,height=480,width=854"
set-restriction, playback-time=10.0, restriction-caps="video/x-raw,height=720,width=1280"
eos, playback-time=15.0
stop, playback-time=15.0
@@ -0,0 +1,14 @@
description, duration=55.0, min-media-duration=470.0, seek=true, reverse-playback=true
include,location=includes/default-seek-flags.scenario
seek, name=backward-seek, playback-time=0.0, rate=-1.0, start=0.0, stop=310.0, flags="$(default_flags)"
seek, name=forward-seek, playback-time=305.0, rate=1.0, start=305.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time=310.0, rate=2.0, start=310.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=320.0, rate=-2.0, start=0.0, stop=320.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time=310.0, rate=4.0, start=310.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=330.0, rate=-4.0, start=0.0, stop=330.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time=310.0, rate=8.0, start=310.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=350.0, rate=-8.0, start=0.0, stop=350.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time=310.0, rate=16.0, start=310.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=390.0, rate=-16.0, start=0.0, stop=390.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time=310.0, rate=32.0, start=310.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=470.0, rate=-32.0, start=310.0, stop=470.0, flags="$(default_flags)"
@@ -0,0 +1,4 @@
description, duration=20.0
emit-signal, target-element-name=camerabin0, signal-name=start-capture, playback-time=10.0
eos, playback-time=20.0
@@ -0,0 +1,8 @@
description, duration=0, summary="Set state to NULL->PLAYING->NULL 20 times", need-clock-sync=true, min-media-duration=1.0, live_content_compatible=True, handles-states=true, ignore-eos=true
foreach, i=[0, 40],
actions = {
"set-state, state=playing",
"set-state, state=null",
}
stop;
@@ -0,0 +1,6 @@
description, summary="Disable subtitle track while pipeline is PAUSED", min-subtitle-track=2, duration=5.0, handles-states=true, needs_preroll=true
pause;
switch-track, name="Disable subtitle", type=text, disable=true
wait, duration=0.5
play;
stop, playback-time=2.0
@@ -0,0 +1,9 @@
description, duration=30.0, minfo-media-duration=310.0, seek=true, reverse-playback=true, need-clock-sync=true, min-media-duration=310.0, ignore-eos=true
include,location=includes/default-seek-flags.scenario
seek, name=Fast-backward-seek, playback-time=0.0, rate=-2.0, start=0.0, stop=310.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=300.0, rate=-4.0, start=0.0, stop=300.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=280.0, rate=-8.0, start=0.0, stop=280.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=240.0, rate=-16.0, start=0.0, stop=240.0, flags="$(default_flags)"
seek, name=Fast-backward-seek, playback-time=160.0, rate=-32.0, start=0.0, stop=160.0, flags="$(default_flags)"
wait, message-type=eos
stop
@@ -0,0 +1,8 @@
description, duration=25.0, seek=true, need-clock-sync=true, min-media-duration=5.0, ignore-eos=true
include,location=includes/default-seek-flags.scenario
seek, name=Fast-forward-seek, playback-time=0.0, rate=2.0, start=0.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time="min(10.0, $(duration) * 0.0625)", rate=4.0, start=0.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time="min(20.0, $(duration) * 0.125)", rate=8.0, start=0.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time="min(40.0, $(duration) * 0.25)", rate=16.0, start=0.0, flags="$(default_flags)"
seek, name=Fast-forward-seek, playback-time="min(80.0, $(duration) * 0.50)", rate=32.0, start=0.0, flags="$(default_flags)"
stop, playback-time="min($(duration) - 0.3, 160.0)", on-message="eos"
@@ -0,0 +1,4 @@
description, duration=2.0
video-request-key-unit, playback-time=1.0, direction=upstream, running_time=-1.0, all-header=true, count=1
eos, playback-time=2.0
stop, playback-time=2.0
@@ -0,0 +1 @@
set-property, target-element-factory-name="rtspsrc", property-name=default-rtsp-version, property-value=(string)"2-0"
@@ -0,0 +1,9 @@
# Rewinds a live source completely
# The goal is to check for proper EOS handling when going back to the
# beginning of the live cache
description, seek=true, live_content_required=true, duration=14.0
# Wait for 5s (can't use playback-time since we don't know the position(live))
wait, duration=5.0
# Seek back all the way as fast as possible (from the end, i.e. 'now')
seek, name=End-seek, rate=-16.0, stop=0.0, stop_type=end, start=0.0, start_type=set, flags=flush+trickmode-key-units+trickmode-no-audio
#eos
@@ -0,0 +1,2 @@
set-vars,\
default_flags=accurate+flush
@@ -0,0 +1,43 @@
_scenarios = ['simple_seeks.scenario',
'seek_forward.scenario',
'seek_backward.scenario',
'seek_forward_backward.scenario',
'reverse_playback.scenario',
'fast_forward.scenario',
'fast_backward.scenario',
'alternate_fast_backward_forward.scenario',
'pause_resume.scenario',
'scrub_forward_seeking.scenario',
'scrub_backward_seeking.scenario',
'scrub_forward_seeking_full.scenario',
'scrub_backward_seeking_full.scenario',
'adaptive_video_size.scenario',
'adaptive_video_framerate.scenario',
'adaptive_video_framerate_size.scenario',
'force_key_unit.scenario',
'seek_with_stop.scenario',
'switch_audio_track_while_paused.scenario',
'switch_subtitle_track.scenario',
'switch_subtitle_track_while_paused.scenario',
'disable_subtitle_track_while_paused.scenario',
'play_15s.scenario',
'play_5s.scenario',
'change_state_intensive.scenario',
'switch_audio_track.scenario',
'force_rtsp2.scenario',]
install_data(sources: _scenarios,
install_dir: get_option('datadir') + '/gstreamer-' +
apiversion + '/validate/scenarios')
install_subdir('includes',
install_dir: get_option('datadir') + '/gstreamer-' +
apiversion + '/validate/scenarios')
install_subdir('rtsp_overrides',
install_dir: get_option('datadir') + '/gstreamer-' +
apiversion + '/validate/scenarios')
env = environment()
env.prepend('GST_VALIDATE_SCENARIOS_PATH', meson.current_source_dir())
meson.add_devenv(env)
@@ -0,0 +1,6 @@
description, duration=14.0, min-media-duration=7.0
pause, name=First-pause, playback-time=1.0, duration=1.0
pause, name=Second-pause, playback-time=3.0, duration=5.0
pause, name=Third-pause, playback-time=5.0, duration=1.0
eos, name=Done-testing, playback-time=7.0
stop, playback-time=7.0
@@ -0,0 +1,3 @@
description, duration=15.0
eos, playback-time=15.0
stop, playback-time=15.0
@@ -0,0 +1,4 @@
description, duration=15.0, live_content_required=True
wait, duration=15.0
stop
@@ -0,0 +1,3 @@
description, duration=5.0
eos, playback-time=5.0
stop, playback-time=5.0
@@ -0,0 +1,3 @@
description, seek=true, reverse-playback=true
include,location=includes/default-seek-flags.scenario
seek, name=Reverse-seek, playback-time=0.0, rate=-1.0, start="max($(duration) - 15.0, 0.0)", stop="$(duration)", flags="$(default_flags)"
@@ -0,0 +1,2 @@
set-vars,\
default_flags=flush
@@ -0,0 +1,8 @@
description, seek=true, handles-states=true, needs_preroll=true
include,location=includes/default-seek-flags.scenario
pause, playback-time=0.0
seek, playback-time=0.0, start="$(duration) - 0.5", flags="$(default_flags)"
seek, playback-time=0.0, start=position-0.1, repeat="min(10, ($(duration) - 0.6))/0.1", flags="$(default_flags)"
play, playback-time=0.0
stop, playback-time=1.0
@@ -0,0 +1,8 @@
description, seek=true, handles-states=true, needs_preroll=true
include,location=includes/default-seek-flags.scenario
pause, playback-time=0.0
seek, playback-time=0.0, start="$(duration) - 0.5", flags="$(default_flags)"
seek, playback-time=0.0, start=position-0.1, repeat="($(duration) - 0.6)/0.1", flags="$(default_flags)"
play, playback-time=0.0
stop, playback-time=1.0
@@ -0,0 +1,6 @@
description, seek=true, handles-states=true, needs_preroll=true
include,location=includes/default-seek-flags.scenario
pause, playback-time=0.0
seek, playback-time=0.0, start=position+0.1, repeat="min(10, ($(duration) - 0.5) / 0.1)", flags="$(default_flags)"
play, playback-time=0.0
stop, playback-time=1.0
@@ -0,0 +1,6 @@
description, seek=true, handles-states=true, needs_preroll=true
include,location=includes/default-seek-flags.scenario
pause, playback-time=0.0
seek, playback-time=0.0, start=position+0.1, repeat="($(duration) - 0.5)/0.1", flags="$(default_flags)"
play, playback-time=0.0
stop, playback-time=1.0
@@ -0,0 +1,6 @@
description, seek=true, duration=30, need-clock-sync=true, ignore-eos=true
include,location=includes/default-seek-flags.scenario
seek, name=Backward-seek, playback-time="min(5.0, ($(duration) / 4))", rate=1.0, start=0.0, flags="$(default_flags)"
seek, name=Backward-seek, playback-time="min(10.0, 2*($(duration) / 4))", rate=1.0, start="min(5.0, $(duration) / 4)", flags="$(default_flags)"
seek, name=Backward-seek, playback-time="min(15.0, 3*($(duration) / 4))", rate=1.0, start="min(10.0, 2*($(duration) / 4))", flags="$(default_flags)"
stop, playback-time="min(15.0, 3*($(duration) / 4))"
@@ -0,0 +1,17 @@
#FIXME : Rename to seek_end_live
description, seek=true, live_content_required=true, duration=14.0
# Wait for 5s (can't use playback-time since we don't know the position(live))
wait, duration=5.0
# Seek back 1min (from the end, i.e. 'now')
seek, name=End-seek, rate=1.0, start=-60.0, start_type=end, flags=flush
wait, duration=5.0
# go back to live !
seek, name=End-seek, rate=1.0, start=0.0, start_type=end, flags=flush
wait, duration=5.0
# Now seek backwards from the end
seek, name=End-seek, rate=-1.0, start=0.0, start_type=none, stop=0.0, stop_type=end, flags=flush
wait, duration=5.0
# Try a simple seek (without setting the stop)
seek, name=End-seek, rate=1.0, start_type=end, start=0.0, flags=flush
wait, duration=5.0
stop
@@ -0,0 +1,6 @@
description, seek=true, duration=20, need-clock-sync=true, ignore-eos=true
include,location=includes/default-seek-flags.scenario
seek, name=First-forward-seek, playback-time="min(5.0, ($(duration)/8))", start="min(10, 2*($(duration)/8))", flags="$(default_flags)"
seek, name=Second-forward-seek, playback-time="min(15.0, 3*($(duration)/8))", start="min(20, 4*($(duration)/8))", flags="$(default_flags)"
seek, name=Third-forward-seek, playback-time="min(25, 5*($(duration)/8))", start="min(30.0, 6*($(duration)/8))", flags="$(default_flags)"
stop, playback-time="min($(duration) - 1, 35)", on-message=eos
@@ -0,0 +1,10 @@
description, seek=true, duration=40, min-media-duration=45.0
include,location=includes/default-seek-flags.scenario
seek, name=Forward-seek, playback-time=0.0, rate=1.0, start=5.0, flags="$(default_flags)"
seek, name=Backward-seek, playback-time=10.0, rate=1.0, start=0.0, flags="$(default_flags)"
seek, name=Backward-seek, playback-time=5.0, rate=1.0, start=25.0, stop=-1, flags="$(default_flags)"
seek, name=Backward-seek, playback-time=30.0, rate=1.0, start=0.0, flags="$(default_flags)"
seek, name=Forward-seek, playback-time=5.0, rate=1.0, start=15.0, flags="$(default_flags)"
seek, name=Forward-seek, playback-time=20.0, rate=1.0, start=35.0, flags="$(default_flags)"
seek, name=Backward-seek, playback-time=40.0, rate=1.0, start=25.0, flags="$(default_flags)"
seek, name=Last-backward-seek, playback-time=30.0, rate=1.0, start=5.0, stop=10.0, flags="$(default_flags)"
@@ -0,0 +1,3 @@
description, seek=true, duration=5.0, need_clock_sync=true, min-media-duration=2
include,location=includes/default-seek-flags.scenario
seek, playback-time=1.0, start=0.0, stop="min(5.0, duration-1.0)", flags="$(default_flags)"
@@ -0,0 +1,5 @@
description, seek=true, duration=5.0
include,location=includes/default-seek-flags.scenario
seek, playback-time=1.0, rate=1.0, start=2.0, flags="$(default_flags)"
seek, playback-time=3.0, rate=1.0, start=0.0, flags="$(default_flags)"
seek, playback-time=1.0, rate=1.0, start=2.0, stop=3.0, flags="$(default_flags)"
@@ -0,0 +1,3 @@
description, summary="Change audio track at 5 second to the second audio track", min-audio-track=2, duration=10.0, min-media-duration=5.1
switch-track, name=Next-audio-track, playback-time=5.0, type=audio, index=(string)+1
stop, playback-time=10.0
@@ -0,0 +1,11 @@
description, summary="Change audio track while pipeline is paused", min-audio-track=2, duration=6.0, need-clock-sync=true, needs_preroll=true
pause, playback-time=1.0;
# Wait so that humans can see the pipeline is paused
wait, duration=0.5
switch-track, name=Next-audio-track, type=audio, index=(string)+1
# Wait so that humans can see the pipeline is paused
wait, duration=0.5
play;
stop, playback-time=5.0
@@ -0,0 +1 @@
description, summary="Change subtitle track at 1 second while paused", duration=5.0, needs-ext-file="subtitles/%s.1.srt:subtitles/%s.1.srt"
@@ -0,0 +1,3 @@
description, summary="Change subtitle track at 1 second while playing back", min-subtitle-track=2, duration=5.0, need-clock-sync=true
switch-track, playback-time=1.0, type=text, index=(string)+1
stop, playback-time=5.0
@@ -0,0 +1,7 @@
description, summary="Change subtitle track while pipeline is PAUSED", min-subtitle-track=2, duration=5.0, handles-states=true, need-clock-sync=true, needs_preroll=true
pause;
wait, duration=0.5
switch-track, type=text, index=(string)+1
wait, duration=0.5
play;
stop, playback-time=5.0
@@ -0,0 +1,9 @@
description, duration=10.0, seek=true, need-clock-sync=true, min-media-duration=8.0, min-video-track=1
seek, name=Fast-forward-seek, playback-time="min(5.0, duration*0.0625)", rate=2.0, start=0.0, flags=flush+trickmode-key-units
seek, name=Fast-forward-seek, playback-time="min(10.0, duration*0.0625)", rate=4.0, start=0.0, flags=flush+trickmode-key-units
seek, name=Fast-forward-seek, playback-time="min(20.0, duration*0.125)", rate=8.0, start=0.0, flags=flush+trickmode-key-units
seek, name=Fast-forward-seek, playback-time="min(40.0, duration*0.25)", rate=16.0, start=0.0, flags=flush+trickmode-key-units
seek, name=Fast-forward-seek, playback-time="min(80.0, duration*0.50)", rate=32.0, start=0.0, flags=flush+trickmode-key-units
# and go back to regular playback
seek, name=regular-playback, playback-time="min(160.0, duration*0.75)", rate=1.0, start=0.0, flags=flush
stop, playback-time="min(10.0, duration*0.0625)"
@@ -0,0 +1,3 @@
description, summary="Use the set seek type to seek at 5 seconds after 2 seconds", seek=true
include,location=includes/default-seek-flags.scenario
seek, playback-time=2.0, rate=1.0, start_type=set, start=5.0, stop_type=none, stop=0.0, flags="$(default_flags)"
@@ -0,0 +1,4 @@
description, summary="Use the set seek type to seek at 0 secs stop 10secs after 5 secs", seek=true
description, duration=15.0, seek=true
include,location=includes/default-seek-flags.scenario
seek, playback-time=5.0, rate=1.0, start_type=none, start=0.0, stop_type=set, stop=10.0, flags="$(default_flags)"
@@ -0,0 +1,2 @@
core, action=set-property, target-element-klass=Filter, property-name=qos, property-value=false
core, action=set-property, target-element-klass=Sink, property-name=max-lateness, property-value=-1, optional=true