Thiago Santos [Wed, 31 Jul 2013 18:01:13 +0000 (15:01 -0300)]
qa-scenario: avoid assertion on dispose
After an error, the pipeline might still be null, check before unreffing
Thiago Santos [Wed, 31 Jul 2013 18:00:56 +0000 (15:00 -0300)]
qa-scenario: fix typo on define variable
Thiago Santos [Wed, 31 Jul 2013 18:00:33 +0000 (15:00 -0300)]
qa-report: fix typo on assertion comparison
Vincent Penquerc'h [Wed, 31 Jul 2013 10:12:41 +0000 (11:12 +0100)]
gst-qa-element-monitor: do not bypass monitor factory
A pad monitor was created directly. Prefer going through the
factory.
Vincent Penquerc'h [Wed, 31 Jul 2013 10:05:05 +0000 (11:05 +0100)]
gst-qa-reporter: fix use of uninitialized repeat field
Vincent Penquerc'h [Wed, 31 Jul 2013 10:04:32 +0000 (11:04 +0100)]
gst-qa-reporter: fix report leak when discarding repeated report
Vincent Penquerc'h [Wed, 31 Jul 2013 09:49:48 +0000 (10:49 +0100)]
gst-qa: fix build in po
Using a lot of grep and some cargo culting.
Vincent Penquerc'h [Wed, 31 Jul 2013 09:07:53 +0000 (10:07 +0100)]
gst-qa: make tools depend on libraries
This fixes parallel build randomly breaking.
Thiago Santos [Tue, 30 Jul 2013 20:07:13 +0000 (17:07 -0300)]
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
Thiago Santos [Tue, 30 Jul 2013 19:21:15 +0000 (16:21 -0300)]
Fix typos
Thiago Santos [Tue, 30 Jul 2013 19:20:49 +0000 (16:20 -0300)]
qa-runner: Remove printing API from qa-runner
Replace it with functions to list the reports
Vincent Penquerc'h [Tue, 30 Jul 2013 16:17:48 +0000 (12:17 -0400)]
pad-monitor: fix NULL format string
An empty message should be an empty string.
Thiago Santos [Tue, 30 Jul 2013 13:21:13 +0000 (10:21 -0300)]
qa-runner: removing _setup call
Do setup on the _new function directly instead of having a separate
call for that
Thiago Santos [Tue, 30 Jul 2013 12:56:05 +0000 (09:56 -0300)]
qa-override: add more pad overrides for buffer probe and caps
Add override functions for custom checking of buffer probe and
getcaps/setcaps functions.
Thiago Santos [Mon, 29 Jul 2013 20:26:21 +0000 (17:26 -0300)]
pad-monitor: call the event/query/buffer overrides
Use the new event/buffer/query overrides to allow custom checks
on those scenarios
Thiago Santos [Mon, 29 Jul 2013 19:26:52 +0000 (16:26 -0300)]
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
Vincent Penquerc'h [Tue, 30 Jul 2013 09:20:43 +0000 (10:20 +0100)]
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.
Thiago Santos [Mon, 29 Jul 2013 16:17:50 +0000 (13:17 -0300)]
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
Thiago Santos [Mon, 29 Jul 2013 15:01:02 +0000 (12:01 -0300)]
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
Thiago Santos [Mon, 29 Jul 2013 14:35:20 +0000 (11:35 -0300)]
qa-reporter: fix copy n paste left over
Thiago Santos [Mon, 29 Jul 2013 14:34:42 +0000 (11:34 -0300)]
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
Vincent Penquerc'h [Mon, 29 Jul 2013 13:37:46 +0000 (09:37 -0400)]
qa-monitor: chain gst_qa_monitor_finalize to parent's finalize
It was chaining to the parent's dispose.
Thiago Santos [Mon, 29 Jul 2013 13:06:48 +0000 (10:06 -0300)]
gst-qa-report: put the correct format to avoid compiler warnings
Vincent Penquerc'h [Mon, 29 Jul 2013 11:02:30 +0000 (07:02 -0400)]
i18n: copy necessary files in-tree
Vincent Penquerc'h [Mon, 29 Jul 2013 11:20:50 +0000 (07:20 -0400)]
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.
Thiago Santos [Fri, 26 Jul 2013 22:05:31 +0000 (19:05 -0300)]
gst-qa-override-registry: adding the override-registry
This registry should contain the list of GstQaOverride to
be used on the pipelines being monitored
Thiago Santos [Fri, 26 Jul 2013 03:14:02 +0000 (00:14 -0300)]
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
Thiago Santos [Fri, 26 Jul 2013 02:25:22 +0000 (23:25 -0300)]
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.
Thibault Saunier [Wed, 24 Jul 2013 23:09:14 +0000 (19:09 -0400)]
qa: Make it possible to set a scenario from the command line in test apps
Thibault Saunier [Tue, 23 Jul 2013 14:13:06 +0000 (10:13 -0400)]
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
Thibault Saunier [Tue, 23 Jul 2013 12:55:24 +0000 (08:55 -0400)]
reporter: Use Gst debugging log in the _report method directly
Using __VALIST__ was not properly working
+ Add a gstqareporter debug category
Thibault Saunier [Mon, 22 Jul 2013 23:22:49 +0000 (19:22 -0400)]
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.
Thibault Saunier [Mon, 22 Jul 2013 23:17:53 +0000 (19:17 -0400)]
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
Thibault Saunier [Sat, 20 Jul 2013 04:18:13 +0000 (00:18 -0400)]
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.
Thiago Santos [Wed, 24 Jul 2013 19:04:03 +0000 (16:04 -0300)]
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.
Thiago Santos [Wed, 24 Jul 2013 13:05:31 +0000 (10:05 -0300)]
pad-monitor: remove already solved TODOs
Thiago Santos [Wed, 24 Jul 2013 12:51:05 +0000 (09:51 -0300)]
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
Thiago Santos [Tue, 23 Jul 2013 18:18:51 +0000 (15:18 -0300)]
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.
Thiago Santos [Tue, 23 Jul 2013 18:10:33 +0000 (15:10 -0300)]
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
Thiago Santos [Tue, 23 Jul 2013 15:52:22 +0000 (12:52 -0300)]
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
Edward Hervey [Tue, 23 Jul 2013 15:14:26 +0000 (12:14 -0300)]
gst-qa: show help and exit when no arguments are provided
Instead of attempting to create empty pipelines and weird things
happening :)
Thiago Santos [Tue, 23 Jul 2013 15:11:08 +0000 (12:11 -0300)]
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
Thiago Santos [Tue, 23 Jul 2013 14:51:07 +0000 (11:51 -0300)]
pad-monitor: only merge caps if they exist
Downtream can not be linked, so we shouldn't try to merge
NULL caps
Thiago Santos [Mon, 22 Jul 2013 23:50:02 +0000 (20:50 -0300)]
configure: add nano version to enable Werror
Thiago Santos [Mon, 22 Jul 2013 23:09:35 +0000 (20:09 -0300)]
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
Thiago Santos [Mon, 22 Jul 2013 23:09:07 +0000 (20:09 -0300)]
pad-monitor: improve timestamp ranges comparison message a little
Show the buffer range that is being compared.
Thiago Santos [Mon, 22 Jul 2013 18:05:04 +0000 (15:05 -0300)]
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
Thiago Santos [Mon, 22 Jul 2013 12:50:23 +0000 (09:50 -0300)]
pad-monitor: add check for setcaps passing audio/video fields
Checks that the common audio/video fields are correctly passed
downstream after a setcaps
Thiago Santos [Fri, 19 Jul 2013 19:52:45 +0000 (16:52 -0300)]
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
Thiago Santos [Fri, 19 Jul 2013 19:52:11 +0000 (16:52 -0300)]
element-monitor: add is_encoder flag
Easy access to knowing if the monitored element is an encoder
Thibault Saunier [Thu, 18 Jul 2013 20:53:46 +0000 (16:53 -0400)]
qa-transcoding: Add a binary program to easily test transcoding
Thibault Saunier [Thu, 18 Jul 2013 22:20:09 +0000 (18:20 -0400)]
monitor(s): Avoid trying to disconnect handlers on instances that do not exist anymore
Thibault Saunier [Thu, 18 Jul 2013 21:49:44 +0000 (17:49 -0400)]
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.
Thibault Saunier [Thu, 18 Jul 2013 17:59:11 +0000 (13:59 -0400)]
qa-pad-monitor: Do not use gst_private.h
Thiago Santos [Fri, 19 Jul 2013 14:14:39 +0000 (11:14 -0300)]
docs: add design and usage docs
Thiago Santos [Fri, 19 Jul 2013 12:57:07 +0000 (09:57 -0300)]
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.
Thiago Santos [Thu, 18 Jul 2013 17:49:23 +0000 (14:49 -0300)]
pad-monitor: fix combined flow checks
We can only check if we found a downstream monitor
Thiago Santos [Thu, 18 Jul 2013 17:49:01 +0000 (14:49 -0300)]
pad-monitor: fix caps field type checks
The type is GstValueList and not GArray
Thiago Santos [Thu, 18 Jul 2013 17:48:46 +0000 (14:48 -0300)]
pad-monitor: improve report messages with arguments
Thibault Saunier [Thu, 18 Jul 2013 16:11:00 +0000 (12:11 -0400)]
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.
Thibault Saunier [Thu, 18 Jul 2013 16:00:29 +0000 (12:00 -0400)]
qa-pad-monitor: Properly set target_name with as much info as possible
Thibault Saunier [Thu, 18 Jul 2013 15:49:54 +0000 (11:49 -0400)]
qa-monitor: Add a target name field that can be used even when the target is freed
Thibault Saunier [Thu, 18 Jul 2013 15:49:25 +0000 (11:49 -0400)]
qa-monitor: Make the reference to the target a weak reference
Thiago Santos [Thu, 18 Jul 2013 15:09:13 +0000 (12:09 -0300)]
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
Thibault Saunier [Thu, 18 Jul 2013 14:59:11 +0000 (10:59 -0400)]
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.
Thibault Saunier [Thu, 18 Jul 2013 00:21:53 +0000 (20:21 -0400)]
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.
Thibault Saunier [Wed, 17 Jul 2013 23:56:52 +0000 (19:56 -0400)]
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
Thibault Saunier [Wed, 17 Jul 2013 23:18:49 +0000 (19:18 -0400)]
qa-monitor: Allow detaill message to be in printf format
So we can give proper informations about what is wrong to users
Thiago Santos [Thu, 18 Jul 2013 00:46:37 +0000 (21:46 -0300)]
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.
Thiago Santos [Wed, 17 Jul 2013 23:40:50 +0000 (20:40 -0300)]
pad-monitor: fix copy n paste mistake
Do not use GstFlowReturn where a boolean is expected
Thiago Santos [Wed, 17 Jul 2013 23:40:38 +0000 (20:40 -0300)]
pad-monitor: fix initialization of timestamp ranges
Thiago Santos [Wed, 17 Jul 2013 20:57:39 +0000 (17:57 -0300)]
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
Thiago Santos [Wed, 17 Jul 2013 17:36:44 +0000 (14:36 -0300)]
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
Thiago Santos [Wed, 17 Jul 2013 14:31:38 +0000 (11:31 -0300)]
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;
Thiago Santos [Wed, 17 Jul 2013 03:33:42 +0000 (00:33 -0300)]
pad-monitor: add check for out of segment buffers
Thiago Santos [Wed, 17 Jul 2013 03:30:21 +0000 (00:30 -0300)]
pad-monitor: track current buffer timestamp and duration
This can be used to make sure outgoing buffers match the input
timestamps
Thiago Santos [Wed, 17 Jul 2013 03:29:38 +0000 (00:29 -0300)]
pad-monitor: check for when a flush start isn't expected
Complain when an unexpected flush-start is received
Thiago Santos [Wed, 17 Jul 2013 03:29:04 +0000 (00:29 -0300)]
pad-monitor: add checks for raw caps completeness
Check audio and video raw caps returned from getcaps for expected
fields and types
Thiago Santos [Wed, 17 Jul 2013 03:25:11 +0000 (00:25 -0300)]
qa-monitor: Fix typo in printf format for report debug messages
Stringify the arguments correctly for printing
Thiago Santos [Wed, 17 Jul 2013 02:19:13 +0000 (23:19 -0300)]
pad-monitor: first buffer checks
Check that a newsegment is received before the first buffer and that
the first buffer running time is 0
Thiago Santos [Wed, 17 Jul 2013 00:15:09 +0000 (21:15 -0300)]
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.
Thiago Santos [Tue, 16 Jul 2013 12:17:44 +0000 (09:17 -0300)]
pad-monitor: add stubs for getcaps/setcaps function wrapping
Thiago Santos [Tue, 16 Jul 2013 11:06:27 +0000 (08:06 -0300)]
pad-monitor: add check for out of segment buffer data
Thiago Santos [Mon, 15 Jul 2013 13:15:06 +0000 (10:15 -0300)]
qa-report: use gst_util_get_timestamp for report times
Makes it more aligned with GST_DEBUG output
Thiago Santos [Mon, 15 Jul 2013 12:27:34 +0000 (09:27 -0300)]
pad-monitor: split event checks for src and sink pads
Keeping those handlers separate should keep the code smaller and
easier to understand
Thiago Santos [Fri, 12 Jul 2013 19:02:25 +0000 (16:02 -0300)]
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
Thiago Santos [Fri, 12 Jul 2013 18:42:56 +0000 (15:42 -0300)]
qa-element-monitor: check if the element is a decoder
This can be used on checks for timestamps being inside segment
Thiago Santos [Fri, 12 Jul 2013 17:18:22 +0000 (14:18 -0300)]
pad-monitor: add probes for src pads
To be used for further monitoring events and buffers for
src pads
Thiago Santos [Fri, 12 Jul 2013 16:32:08 +0000 (13:32 -0300)]
qa-report: add a timestamp to error reports
Thiago Santos [Fri, 12 Jul 2013 05:10:06 +0000 (02:10 -0300)]
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
Thiago Santos [Fri, 12 Jul 2013 04:23:48 +0000 (01:23 -0300)]
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
Thiago Santos [Fri, 12 Jul 2013 03:41:43 +0000 (00:41 -0300)]
qa-monitor: add runner property
runner stores the GstQaRunner that will receive the error reports
from the monitors
Thiago Santos [Thu, 11 Jul 2013 16:43:52 +0000 (13:43 -0300)]
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
Thiago Santos [Thu, 11 Jul 2013 16:41:25 +0000 (13:41 -0300)]
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
Thiago Santos [Thu, 11 Jul 2013 05:07:41 +0000 (02:07 -0300)]
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
Thiago Santos [Thu, 11 Jul 2013 03:05:17 +0000 (00:05 -0300)]
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
Thiago Santos [Thu, 11 Jul 2013 03:04:41 +0000 (00:04 -0300)]
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
Thiago Santos [Thu, 11 Jul 2013 03:03:54 +0000 (00:03 -0300)]
qa-monitor: fix various start up issues
Fix reference count for monitored object, passing of constructor
parameter and base monitor property flag
Thiago Santos [Wed, 10 Jul 2013 21:38:09 +0000 (18:38 -0300)]
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
Thiago Santos [Wed, 10 Jul 2013 17:03:49 +0000 (14:03 -0300)]
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