Commit graph

786 commits

Author SHA1 Message Date
Thibault Saunier
35b6bfb7c8 validate:scenario: Properly check that remaining actions are not 'ending' ones
When checking that all action were executed, we need to make sure that
actions such as EOS or stop are not taken into account as we might have
shorter medias than the duration of the scenario, and that should not be
fatal.

+ Plug a leak on the way
2014-07-23 17:49:44 +02:00
Thiago Santos
3cf3e7a438 gst-validate-scenario: add emit-signal
emit-signal action allows to emit signals to elements in scenarios.
The implementation only accepts signals without arguments for now but
it can be extended to use parameters if needed in the future
2014-07-22 11:59:58 -03:00
Thiago Santos
fd7c13d446 gst-validate-scenario: the structure has the type
Get the GValue directly from the structure and do not assume everything
is stored as a string and use the GstStructure's GValue to set the property
to the instances
2014-07-21 22:41:28 -03:00
Arnaud Vrac
e1b3ec2ad7 validate: Fix build on some custom platforms
We need to explicitely pass GLIB_LIBS for GModule as it seems not to be included by
GST_ALL_LIBS and we need LIBM
2014-07-21 19:09:58 +02:00
Aurélien Zanelli
d1c261f5b1 validate: duplicate strings in gst_validate_issue_new()
Do this to avoid discarding 'const' qualifier when using it with
constant strings. Moreover it will avoid a g_free on constant string.

https://bugzilla.gnome.org/show_bug.cgi?id=733362
2014-07-18 16:28:58 +02:00
Thibault Saunier
d7d1445e67 validate: Add a set-debug-threshold scenario action
Allowing users to activate the debug only at the interesting time
2014-07-17 17:04:59 +02:00
Thibault Saunier
cd55381a5f validate: Add Gst debugging when using gst-validate printing feature
Giving usefull debugging informations in the GSt debug logs
2014-07-17 17:04:59 +02:00
Thibault Saunier
822c7eaa6e validate: Avoid segfault in the error path 2014-07-16 15:47:58 +02:00
Thibault Saunier
f8a37a1c80 validate:media-descriptor-writer: Handle medias with 1 single stream 2014-07-16 15:47:58 +02:00
Thibault Saunier
fa35a10779 validate: Check that after a seek in PAUSED position is perfect
In case of ACCURATE seeking, the position after a SEEK in PAUSED state
should be *exactly* the one requested by the user.
2014-07-16 15:47:58 +02:00
Thiago Santos
db21883c0c scenario: add set_property scenario action
Allows setting element's properties during a scenario. Very useful
for testing that elements behave correctly when changing properties
during playing state

https://bugzilla.gnome.org/show_bug.cgi?id=733070
2014-07-11 19:43:20 -03:00
Thibault Saunier
bed0f51d6c validate: Execute actions if we get seeked in ready state 2014-07-07 11:27:35 +02:00
Thibault Saunier
87ae465c77 validate: Let scenarios tell the apps about whether it handles states
The user only needs to add handles-states=true in the description line
of the scenario
2014-07-07 11:27:34 +02:00
Thibault Saunier
52e39a4fcb validate:scenario: Do not care about the position if we are not at least in PAUSED state
At that time the position query will be meaningless so we should just go to the next
action.
2014-07-07 11:27:34 +02:00
Thibault Saunier
1c2d31dd2f validate:media-check: Changes in tags detection are not fatal issues 2014-07-07 11:27:34 +02:00
Thibault Saunier
00719fb07e validate: Properly handle CLOCK_TIME_NONE position and duration values
In the value parser.
2014-07-07 11:27:34 +02:00
Thibault Saunier
f708156ff6 validate:scenario: Move the check about whether we are still seeking upper in the function
Avoiding to try to get position and do operations on a pipeline that is seeking
2014-07-07 11:27:34 +02:00
Vincent Penquerc'h
4dc3f5171e validate-scenario: only use valid position/duration
Position/duration query may fail, or yield unknown values (eg,
unknown duration for live streams). In these cases, we must ensure
we do not use those invalid values.

https://bugzilla.gnome.org/show_bug.cgi?id=715160
2014-07-07 11:27:34 +02:00
Thibault Saunier
150c5bc6b2 validate:scenario: We are not changing state if the set_state failed. 2014-07-07 11:27:34 +02:00
Thibault Saunier
b3a168ed73 validate:scenario: Add a debug category and add some debug 2014-07-07 11:27:34 +02:00
Thibault Saunier
a4d3971709 validate: media-descirptor: Add more infos about discoverer error 2014-07-07 11:27:34 +02:00
Sebastian Dröge
b6c439ee88 validate: Don't call gst_debug_log_valist() if debugging is disabled
And also stop leaking a string every time.
2014-06-28 12:33:45 +02:00
Thibault Saunier
e847d7061a validate: pad-monitor: Do not compare not fixed sinkpad caps fields
We are only able to check that the sink pad caps values are inside the src pad
value.
2014-06-16 16:43:02 +02:00
Thibault Saunier
93d9032712 scenario: Do not be so tolerant about seek drift 2014-06-16 08:56:30 +02:00
Edward Hervey
0693805e9c pad-monitor: Handle out-of-segment first buffer
If the initial buffer is before segment.start, we don't want to raise
the "first buffer doesn't have 0 running-time" issue.

Also add debug for tracking issues
2014-06-03 10:05:25 +02:00
Edward Hervey
ca44a11429 validate: Run gst-indent on all code
so whitespace. much indent. spacing !
2014-06-03 10:05:25 +02:00
Nicolas Dufresne
fea3893686 validate: Don't pass NULL to g_strsplit 2014-05-24 01:28:36 -04:00
Edward Hervey
ebde58f1d1 validate-utils: Fix unitialized variable
gst-validate-utils.c:413:7: error: variable 'v0' is used uninitialized whenever 'if' condition is true [-Werror,-Wsometimes-uninitialized]
  if (c == '!') {
      ^~~~~~~~
gst-validate-utils.c:424:10: note: uninitialized use occurs here
  return v0;
         ^~
gst-validate-utils.c:413:3: note: remove the 'if' if its condition is always false
  if (c == '!') {
  ^~~~~~~~~~~~~~~
gst-validate-utils.c:411:13: note: initialize the variable 'v0' to silence this warning
  gdouble v0;
            ^
             = 0.0
1
2014-05-22 16:13:31 +02:00
Thibault Saunier
1a2f4a3cd3 validate: Move overrides and preload libraries to dedicated folders
This way it is cleaner and it is simpler to handle the various compilation dependencies.
2014-05-21 12:00:26 +02:00
Thibault Saunier
9660a8bd3a validate: Properly use boolean in XML 2014-05-15 09:46:24 +02:00
Thibault Saunier
92d390bc5d validate: Improve perf when writing the XML file
+ Pass the file into gst-indent
2014-05-08 17:48:39 +02:00
Thibault Saunier
ac6e463009 scenario: Add a general action to set state 2014-05-07 09:51:19 +02:00
Thibault Saunier
7d55065277 validate:scenario: Pass into gst-indent 2014-05-07 09:46:28 +02:00
Thibault Saunier
cd8000994b validate: The wait mandatory field is duration 2014-05-07 09:15:34 +02:00
Thibault Saunier
0aff591b2f validate: Make sure mandatory fields are present when parsing scenarios 2014-05-07 09:11:12 +02:00
Mathieu Duponchelle
7d4abf31e7 scenarios: add a stateless property.
This property enables the user to have actions executed independently
of the state of the pipeline.

Conflicts:
	validate/gst/validate/gst-validate-scenario.c
2014-05-06 15:37:26 +02:00
Mathieu Duponchelle
1332e9fc4f scenario: make sure to not execute actions when changing state.
Conflicts:
	validate/gst/validate/gst-validate-scenario.c
2014-05-05 17:21:06 +02:00
Thibault Saunier
aceba228ce validate: Wait for the PAUSED state to be reached before executing actions 2014-05-02 20:05:28 +02:00
Thibault Saunier
fbcee57902 validate: Implement frame by frame writing in the media descriptor writer
+ Add an option to fully parse media files in the gst-validate-media-check tool
2014-05-02 18:30:23 +02:00
Thibault Saunier
ba38d09961 validate: Execute position right when the pipeline reaches PAUSED
We might go to PAUSED SYNC if nothing happens in the pipeline
2014-05-02 18:30:23 +02:00
Thibault Saunier
efb40d9778 validate: Do not execute action when buffering
While buffering we should no try to execute anything as we would not be
controlling properly the execution.

+ Activate scrub forward seeking for HTTP streams
2014-05-02 18:30:23 +02:00
Thibault Saunier
b37fafa1e6 validate: Plug a minor leak 2014-05-02 18:30:23 +02:00
Thibault Saunier
1ffb6b4e1c validate: Allow specifying scenarios to parse when lisiting them
It used to only handle the scenario present in proper paths, we
also need to handle special scenarios provided by users on the fly
2014-05-02 18:30:22 +02:00
Thibault Saunier
f165fb41d0 validate: Handle ERROR on the bus when monitoring the pipeline
This way the user get a  clear information in the report about the issue

+ sensibly cleanup code
2014-05-02 18:30:22 +02:00
Thibault Saunier
3a1db22188 validate: Do not g_strrstr with a NULL pointer as needle 2014-05-02 18:30:22 +02:00
Thibault Saunier
3402d5556a validate: Print more details when executing the switch_track action
+ Fix some issue in the memory freeing codepath of GstValidateAction
2014-05-02 18:30:22 +02:00
Thibault Saunier
93bd46dbc2 validate: Do not try to use a NULL iter 2014-05-02 18:30:22 +02:00
Thiago Santos
385d6d4ccd pad-monitor: check that no buffers are pushed after a pad is EOS
Make sure no resources are wasted after elements are done with the
current segment
2014-05-02 12:07:53 -03:00
Thibault Saunier
676602644c validate: Expose a seeking method so other actions types can seek
Other action types might need to seek and we GstValidateScenario need
to know about it, add a method others can use to do the seeking
2014-04-26 09:52:37 +02:00
Thibault Saunier
a3a132489a Revert "validate:launcher: Always put gst-validate result as stderr in reports"
This reverts commit 925ff7542b.

Actually jenkins never  truncates on failure stacktrace... we do not
want to set gst-validate as failure stacktrace in our results. That
commit was not usefull.
2014-04-26 09:16:26 +02:00
Thibault Saunier
925ff7542b validate:launcher: Always put gst-validate result as stderr in reports
This way jenkins will always keep the information in its database even
if the test passes
2014-04-26 08:11:20 +02:00
Thibault Saunier
4f920dc405 validate: Pass -scenario.c into gst-indent and fix some docs 2014-04-25 18:33:33 +02:00
Thibault Saunier
0c4216d005 validate: Add a "dot-pipeline" action 2014-04-25 18:27:30 +02:00
Thibault Saunier
eb4a70a263 validate: Return a boolean when parsing an enum string 2014-04-25 18:26:50 +02:00
Thibault Saunier
d280d0dbc9 validate: Add a media-descriptor parser and writer 2014-04-25 14:33:06 +02:00
Thibault Saunier
f6c6043317 validate: Minor printing cleanup 2014-04-25 14:33:06 +02:00
Thibault Saunier
2d7d03d2f7 validate: Add a 'stop' action to stop a pipeline
It uses the GST_MESSAGE_REQUEST state with the scenario as a source
so that application can stop running when they receive it on the bus.
2014-04-25 14:33:06 +02:00
Thibault Saunier
38eda37341 validate: Handle position printing at the monitor level
Instead of replicating that code all around
2014-04-23 11:27:44 +02:00
Thibault Saunier
810e432da2 validate: Add printing utilities
Allowing the user to print everyting in a file through the
GST_VALIDATE_FILE env variable
2014-04-23 11:16:32 +02:00
Thibault Saunier
cac53e9078 validate: Add an action to wait for a given amout of time
During that time we will just not execute any new action

+ Lower WARNING to DEBUG when no playbcak_time is provided for an
action, it should just be 0.
2014-04-23 09:37:22 +02:00
Thibault Saunier
21a4888ae7 validate: Check that for raw, buffers are strictly contained in segment
For encoded data we might need buffers that have timestamp <
segment.start to make sure that we have the keyframe, etc... but for raw
data, buffer end should strictly be inside the segment, be more strict
about that.
2014-04-22 16:57:21 +02:00
Thibault Saunier
8527d91737 validate: PAR is not a mandatory field
Also make it possible to check other not mandatory fields in the future
2014-04-22 16:57:21 +02:00
Thibault Saunier
279625a541 validate: Do not use GST_PTR_FORMAT when reporting
It will not work now that we have our own implementation of printf for that in Gst and
thus provide us with pretty useless infos
2014-04-22 16:57:21 +02:00
Thibault Saunier
ad25b4d160 validate: Handle g_log errors at the gst-validate level 2014-04-17 12:23:04 +02:00
Thibault Saunier
8899ad004c validate: Allow comments in scenario files
Comment are per line only and start with #
2014-04-17 11:23:27 +02:00
Thibault Saunier
6104ed184f validate: Avoid segfault when discovering fails
In that case the x->stream_info might not be set
2014-04-02 19:17:24 +02:00
Thibault Saunier
7e1c83b5b9 validate: Do not build LD_PRELOAD related code on windows
And do not forget to link against gst-pbutils
2014-03-28 12:17:25 +01:00
Thibault Saunier
083d303d69 validate: Use GModule to 'dlopen' ovverrides
We want gst-validate to be cross platform so use cross platform tools
2014-03-28 10:40:19 +01:00
Thibault Saunier
ff4879c749 validate: Do not query pad caps to check if caps are properly fowarded
Query caps will actually get the caps from downstream and those caps
might be different in case there is a Filter in between. What we want is
to check that the caps set on the internally linked pads are correct.
2014-03-26 10:57:04 +01:00
Edward Hervey
34a5946e6b validate-scenario: Handle non-set env variable
Nothing guarantees it's present/set
2014-03-19 17:02:03 +01:00
Thibault Saunier
50d3d08ab5 validate:scenario: Do not be strict about position after not accurate seek 2014-03-12 15:23:33 +01:00
Thibault Saunier
fbf787889f validate:scenario: Cleanup output and pass into gst-indent 2014-03-12 14:24:02 +01:00
Thibault Saunier
1bc0a687ee validate:scenario: Cleanup output of --list-scenarios 2014-03-12 12:21:38 +01:00
Thibault Saunier
e355a17f71 validate: scenario: Load scenario if the name is actually a path to a file 2014-03-12 12:04:52 +01:00
Thibault Saunier
33aae792f6 validate:scenario: Pass into gst-indent 2014-02-19 14:34:08 +01:00
Thibault Saunier
5e0e092112 validate: Add actions to the actions list only when they are fully parsed
Otherwize in some corner cases they can be executed before they are actually parsed
2014-02-19 14:32:47 +01:00
Thibault Saunier
2f44d15e0b validate: Ignore EOS actions that can not be executed 2014-02-19 14:32:47 +01:00
Thibault Saunier
68cbc15f35 validate: Handle various paths in GST_VALIDATE_SCENARIOS_PATH 2014-02-18 21:07:31 +01:00
Thibault Saunier
63f8034bec validate:scenario: Make GstValidateAction a GstMiniObject 2014-02-18 21:07:31 +01:00
Thibault Saunier
04029cb065 validate: Move enums and flags deserialization from scenario to utilities
This way it can be reused.
2014-02-18 21:07:31 +01:00
Thibault Saunier
5cfafb4910 validate:scenario: Make the pipeline puiblic
This way people can access it from outside the main action implementation.
2014-02-18 21:07:31 +01:00
Thibault Saunier
4467b27b9f validate: Add a way to save details about avalaible scenarios in a file 2014-02-18 21:07:31 +01:00
Thibault Saunier
9e66ac00f6 validate: Add a way to add a "description" to scenario files
Print details about the descriptions when listing scenario in a KeyFile
format

The description can contain any information about the scenario such as its duration before
EOS, how long the pipeline needs to be so the scenario can be applied...etc
2014-02-18 21:07:31 +01:00
Thibault Saunier
6ab7f17386 validate:scenario: Handle backslashes in scenario files 2014-02-18 21:07:31 +01:00
Thibault Saunier
a406ebb4c2 validate:tools: Add a 'discover-only' option to media-check 2014-02-18 21:07:30 +01:00
Thibault Saunier
a88d54aec2 validate: Plug a leak in validate-reporter 2014-02-06 12:02:59 +01:00
Thibault Saunier
7b236c96bf validate:tools: Do not forget to give a ref for reporter's reports
Also enhance a bit report 'wording'
2014-02-06 12:02:59 +01:00
Thibault Saunier
5d172e159e scenario: Enhance explanation about seek execution failure 2014-02-06 12:02:59 +01:00
Thibault Saunier
ac92d5b428 scenario: Do not remove GSource if it has never been set 2014-02-06 12:02:59 +01:00
Thibault Saunier
9eb665dddf validate: Properly handle images in the media-info helper
In the case of images we should not check reverse playback, fast
forward etc...

We also should keep the information
2014-02-06 12:02:58 +01:00
Thibault Saunier
7d0a6efaff validate: tools: media-info: Fixes in the media file descriptor parsing code
We used to always fail when the user was passing something not NULL as err
2014-02-06 12:02:57 +01:00
Reynaldo H. Verdejo Pinochet
8c39dbfaa8 validate: fix parallel build
Without this, parallel building with > 2 jobs fails.
Also, LDFLAGS should not contain -l flags but _LIBADD.
2014-01-30 17:26:16 -03:00
Reynaldo H. Verdejo Pinochet
463ca62ab2 validate: drop unneeded stdio include 2014-01-30 15:47:15 -03:00
Lubosz Sarnecki
e8db3c67b9 validate: fix installation
* install headers
* fix libname in pk file
2013-11-25 16:56:11 -03:00
Vincent Penquerc'h
70931813ad validate-scenarios: list scenarios in GST_VALIDATE_SCENARIOS_PATH
GST_VALIDATE_SCENARIOS_PATH was used only for loading scenarios,
so any in that path would not be listed by -l.

Change-Id: If3cb94867ef3876933bda02477675c8ccf67baaf
2013-11-25 16:56:11 -03:00
Thibault Saunier
a8ae32df6d pad-monitor: Do not concider TIME_NONE as 0 for serialized events
In case we have serialized events right after a buffer that had no
timestamp set we concider that last timestamp was 0, but we can
actually not concider the timestamp at all in that case as it is
only "meaningless value".
2013-11-25 16:55:25 -03:00
Thibault Saunier
1c3340ecbb tools: Simplify the setting of action scenario vs config scenario
This make it easier for user to understand the difference between
the two concepts and avoids confusion.

Change-Id: Ib42913722c93a1e7e3c8b156173c458230946592

Conflicts:
	validate/tools/gst-validate-transcoding.c
	validate/tools/gst-validate.c
2013-11-25 16:55:25 -03:00
Thibault Saunier
71758d49da scenario: Add a "set-feature-rank" config action
This action can be used to change the rank of a particular element,
so you can force a particular element to be used when using
autoplugging elements (such as decodebin, encodebin, and friends)
2013-11-25 16:55:25 -03:00
Thibault Saunier
77bba657d1 scenario: Add support for "config" actions, actions executed at parse time
This type of actions is used to change some parametter on GStreamer
core and it plugins, it can be fore example, to change the rank of a
plugin or things like that.
2013-11-25 16:55:25 -03:00
Thibault Saunier
123ecb57c1 media-info: Do not use GST_PTR_FORMAT with g_print
Fix compilation
2013-10-14 11:20:03 -03:00
Thibault Saunier
182f4e9a41 report: Set refcount=1 when creating a report
As it should start with 1 reference, not 0
2013-10-14 11:05:58 -03:00
Thibault Saunier
f8b4235e33 scenario: Add an action that checks the "force-key-unit" event execution 2013-10-09 14:24:42 -03:00
Thibault Saunier
10d1c4560e scenario: Make the get_clocktime helper a public method
So it can be reused outside of the core code
2013-10-09 09:33:06 -03:00
Thibault Saunier
4d59a2720e pad-monitor: Do not try to compare 2 not fixed values
There is no reliable way of checking those values in the case they
are not fixed, let's just make sure we get fixed values before
executing the check
2013-10-07 19:47:15 -03:00
Thibault Saunier
b20166ff23 scenario: Pass through gst-indent 2013-10-05 13:36:05 -03:00
Thibault Saunier
820ebe3b26 scenario: Use g_error instead of exit (0) 2013-10-05 13:36:05 -03:00
Thibault Saunier
045cc47dcc scenario: Factor out function to get GstClockTime out of a structure 2013-10-05 13:36:04 -03:00
Thibault Saunier
4cea878563 scenario: Use a weak ref to the pipeline
We are listening to it, we should not be owning a ref to it.
2013-10-05 13:36:04 -03:00
Thibault Saunier
7e1249f089 runner: Use "18" as exit code in case of error
It is a random number, but it will in most cases give people a hint
that gst-validate reported a critical issue, and thus set the return
code, only by looking at it

Also make use of gst_validate_runner_print() in
gst-validate-transcoding.c as we were copy pasting that method there.
2013-10-05 13:36:04 -03:00
Thibault Saunier
ae641d0353 scenario: Handle formulas in playback_time
And port seek forward/backward scenarios to relative seeking
2013-10-05 13:36:04 -03:00
Thibault Saunier
e24645b133 scenario: Check that all action were properly executed 2013-10-05 13:36:04 -03:00
Thibault Saunier
c9ee576e8e scenario: Add the notion of repeated actions 2013-10-05 13:36:03 -03:00
Thibault Saunier
a89f32725b utils: Add util functions to parse simple mathematical expressions
And make use of it to set the start of a seek
2013-10-05 13:19:14 -03:00
Thibault Saunier
75356d4bbe scenario: Error out and exit when we fail loading a scenario 2013-10-05 13:19:14 -03:00
Olivier Crête
75e1f5040a gst-validate-scenario: Only typedef the struct once
Some gcc versions don't like the typedef being done twice
2013-10-03 18:14:29 -04:00
Vincent Penquerc'h
bb124f787d scenario: do not set default seek flags
Seeks will be done with no particular flags, unless specified
in the scenario.
2013-10-03 05:32:54 -04:00
Thibault Saunier
c469f9b2a4 pad-monitor: Check if channel-mask is present only if channels > 2
As it is not a mandatory field otherwize

https://bugzilla.gnome.org/show_bug.cgi?id=708499
2013-09-21 00:34:05 +02:00
Thibault Saunier
42857faaae scenario: Add GST_VALIDATE_SCENARIOS_PATH environment variable
So you can specify the PATHS where to look for scenario files
2013-09-21 00:32:52 +02:00
Thiago Santos
e3e463c0cc validate-scenario: track position query results closer
Always keep probing the pipeline for the current position and compare
with the latest requested seek segment to detect if the seek boundaries
are being respected
2013-09-20 15:18:35 -03:00
Thibault Saunier
b4a711c568 scenario: Make it possible to define mandatory fields
And give a descrpition for actions
2013-09-17 18:38:31 -03:00
Vincent Penquerc'h
ccc3f8d696 scenario: add a track switch command, and an audio track switch test
The "switch-track" command can be used to switch tracks. The "type"
argument selects which track type to change (can be "audio", "video",
or "text"). The "index" argument selects which track of this type
to use: it can be either a number, which will be the Nth track of
the given type, or a number with a "+" or "-" prefix, which means
a relative change (eg, "+1" means "next track", "-1" means "previous
track").

Conflicts:
	validate/gst/validate/gst-validate-scenario.c
2013-09-17 18:38:31 -03:00
Thibault Saunier
f0ef3803dd scenario: Make it possible to register action parsing funcs before init 2013-09-16 18:49:31 -03:00
Thibault Saunier
8a9e9a7fd7 data: Port remaning scenario files to new format
And add support to user declared timestamps -1.0 as GST_CLOCK_TIME_NONE
2013-09-13 12:03:44 -03:00
Thibault Saunier
ea1f0a64f2 scenario: Rework scenarios to be: 1- Simpler to write them, 2- extendible
Make the scenario files a list of GstStructure-s as strings
2013-09-09 19:31:21 -03:00
Thibault Saunier
711946879e bin-monitor: Add a way to specify pipelines on which to set scenarios
When used with LD_PRELOAD,  the application might use various pipelines
for several different thing, we need to make it possible to spcify a
specific pipeline (or set of pipelines) on which to run the scenario.

The format is in the form of:
            scenario_name:pipelinename_pattern*
2013-09-09 19:07:32 -03:00
Thibault Saunier
5cea134655 scenario: Try to run scenarios in development first 2013-09-09 19:01:44 -03:00
Edward Hervey
746b6f41b2 tools: Update .gitignore for tools move 2013-09-09 15:36:15 +02:00
Thiago Santos
24b6284d17 pad-monitor: avoid false positives when a seek fails
Remove the expected seqnums for events when a seek fails, preventing
false positives at the final report
2013-09-05 16:15:40 -03:00
Vincent Penquerc'h
fefc5ffb41 monitor-preload: schedule a report printout at exit
Conflicts:
	tools/gst-validate.c
2013-09-05 13:40:41 -03:00
Thiago Santos
789ea6e9d5 pad-monitor: fix typo on macro usage
Pass the correct variable to macro
2013-09-05 11:47:21 -03:00
Thiago Santos
1860712098 pad-monitor: allow flushing flow returns when pad is flushing
It should always be acceptable to return GST_FLOW_FLUSHING when the
pad is flushing
2013-09-05 11:46:46 -03:00
Thiago Santos
a1775e75e5 pad-monitor: removing bad check
Elements are allowed to accumulate segments, they don't have to push
1:1 segments as they receive
2013-09-04 08:51:54 -03:00
Thiago Santos
25c55501a0 pad-monitor: buffer timestamp ranges check
Improve buffer timestamp range check:

* Only do it for encoders or decoders
* Audio has an acceptable tolerance of 100ms

To do this, keep track of the caps on the pad and store
if it is dealing with audio or video
2013-09-03 15:35:36 -03:00
Thiago Santos
26cff77b72 pad-monitor: move caps check to common event handling
Allows both src and sink pad to keep track of the current caps, but
the duplicated caps check is still only applied to sink pads as
src pads can push the same caps multiple times when it isn't linked
2013-09-03 15:17:05 -03:00
Thiago Santos
bd0f19c105 pad-monitor: fix reference handling for expired events list 2013-09-02 20:41:35 -03:00
Thiago Santos
2e216818bd Replacing mentions of qa with validate 2013-09-02 13:22:51 -03:00
Edward Hervey
cc65145eb1 pad-monitor: Check if iterator exists before trying to use it 2013-09-02 12:18:07 -03:00
Edward Hervey
788054bda7 pad-monitor: make debug log more readable
Use pad as the debug object to make logs more meaningful.

Also adds a FIXME note
2013-09-02 12:15:24 -03:00
Edward Hervey
fb58e16c5a element-monitor: protect agains elements that have no klass 2013-09-02 12:11:25 -03:00
Thiago Santos
ea903da1c7 pad-monitor: use activate-mode function to detect when to clear pad data
Clear as much as a flush-stop when pad is deactivated
2013-09-02 12:05:46 -03:00
Edward Hervey
d2edb59a24 WIP: pad-monitor: Fix serialized event order check 2013-09-02 10:47:32 -03:00
Thiago Santos
fef4eba9a2 pad-monitor: also track eos event that should be emitted after a seek
When seeking out of the media file length, the element should push an
EOS with the same seqnum of the seek event
2013-09-02 10:46:55 -03:00
Thiago Santos
390b54f40d scenario: add missing space 2013-09-02 10:46:42 -03:00
Edward Hervey
78e1cb82da validate: prettify output of results
Makes the result a bit more readable than a compact multi-line list.

FIXME: Figure out how to print the description of the issues (which can
spawn multiple lines) in a nice way.
2013-09-02 10:03:07 -03:00
Thiago Santos
adca72b069 scenario: add missing line break after print 2013-08-29 14:27:34 -03:00
Thiago Santos
713da78201 pad-monitor: avoid tracking tag events
Tag events are hard to track and check if properly serialized because
they mutate too much inside elements. There is no reliable way currently
to match a tag event pushed into an element and another tag event
leaving the element (other than if the pointers are actually the same).
2013-08-29 14:26:05 -03:00
Thiago Santos
1c874d175e pad-monitor: only do combined return checks for demuxers
Seems like the only place that gstreamer elements should really
care about it
2013-08-29 11:48:33 -03:00
Thiago Santos
a426198916 pad-monitor: add two useful macros for readability
Avoids using long macros and having to check for pad-monitor parent
existance
2013-08-29 11:47:58 -03:00
Vincent Penquerc'h
f5f4635d0e media-info: add a track switching test
This test will find the first input selector with more than one
sink pad, and cycle through them till it gets back to the original
one. Five seconds between switches. The test checks that some data
was sent from the input selector when each of the sink pads was
selected.
2013-08-29 10:43:03 -03:00
Thibault Saunier
f893bb7534 scenario: Print on stdout when we seek 2013-08-28 19:14:31 -03:00
Thibault Saunier
1dcfaea37f validate: Report an issue result of query state that position > duration 2013-08-28 19:00:58 -03:00
Thibault Saunier
78d2fde632 scenario: Execute action whenever we pass the expected position
We know are sequential so whenever the wanted position is passed we
should execute the action.

This avoid issue with the tolerance when we have high rate playback
2013-08-28 18:55:55 -03:00
Thiago Santos
1dd93bea2a licenses: improving licensing info on all files 2013-08-28 16:58:11 -03:00
Thiago Santos
5f261269f8 pad-monitor: fix typo when acessing parents data 2013-08-28 16:49:07 -03:00
Thiago Santos
103bf74768 pad-monitor: reset buffer timestamp data after a flush
As the pad/element also clears its internal state
2013-08-27 18:26:14 -03:00
Thiago Santos
49d39be022 pad-monitor: also track flush events on probes 2013-08-27 16:16:08 -03:00
Thiago Santos
41e0bf1e91 tools: moving applications from gst/validate to tools
Keeps the CLI applications separate from the libs files
2013-08-27 12:04:31 -03:00
Vincent Penquerc'h
aa814d0189 gst-validate-scenario: fix scenario listing missing installed ones
Only scenarii in the current directory or the user's home directory
were being listed.
2013-08-27 11:52:11 -03:00
Vincent Penquerc'h
69597d9f5e gst-validate-transcoding: fix help text to refer to URIs as URIs
Referring to them as files is confusing, as you'll try to use files
and not URIs.
2013-08-27 11:52:10 -03:00
Thiago Santos
2ba098976a pad-monitor: Move repeated caps to test only on sinkpads
Testing on source pads can lead to false positives when pads are
unlinked. The caps event is sticky and will be pushed again later
when another buffer/event is pushed, leading to an acceptable
situation to push the caps twice.
2013-08-27 11:48:00 -03:00
Thiago Santos
b591f11b15 pad-monitor: add another acceptable flow return combination scenarios
A demuxer knows when to return EOS after samples are over, so it is
ok for it to return even when all src pads returned OK
2013-08-26 20:33:23 -03:00
Thiago Santos
a06a9038a4 pad-monitor: improve serialized event checks
If the event was already found at the first position of the array, it
shouldn't be searched on the rest of it.

This removes lots of false positives.
2013-08-26 20:33:23 -03:00
Thiago Santos
1a54b40c78 pad-monitor: fix aggregate flow return check for error situations
Flow flushing must be returned upstream to indicate an error situation
downstream
2013-08-26 20:33:22 -03:00
Thiago Santos
185d10bf79 gst-validate: print error message when starting the pipeline fails
Instead of just exiting silently
2013-08-26 20:33:22 -03:00
Edward Hervey
e48eadad75 pad-monitor: New check for duplicate caps event
We shouldn't get/push twice caps that are identical
2013-08-26 17:09:04 -03:00
Thiago Santos
104cccdfc0 media-info: avoid glib assert 2013-08-23 17:26:51 -03:00
Edward Hervey
4f3e1de776 report: Avoid repeating long macros
Makes the code a bit more readable and compact
2013-08-23 11:38:15 +02:00
Edward Hervey
60a2dfaf72 validate-report: Fix critical flag handling
criticals are warnings/issues also
warnings are issues also
2013-08-23 11:10:57 +02:00
Thibault Saunier
0609de7156 scenario: Have GstClockTime as second (in double) inside scenario files
Making it easier to read
2013-08-22 14:13:07 -03:00
Thibault Saunier
ff3e435e94 data: Add a Backward and Forward seeking scenario 2013-08-22 13:55:08 -03:00
Thibault Saunier
96ca875c56 validate: Set return value of apps to -1 only if a critical issues was reported
Conflicts:

	gst/validate/gst-validate-transcoding.c
	gst/validate/gst-validate.c
2013-08-22 13:54:39 -03:00
Thibault Saunier
375a47aa0d transcoding: Make sure to initialize Gst before parsing options
Avoiding to break the help
2013-08-22 13:06:01 -03:00
Thibault Saunier
40e3b5881a transcoding: Connect to the bus signals watch as the main watch might already be connected 2013-08-22 12:08:14 -03:00
Thibault Saunier
161e0cee12 scenario: Start monitoring the position only when the pipeline starts playing
Otherwize seeking with a playback_time=0 won't work properly
2013-08-22 12:06:29 -03:00
Thibault Saunier
f9ddb6f59e scenario: Fix negative rate management
Properly parse the it has a gdouble and set the stop position of the seek as
seeked_position if the rate is negative

+ Add some debug
2013-08-22 12:05:18 -03:00
Thibault Saunier
ddd00741fd scenario: Actions order in xml file is the order in which they must be executed
When seeking we might want to execute seeks at a playback time inferior than previous
seek, so we need to be able to define the order in which actions have to be
executed, the simplest way is to just concider that actions are always
order in the XML files.

+ Add some more debugs

Conflicts:

	gst/validate/gst-validate-scenario.c
2013-08-22 12:04:08 -03:00
Thibault Saunier
15b3049764 scenario: Rename the seeks list to actions, and initialize action to 0 when allocating 2013-08-22 12:02:49 -03:00
Thibault Saunier
2102648c5c scenario: Rename scenario xml files extension to .scenario 2013-08-22 12:02:02 -03:00
Thibault Saunier
fc61dcf1ed validate: Connect to the bus signals watch as the main watch might already be connected 2013-08-22 12:01:44 -03:00
Thibault Saunier
de57b1455a validate: Add a way to list avalaible scenarios
Conflicts:

	gst/validate/gst-validate-transcoding.c
2013-08-22 12:00:04 -03:00
Thiago Santos
123bdea93a gst-validate-transcoding: add signal handling and issues printing
Update to have the same features as gst-validate.

1) Handle interrupts properly, with the additional of having the
'eos-on-shutdown' argument that sends EOS to the pipeline. This is
very useful for transcoding processes to finish correctly.

2) Print issues on the end of application
2013-08-22 10:35:50 -03:00
Thiago Santos
db44d3aa27 gst-validate: add interrupt handler
Handle interrupt properly to still print issues when exiting
2013-08-22 10:35:34 -03:00
Edward Hervey
ec6abff9dd pad-monitor: Fix source pad probe handling
type is a bitmask and not an enum
2013-08-21 13:26:27 -03:00
Thiago Santos
df228c5729 gst-validate: fix documentation after debug category changes 2013-08-21 13:10:42 -03:00
Edward Hervey
de930073fc validate-reporter: More comprehensive debug message
Some issues don't have any arguments, so put the full details in.
2013-08-21 18:00:16 +02:00
Edward Hervey
529576e69b validate: Only use one debugging category: validate
There's no point in having a different debug category per file, you
can filter it by source filename if you *really* want that.
2013-08-21 17:59:51 +02:00
Thiago Santos
7e5f458e63 gst-validate: print issues at the end
And improve documentation about usage
2013-08-21 12:14:22 -03:00
Thiago Santos
044b21521b media-check: add results file comparison
Adds a new expected-results argument to receive a file that is used
as a base for comparison with the new results. In case differences are
found, the application will print those issues.
2013-08-21 11:03:19 -03:00
Thiago Santos
549bcc1fd5 reporter: do not print issues to stdout 2013-08-20 17:10:44 -03:00
Thiago Santos
36e5c626af media-info: fix playback tests
They weren't waiting for the pipeline to properly change state
before sending seek events, that would cause some events to
return TRUE even if they were not handled
2013-08-20 15:44:10 -03:00
Thiago Santos
387f7c1b63 media-check: return nonzero if a test failed 2013-08-20 15:42:54 -03:00
Thiago Santos
1713442fd3 media-info: add playback and reverse-playback tests
The tests are very simple as they only write the first error they
found during playback. If no error is set, an empty string is
printed.

The playback pipeline isn't monitored with validate monitors for now
2013-08-20 13:24:31 -03:00
Thiago Santos
3f91779c32 rename: gst-validate-file-check -> gst-validate-media-check
It not only validates files, takes any URI
2013-08-20 11:43:06 -03:00
Thiago Santos
577ad5c127 media-info: add stream topology parsing
Currently it only saves/loads the main type, but all topology is
already being parsed for future use
2013-08-20 11:41:15 -03:00
Thiago Santos
3d93eb78f1 media-info: add duration and seekable entries
Add duration entry in ns and seekable as a boolean to a new group
'media-info'
2013-08-19 16:52:12 -03:00
Thiago Santos
1c32bbbac3 media-info: replacing file-checker with a simpler media-info struct
This struct stores information about a media and tests run on it. It
also has a few helper functions that allows storing the results to a
file and loading it back.

Instead of having the file-checker object that would compare the
extracted values from the file to expected results set to its properties,
the media-info will store the values and it will be possible to compare
old media-info with new media-info from the same file. This allows
tracking improvements and regressions on different gstreamer versions.

Right now, the media-info is very tiny and doesn't store much info, only
the uri and the file size in bytes, but it will receive more additions in
the upcoming commits for storing duration, media topology, seekability and
playback information.
2013-08-19 16:38:13 -03:00
Edward Hervey
6a3070a1e4 .gitignore: Update for 1.0 and cleanup 2013-08-16 15:15:51 +02:00
Edward Hervey
15ea3bd8aa all: Enable more C warnings at build time
And fix the issues:
* Proper forward declaration
* static functions marked properly
* absolute includes
* declaration order
2013-08-16 15:13:54 +02:00
Edward Hervey
3e5c921217 reporter: Fix proper debug message output partially
In order for the special gstreamer print argument handler to be used
you can't use g_strdup_printf. You need to pass it the actual va_list.
2013-08-16 14:30:02 +02:00
Edward Hervey
501be30379 pad-monitor: Handle case where internal pad iterator is NULL
Can happen with inputselector
2013-08-16 14:30:02 +02:00
Edward Hervey
eca452978a pad-monitor: Don't use signal that doesn't exist
Note that we should just ensure we always get the pads from the parent
2013-08-16 14:30:01 +02:00
Edward Hervey
511ab5e1d8 pad-monitor: Update raw audio caps checks 2013-08-16 14:30:01 +02:00
Edward Hervey
5a659f205d pad-monitor: Fix locking issues
We were taking locks twice.

Also add debugging info when taking/releasing locks to help further similar issues
2013-08-16 14:30:01 +02:00
Edward Hervey
f3bd5ac0c0 file-checker: GstEncodingProfile is a GObject in 1.0 2013-08-16 14:30:01 +02:00
Thiago Santos
25688f4e50 gst-validate: port to 1.0 2013-08-15 01:46:27 -03:00
Thiago Santos
6df0b6c010 validade: add missing config.h includes 2013-08-14 20:03:43 -03:00
Thiago Santos
ee9f1ad9b2 validate: add init function
Adds an init() function that should be called before using the lib.
It takes care of calling all internal initializing functions in
gst-validete
2013-08-14 19:14:18 -03:00
Thiago Santos
3dea4388fd tools: improve documentation 2013-08-14 18:04:23 -03:00
Thiago Santos
52002376ea rename gst-qa -> gst-validate 2013-08-14 17:46:28 -03:00
Thiago Santos
ddc95f5b8c pad-monitor: only do complete caps checks on setcaps
On get caps it is acceptable to have missing fields to simplify caps
negotiation
2013-08-14 16:00:50 -03:00
Thiago Santos
848c86712b qa-preload: split to separate lib
It should only be used separately, otherwise it will wrap around any
pipeline from applications linking with gstqa
2013-08-13 13:40:48 -03:00
Thiago Santos
4f11a05baf file-check: add reverse-playback test
Adds a test that checks if reverse playback works without errors
2013-08-13 13:28:40 -03:00
Edward Hervey
737a2664f2 qa-reporter: Make debug message a bit more readable
By surrounding it with double quotes
2013-08-13 09:33:26 -03:00
Edward Hervey
5fcbf1026d pad-monitor: 0.10 uses "channel-positions" field in audio caps
And it's an array, not a string
2013-08-13 09:33:26 -03:00
Edward Hervey
c8e2e3aa67 Makefile: Clean up for make distcheck
Directories, headers, files weren't properly disted

Also clean up the various CFLAGS/HEADERS/SOURCES variables and remove
ones that aren't needed.
2013-08-13 09:33:25 -03:00
Thiago Santos
4af966f5ee pad-monitor: use correct variable for segment comparisons
Use the expected versus the received instead of using the received
twice.
2013-08-09 12:37:49 -03:00
Thiago Santos
e679d8531e reporter: fix printf format type 2013-08-09 12:33:27 -03:00
Thiago Santos
6544d5f67e qa-scenario: re add scenarios creation to bin-monitor
GstPipelines are monitored by bin monitors. Create scenarios if
requested from the bin monitors and store them there.
2013-08-07 17:31:17 -03:00
Thiago Santos
71fd0e57cd qa-monitor: remove reference to the runner
qa-monitor implements qa-reporter, and we already have a runner stored
there.
2013-08-07 16:23:25 -03:00
Thiago Santos
6d4a8fd754 gitignore: ignore more binaries 2013-08-07 16:23:25 -03:00
Thiago Santos
a6b3816c35 qa-file-check: add new binary to run file checks easily
It creates a GstQaFileChecker and runs it on the passed URI with
the tests enabled as arguments
2013-08-07 16:23:25 -03:00
Thiago Santos
08aae8336b qa-runner: simplify runner to not hold refs to monitor/pipeline
The GstQaRunner is now a simple aggregator of reports that it receives
from monitors and filechecker. This allows it to be used in both
scenarios without  APIs that expect GstElement or Monitors, that are
only used on the pipeline monitoring QA tests.
2013-08-07 16:10:57 -03:00
Thiago Santos
61d39d6e74 file-checker: add file playback testing feature
Adds a property that triggers the file playback tests on
GstQaFileCheker. Also enable it in the gst-transcoding post file checks.

The implementation is simple, just create a playbin2 and use fakesinks
as sinks, set it to playing and wait for either EOS or ERROR messages.
2013-08-07 11:31:04 -03:00
Thiago Santos
b959a781a9 qa-reporter: fix typo 2013-08-06 19:42:21 -03:00
Thiago Santos
499f65a041 file-checker: include restriction caps tests when checking for profiles
Also move the caps check earlier on the path, to error out sooner and
avoid iterating the sub streams without needing
2013-08-06 19:42:09 -03:00
Thiago Santos
71351b3e33 file-checker: replace encoding profile comparison
Use our own custom comparison to allow to add more fine grained error
reporting. Also the encoding profile is_equal function is too strict as
it also compares profiles names, that doesn't matter to us.

This commit implementation is still initial and needs improvements as it
isn't using the restriction caps, which includes information that might not be
on the profile format caps.
2013-08-06 18:32:07 -03:00
Thiago Santos
e7853ec69f qa-reporter: fix crash by avoiding unref an integer 2013-08-06 10:37:15 -03:00
Thiago Santos
c81e6198f9 makefile: fix build of gst-qa- tools 2013-08-06 10:36:47 -03:00
Thiago Santos
cde09a7e6c file-checker: add error report and new report types
Add a list of new report types and use them in the file-checker.
The errors are mostly related to testing file attributes against
expected values
2013-08-06 10:36:02 -03:00
Thiago Santos
369e936b8f qa-file-checker: add a file checker object/runner
It is an object that is capable to run a few file checks. The
implemented tests are: file size, duration, if the file is seekable and
comparing the file stream types with a encoding profile
2013-08-05 14:16:06 -03:00
Thiago Santos
e5cafa3375 qa-scenario: adding eos scenario action
Allows sending EOS to the pipeline
2013-08-01 18:08:44 -03:00
Thiago Santos
caba58c029 qa-scenario: add new scenario action - Pause
The pause action instructs the pipeline to go to paused state and then
return to playing. It has the argument 'duration', that indicates the
duration for which the pipeline will remain in paused
2013-08-01 09:35:59 -03:00
Thiago Santos
60b0c7383f qa-scenario: refactor to accomodate more actions
Refactor to be able to reuse to add more actions to scenarios.
Planned are pauses and encoding changes
2013-08-01 01:27:20 -03:00
Thiago Santos
2901e35f5c qa-scenario: avoid assertion on dispose
After an error, the pipeline might still be null, check before unreffing
2013-07-31 15:01:13 -03:00
Thiago Santos
f1368356bc qa-scenario: fix typo on define variable 2013-07-31 15:00:56 -03:00
Thiago Santos
a395133aa2 qa-report: fix typo on assertion comparison 2013-07-31 15:00:33 -03:00
Vincent Penquerc'h
3a419c3fd8 gst-qa-element-monitor: do not bypass monitor factory
A pad monitor was created directly. Prefer going through the
factory.
2013-07-31 08:10:42 -03:00
Vincent Penquerc'h
5356f10644 gst-qa-reporter: fix use of uninitialized repeat field 2013-07-31 08:10:40 -03:00
Vincent Penquerc'h
711fa22a49 gst-qa-reporter: fix report leak when discarding repeated report 2013-07-31 08:10:37 -03:00
Vincent Penquerc'h
16bbbb5733 gst-qa: make tools depend on libraries
This fixes parallel build randomly breaking.
2013-07-31 08:10:27 -03:00
Thiago Santos
76679b1c7e qa-report: expose API for adding custom issues
expose gst_qa_issue_register and gst_qa_issue_new to allow applications
to register their own custom issues.

Issues IDs should use Areas higher than GST_QA_AREA_OTHER for custom
areas. And to add more issues to existing areas, the IDs should be
higher than GST_QA_ISSUE_ID_CUSTOM_FIRST.

Custom issues registering should be done at startup and from the same
thread as there is no locking around the issues hashtable
2013-07-30 17:07:13 -03:00
Thiago Santos
2034fb11d9 Fix typos 2013-07-30 16:21:15 -03:00
Thiago Santos
4e9bedcde8 qa-runner: Remove printing API from qa-runner
Replace it with functions to list the reports
2013-07-30 16:20:49 -03:00
Vincent Penquerc'h
4456e24cdf pad-monitor: fix NULL format string
An empty message should be an empty string.
2013-07-30 13:55:14 -03:00
Thiago Santos
2eba57d387 qa-runner: removing _setup call
Do setup on the _new function directly instead of having a separate
call for that
2013-07-30 10:21:32 -03:00
Thiago Santos
044084949a qa-override: add more pad overrides for buffer probe and caps
Add override functions for custom checking of buffer probe and
getcaps/setcaps functions.
2013-07-30 09:57:20 -03:00
Thiago Santos
55109ae7f9 pad-monitor: call the event/query/buffer overrides
Use the new event/buffer/query overrides to allow custom checks
on those scenarios
2013-07-30 09:41:06 -03:00
Thiago Santos
8a66b3d4ed qa-override: add callbacks for query/buffer/event functions
Add callbacks for pad event/buffer/query functions in case the
override wants to do additional checks
2013-07-30 09:41:05 -03:00
Vincent Penquerc'h
7fedf5a111 gst-qa-override-registry: load overrides dynamically
Shared objects listed in GST_QA_OVERRIDE are loaded on startup,
and the symbol gst_qa_create_overrides is run. It should create
any override needed. While it can do anything it wants, this
is discouraged.

GST_QA_OVERRIDE should be a comma separated list of shared objects,
any relative paths should be from the current working directory
at the time they are loaded (ie, if the process to be traced
changes cwd, use absolute paths).

No attempt whatsoever is made at not running what was not meant.

Includes a sample shared object for illustration purposes.
2013-07-30 09:41:00 -03:00
Thiago Santos
09fda8bbd2 qa-override-registry: register overrides by gtype and klass
Overrides can now be registerd by gtype, meaning that they will
be attached to monitors that the target is of the requested type.

Also by element klass, that will check that the element has the
selected class in its details
2013-07-29 13:17:50 -03:00
Thiago Santos
e0d041d67b qa-monitor: implement intercept_report
It is used to iterate over overrides and modify the report level if
the overrides wants to do so.

Also adds a new mutex only for the overrides to avoid deadlocks when
reporting if we used the same lock for iterating the overrides
2013-07-29 12:01:02 -03:00
Thiago Santos
f7d7d093e3 qa-reporter: fix copy n paste left over 2013-07-29 11:35:20 -03:00
Thiago Santos
79e7392a9c qa-reporter: add function for intercepting reports
after report creation, this function is called and implementers can
modify the report to their liking before it is posted to the runner
2013-07-29 11:34:42 -03:00
Vincent Penquerc'h
6e19324584 qa-monitor: chain gst_qa_monitor_finalize to parent's finalize
It was chaining to the parent's dispose.
2013-07-29 10:46:29 -03:00
Thiago Santos
3a13d59a1d gst-qa-report: put the correct format to avoid compiler warnings 2013-07-29 10:06:48 -03:00
Vincent Penquerc'h
2bac08370c i18n: copy necessary files in-tree 2013-07-29 09:57:25 -03:00
Vincent Penquerc'h
1c053ffda7 GstIssueId: make this uintptr_t
As it's used a a placeholder pointer for g_hash_table use,
it needs to be converted back and forth to a pointer.
2013-07-29 09:56:45 -03:00
Thiago Santos
dbc61a88b6 gst-qa-override-registry: adding the override-registry
This registry should contain the list of GstQaOverride to
be used on the pipelines being monitored
2013-07-29 09:53:54 -03:00
Thiago Santos
794ea2652d qa-override: adds qa-override that can change the report level of issues
Useful for customizing the level of issues for particular elements/tests
when they are more relevant or have to be disabled
2013-07-26 12:16:29 -03:00
Thiago Santos
773d8adc5e qa-report: splitting a GstQaReport into a GstQaIssue and GstQaReport
Reports now point to Issues, that are uniquely identified and have
translatable descriptions. This way we are going to be able to uniquely
identify the issues and applications can enable/disable checks for
specific elements.
2013-07-26 12:16:29 -03:00
Thibault Saunier
1e1e0b922e qa: Make it possible to set a scenario from the command line in test apps 2013-07-25 16:58:15 -03:00
Thibault Saunier
382fcc9a01 qa: Properly set reporter's runner reference
That was never set, but it is needed for the reporter to properly add
reports to the runner.
We still keep a reference on the monitor to make things simpler
2013-07-25 16:58:14 -03:00
Thibault Saunier
d804ad475a reporter: Use Gst debugging log in the _report method directly
Using __VALIST__ was not properly working
+ Add a gstqareporter debug category
2013-07-25 16:58:14 -03:00
Thibault Saunier
4fb8f47770 scenario: Implement the GstQaReporter interface and make use of it
This way we can report issues from a scenario
Also add a Seek aread to the known areas list

We now need to pass the runner to the scenario instead of the
pipeline as the GstQaReporter interface needs it.
2013-07-25 16:58:13 -03:00
Thibault Saunier
4992249848 qa: Add a GstQaReporter interface that objects needing reporting can implement
Various type of object should be able to do some reporting, so we have
to make sure all the code to do that is in one place. Creating an interface
makes it simple to share information and it avoid to have a baseclass for
something that is not actually important enough to create a baseclass.

Conflicts:
	gst/qa/gst-qa-pad-monitor.c
2013-07-25 16:57:44 -03:00
Thibault Saunier
7508e35b7e qa: Add a GstQaScenario class making it possible to execute scenarios
A scenario correspond to a suite of action to execute on a pipeline,
for the time being, we only support seeking the pipeline, but in the
future we can imagine doing some queries, setting pipeline state, etc...

The scenario can be loaded thanks to the GST_QA_SCENARIO environment
variable, making it usable with any existant application, in case, the
application can be used interactively, the user should either, not load
any scenario or let the application run without interacting with it.
2013-07-25 16:56:40 -03:00
Thiago Santos
4a3f06885a pad-monitor: add lots of locking
When handling elements that spawn multiple threads (hardware
enc/decoders), the pad monitor has to protect its variables specially
because some checks involve iterating over internally linked pads to
add/get some data for comparison (expected events, timestamp ranges,
caps).

Aside from locking its own mutex, the pad monitor can also lock the
parent's mutex when it needs to use data from its internally linked
pads. The locking order should always be parent and then individual
pad-monitor mutexes. This should prevent deadlocks when multiple
pad-monitors from the same element start doing checks at the same time
from different threads.
2013-07-24 16:16:07 -03:00
Thiago Santos
48c49f5071 pad-monitor: remove already solved TODOs 2013-07-24 10:05:31 -03:00
Thiago Santos
887afecc22 pad-monitor: accept unexpected flow return if pad is eos
Track eos event and mark that pad as eos so that checking for the
flow return knows when 'unexpected' is acceptable
2013-07-24 10:05:23 -03:00
Thiago Santos
b5f31f0c8c pad-monitor: improve caps proxying check on getcaps
Only check if fields are proxied for sink getcaps as it is when
downstream restrictions should be proxied. Also improve the
fields comparison to handle single value x multi value
(list/array/range) contain relations.
2013-07-23 15:18:51 -03:00
Thiago Santos
6ebded71e2 pad-monitor: improve type conformance checking for caps
Replace the macro with a more powerful variadic function that can
check for more acceptable types for the same caps.

This removes a few more false positives
2013-07-23 15:16:35 -03:00
Thiago Santos
c9955c14e4 pad-monitor: only expect a new segment if pad is running on push mode
For pull mode, it should just provide the buffers, regardless of getting
a new segment or not
2013-07-23 12:52:22 -03:00
Edward Hervey
d7b2977657 gst-qa: show help and exit when no arguments are provided
Instead of attempting to create empty pipelines and weird things
happening :)
2013-07-23 12:14:26 -03:00
Thiago Santos
04b3517e41 pad-monitor: fix flushes checking
flush events shouldn't fail, so we don't need to rollback when it
returns false from downstream (this is common when downstream is still
not-linked) and it would cause gst-qa to spit false positives.

Also refactor the common event handling for both sink and src event
functions into a common place. Currently we handle flushes the same
for both pad's directions
2013-07-23 12:11:08 -03:00
Thiago Santos
d8fa81eeff pad-monitor: only merge caps if they exist
Downtream can not be linked, so we shouldn't try to merge
NULL caps
2013-07-23 11:51:07 -03:00
Thiago Santos
11cc2e6b3b pad-monitor: fix expected setcaps fields comparison
Use the correct structure when getting the GValues and print different
messages for missing and different fields on the setcaps caps
2013-07-22 20:09:35 -03:00
Thiago Santos
363de0e555 pad-monitor: improve timestamp ranges comparison message a little
Show the buffer range that is being compared.
2013-07-22 20:09:07 -03:00
Thiago Santos
e94427e639 pad-monitor: add check for serialized events order
Store expected serialized events and their 'timestamps' to check if
they are pushed in the same order/time as they were received
2013-07-22 15:05:04 -03:00
Thiago Santos
c650034fb4 pad-monitor: add check for setcaps passing audio/video fields
Checks that the common audio/video fields are correctly passed
downstream after a setcaps
2013-07-22 09:50:23 -03:00
Thiago Santos
0aaf23cb0f pad-monitor: add check for getcaps proxying audio/video fields
Checks that the common audio/video fields are correctly proxied by
the elements after a getcaps
2013-07-19 16:52:45 -03:00
Thiago Santos
694935fdea element-monitor: add is_encoder flag
Easy access to knowing if the monitored element is an encoder
2013-07-19 16:52:11 -03:00
Thibault Saunier
ab98bd242e qa-transcoding: Add a binary program to easily test transcoding 2013-07-19 11:16:47 -03:00
Thibault Saunier
799b7a8c3e monitor(s): Avoid trying to disconnect handlers on instances that do not exist anymore 2013-07-19 11:15:54 -03:00
Thibault Saunier
0127706e09 qa-report: Avoid reporting tons of times the exact same issue to users
Some of the issue can be reported once and for all. We are here avoiding to flood the
user with the same information repeated infinitely.
2013-07-19 11:15:53 -03:00
Thibault Saunier
affddfe626 qa-pad-monitor: Do not use gst_private.h 2013-07-19 11:15:52 -03:00
Thiago Santos
a7353e988b pad-monitor: improve timestamp ranges check
Keep the full range stored by the element in the monitor and check
if outgoing timestamps are within that range. It is simple and
should generally work.
2013-07-19 09:57:07 -03:00
Thiago Santos
a11cc64f90 pad-monitor: fix combined flow checks
We can only check if we found a downstream monitor
2013-07-18 14:49:23 -03:00
Thiago Santos
16b1d750c8 pad-monitor: fix caps field type checks
The type is GstValueList and not GArray
2013-07-18 14:49:01 -03:00
Thiago Santos
9d7f9cfa54 pad-monitor: improve report messages with arguments 2013-07-18 14:48:46 -03:00
Thibault Saunier
eebb3522bf qa-report: Pass the whole monitor when creating a report
So we have the proper source name already avalaible and in the future
we might need some more informations about the monitor itself.
2013-07-18 13:43:29 -03:00
Thibault Saunier
dd672acf8b qa-pad-monitor: Properly set target_name with as much info as possible 2013-07-18 13:43:28 -03:00
Thibault Saunier
cb4792a8e5 qa-monitor: Add a target name field that can be used even when the target is freed 2013-07-18 13:43:25 -03:00
Thibault Saunier
d1508ce651 qa-monitor: Make the reference to the target a weak reference 2013-07-18 13:43:23 -03:00
Thiago Santos
d0272be23b qa-report: add debug flags for criticals
Allows the user to enable program abort if a report
is created with a certain level.

Use:
GST_QA=fatal_criticals,fatal_warnings,fatal_issues
2013-07-18 12:22:43 -03:00
Thibault Saunier
4b808aeb81 qa-report: Do not keep a ref to the source but keep its name instead
We currently do not need to access the object source after its creation
but we need to be able to have a usefull for debugging name.
2013-07-18 12:15:24 -03:00
Thibault Saunier
7faac43afb qa-runner: Add a 'report-added' signal
So it is possible to plug into the runner to get information about
what is going from outside of it.
2013-07-18 12:15:24 -03:00
Thibault Saunier
5f62fd2e2a qa-report: Make it a boxed type
And make it refcounted, in 1.0 it should become a GstMiniObject, for
now, it is enough that way.

The goal is to be able to use it in signals
2013-07-18 12:15:24 -03:00
Thibault Saunier
440d20ed00 qa-monitor: Allow detaill message to be in printf format
So we can give proper informations about what is wrong to users
2013-07-18 12:15:24 -03:00
Thiago Santos
84b9b654e1 qa-monitor-preload: fix preload to work with pipeline creation
Wrap around the main gstreamer pipeline creation functions as wrapping
g_object_new requires rebuilding glib.
2013-07-17 21:46:37 -03:00
Thiago Santos
4db12b8a76 pad-monitor: fix copy n paste mistake
Do not use GstFlowReturn where a boolean is expected
2013-07-17 20:40:50 -03:00
Thiago Santos
f90e164038 pad-monitor: fix initialization of timestamp ranges 2013-07-17 20:40:38 -03:00
Thiago Santos
9c958417e2 pad-monitor: check that returns are combined properly
When getting a return from a sink pad, check that it combines properly
the current returns from downstream source pads
2013-07-17 17:57:39 -03:00
Thiago Santos
425e608456 pad-monitor: verify that pushed segment matches what was received
Check that src pads push segments that are compatible with what
was received on the sink pads
2013-07-17 14:36:44 -03:00
Thiago Santos
bd22bb8d1c pad-monitor: output timestamps should be in range of received ones
Checks if the timestamps of pushed buffers are in the range of the
received buffer timestamps;
2013-07-17 11:49:39 -03:00
Thiago Santos
0b90e7bddd pad-monitor: add check for out of segment buffers 2013-07-17 00:33:42 -03:00
Thiago Santos
c53b10e5c5 pad-monitor: track current buffer timestamp and duration
This can be used to make sure outgoing buffers match the input
timestamps
2013-07-17 00:30:21 -03:00
Thiago Santos
9a82afbc87 pad-monitor: check for when a flush start isn't expected
Complain when an unexpected flush-start is received
2013-07-17 00:29:38 -03:00
Thiago Santos
c942eabbfd pad-monitor: add checks for raw caps completeness
Check audio and video raw caps returned from getcaps for expected
fields and types
2013-07-17 00:29:04 -03:00
Thiago Santos
fbd6aa1359 qa-monitor: Fix typo in printf format for report debug messages
Stringify the arguments correctly for printing
2013-07-17 00:25:11 -03:00
Thiago Santos
6677b5a574 pad-monitor: first buffer checks
Check that a newsegment is received before the first buffer and that
the first buffer running time is 0
2013-07-16 23:19:13 -03:00
Thiago Santos
4e84ad6513 qa-report: rework qa-report API
Remove error from GstQaErrorReport, making it only GstQaReport. Add
 a level and use area and subarea code, with an extra string for message
 adding details.

Provide macros on qa-monitor to make it easy to create reports.
2013-07-16 21:15:09 -03:00
Thiago Santos
d1fde6f4cf pad-monitor: add stubs for getcaps/setcaps function wrapping 2013-07-16 09:17:44 -03:00
Thiago Santos
95f81d7240 pad-monitor: add check for out of segment buffer data 2013-07-16 08:06:27 -03:00
Thiago Santos
a60c2efe4a qa-report: use gst_util_get_timestamp for report times
Makes it more aligned with GST_DEBUG output
2013-07-15 10:15:06 -03:00
Thiago Santos
e96db7dbfa pad-monitor: split event checks for src and sink pads
Keeping those handlers separate should keep the code smaller and
easier to understand
2013-07-15 09:27:34 -03:00
Thiago Santos
cb6b45d375 qa-monitor: add parent relation for monitors
This is useful because Pad monitors will have to ask the
parent element monitors for some element details for
doing checks
2013-07-12 16:02:25 -03:00
Thiago Santos
d314df2040 qa-element-monitor: check if the element is a decoder
This can be used on checks for timestamps being inside segment
2013-07-12 15:47:16 -03:00
Thiago Santos
6f2dbf1486 pad-monitor: add probes for src pads
To be used for further monitoring events and buffers for
src pads
2013-07-12 14:47:29 -03:00
Thiago Santos
0bc7ae9aeb qa-report: add a timestamp to error reports 2013-07-12 13:32:08 -03:00
Thiago Santos
3476fffd54 qa-report: adds qa-report for reporting errors to GstQaRunner
The errors are printed directly to stdout and are accumulated at
GstQaRunner for being printed at the end if requested
2013-07-12 12:43:07 -03:00
Thiago Santos
5250ed4331 qa-monitor-preload: add functions to allow ld-preload to wrap pipelines
The preload functions wrap functions that can create pipelines and
attaches a runner to them for monitoring
2013-07-12 11:44:34 -03:00
Thiago Santos
aeacc4270b qa-monitor: add runner property
runner stores the GstQaRunner that will receive the error reports
from the monitors
2013-07-12 00:41:43 -03:00
Thiago Santos
08180f3a4c pad-monitor: make it able to initialize a segment
Do not take the initial format set to TIME too seriously when we
haven't got any newsegment event yet. If it is the first segment
received, switch our internal segment tracker to the event format
2013-07-11 13:45:43 -03:00
Thiago Santos
7de70978cf gst-qa: add seek-tests option
The seek-tests does a simple seeking after the pipeline has started
so that seeking checks can be performed by the monitors
2013-07-11 13:41:25 -03:00
Thiago Santos
c3c1d2e68c pad-monitor: track some events
Segments, upstream seeks and flushes. Adding the following checks:

* A flush stop is expected after a flush start
* After a seek, the flushes/segment seqnum should be the same as the seek
2013-07-11 12:55:17 -03:00
Thiago Santos
7ba50106f2 pad-monitor: only set pad functions if they exist on the pad
Some functions should only be set on pads if they were originally
set, like the GetRange, Chain and BufferAlloc
2013-07-11 00:06:14 -03:00
Thiago Santos
5ac4579358 qa-bin-monitor/element-monitor: implement pad/element wrapping
Add code that creates new monitors when elements/pads are found
in bin and element monitors
2013-07-11 00:04:41 -03:00
Thiago Santos
ac66ed48fa qa-monitor: fix various start up issues
Fix reference count for monitored object, passing of constructor
parameter and base monitor property flag
2013-07-11 00:03:54 -03:00
Thiago Santos
1e9b4311c9 pad-monitor: instrument to monitor buffer/event/query/alloc flows
Replace pad functions with monitor functions that can do pre/post
checks and call the original functions
2013-07-10 18:54:57 -03:00
Thiago Santos
ce0e8ab697 qa-monitor: add base class for monitors
The base class adds a 'object' property to hold the monitored object,
it can only be set on construction. Also the constructor now
automatically calls the element set up
2013-07-10 14:15:57 -03:00
Thiago Santos
e04fe10eab qa-bin-monitor: adds a bin monitor
Extends element-monitor to also wrap child elements
2013-07-09 19:20:55 -03:00
Thiago Santos
339ce21a86 qa: renaming Wrapper -> Monitor 2013-07-09 17:38:47 -03:00
Thiago Santos
9b5893b0cd qa-pad-wrapper: adds stub class for pad QA wrapper
Also fixes _new functions to ref the elements intead of
ownership transfers
2013-07-09 16:52:02 -03:00
Thiago Santos
6f2fd90736 qa-element-wrapper: add code for iterating and monitoring pads creation
This will be used to create the wrappers for pads
2013-07-09 16:39:38 -03:00
Thiago Santos
4869921198 gitignore: ignore gst-qa binary 2013-07-09 16:13:00 -03:00
Thiago Santos
7caf6e025f qa: adds gst-qa binary and basic classes to run the QA tests
The classes are mostly a stub for now, but the gst-qa already
has a minimum to start them;
2013-07-09 16:08:30 -03:00