Sebastian Dröge [Wed, 30 May 2012 09:26:30 +0000 (11:26 +0200)]
Automatic update of common submodule
From 3429ba6 to ec1c4a8
Sebastian Dröge [Sun, 13 May 2012 13:58:10 +0000 (15:58 +0200)]
Automatic update of common submodule
From dc70203 to 3429ba6
George Kiagiadakis [Tue, 8 May 2012 13:13:32 +0000 (16:13 +0300)]
omx: Fix spelling mistake found by lintian: s/Seperate/Separate/
George Kiagiadakis [Mon, 30 Apr 2012 20:58:43 +0000 (23:58 +0300)]
Implement a new custom recursive mutex type and fix locking in callbacks so that in-context calls are allowed.
According to the OMX specification, implementations are allowed to call
callbacks in the context of their function calls. However, our callbacks
take locks and this causes deadlocks if the unerlying OMX implementation
uses this kind of in-context calls.
A solution to the problem would be a recursive mutex. However, a normal
recursive mutex does not fix the problem because it is not guaranteed
that the callbacks are called from the same thread. What we see in Broadcom's
implementation for example is:
- OMX_Foo is called
- OMX_Foo waits on a condition
- A callback is executed in a different thread
- When the callback returns, its calling function
signals the condition that OMX_Foo waits on
- OMX_Foo wakes up and returns
The solution I came up with here is to take a second lock inside the callback,
but only if recursion is expected to happen. Therefore, all calls to OMX
functions are guarded by calls to gst_omx_rec_mutex_begin_recursion() / _end_recursion(),
which effectively tells the mutex that at this point we want to allow calls
to _recursive_lock() to succeed, although we are still holding the master lock.
George Kiagiadakis [Fri, 20 Apr 2012 14:51:34 +0000 (14:51 +0000)]
omx: Add hack to disable setting roles to components.
Conflicts:
omx/gstomx.c
George Kiagiadakis [Mon, 30 Apr 2012 23:20:24 +0000 (23:20 +0000)]
omxvideodec: Implement no-empty-eos-buffer hack, as in omxvideoenc.
Conflicts:
omx/gstomxvideodec.c
George Kiagiadakis [Mon, 30 Apr 2012 23:19:55 +0000 (23:19 +0000)]
omxvideodec: Fix coding style in the drain-may-not-return hack code
Arun Raghavan [Wed, 25 Apr 2012 13:33:48 +0000 (19:03 +0530)]
omx: Fix trivial debug print bug
Arun Raghavan [Wed, 25 Apr 2012 13:31:32 +0000 (19:01 +0530)]
omxvideodec: Add hack for Ducati components not returning from drain
This happens on the Galaxy Nexus, and causes the pipeline to hang waiting
endlessly for a drain. The hack replaces the wait with a wait + 500ms timeout.
Arun Raghavan [Wed, 25 Apr 2012 11:05:40 +0000 (16:35 +0530)]
omx: Fix deadlock between ending a flush and the event handler
gst_omx_port_set_flushing() calls OMX_FillThisBuffer at the end of a flush
without releasing the port lock, and this can cause a deadlock with the
EventHandler. This patches fixes this by dropping the lock for the duration of
the fill buffer call.
Sebastian Dröge [Tue, 24 Apr 2012 13:41:38 +0000 (15:41 +0200)]
omx: Update video encoder/decoder base classes from gst-plugins-bad
Sebastian Dröge [Mon, 16 Apr 2012 07:16:10 +0000 (09:16 +0200)]
configure: Modernize autotools setup a bit
Also we now only create tar.bz2 and tar.xz tarballs.
Sebastian Dröge [Mon, 16 Apr 2012 07:12:37 +0000 (09:12 +0200)]
Automatic update of common submodule
Sebastian Dröge [Mon, 16 Apr 2012 06:34:56 +0000 (08:34 +0200)]
omxaudioenc: Use gst_buffer_extract() to copy the input buffer data to the OpenMAX buffer
Alessandro Decina [Fri, 13 Apr 2012 21:16:42 +0000 (17:16 -0400)]
Fix relative/absolute path glitch
Signed-off-by: Reynaldo H. Verdejo Pinochet <reynaldo@collabora.com>
Olivier Crête [Thu, 12 Apr 2012 19:57:32 +0000 (15:57 -0400)]
Port to Gst 0.11
Reynaldo H. Verdejo Pinochet [Wed, 18 Jan 2012 19:53:16 +0000 (16:53 -0300)]
Enable building with Android's buildsystem
This change adds prelimary buildsystem hooks to
build gst-omx with the Android buildsystem. Like
the rest of GStreamer's Android hooks, the process
relies on the availability of androgenizer. A tool
developed by Collabora to automatically generate
Android.mk files from within the auto* setup.
Androgenizer is currently available at:
http://cgit.collabora.com/git/user/derek/androgenizer.git/
Sebastian Dröge [Tue, 13 Dec 2011 09:17:41 +0000 (10:17 +0100)]
basevideocodec: Don't use G_TYPE_REGISTER_BOXED() yet
This would require GLib 2.26.
Jonas Larsson [Wed, 14 Dec 2011 09:09:34 +0000 (10:09 +0100)]
omxaudioenc: Add hack for encoder components that don't allow empty EOS buffers
Jonas Larsson [Wed, 14 Dec 2011 09:07:29 +0000 (10:07 +0100)]
omxvideoenc: Fix deadlock when using the EOS hack
Sebastian Dröge [Mon, 12 Dec 2011 13:26:48 +0000 (14:26 +0100)]
omxvideoenc: Remove workaround for basevideocodec bug
Sebastian Dröge [Mon, 12 Dec 2011 13:26:34 +0000 (14:26 +0100)]
omxvideodec: Remove workaround for basevideocodec bug
Matej Knopp [Mon, 5 Dec 2011 17:57:01 +0000 (17:57 +0000)]
basevideo: Make GstVideoFrame a reference counted boxed object
...and also clear all existing frames when resetting the decoder or encoder.
Sebastian Dröge [Fri, 9 Dec 2011 11:17:29 +0000 (12:17 +0100)]
omx: Add hack for encoder components that don't allow empty EOS buffers
Dake Gu [Fri, 9 Dec 2011 09:21:47 +0000 (10:21 +0100)]
omxaacenc: Generate and set codec_data on the caps for raw AAC
Alessandro Decina [Mon, 31 Oct 2011 10:36:06 +0000 (11:36 +0100)]
basevideoencoder: handle failures in start() and stop()
Vincent Penquerc'h [Fri, 26 Aug 2011 09:50:38 +0000 (10:50 +0100)]
basevideoenc: do not try to calculate latency from an unknown framerate
It'll divide by zero, and latency is unknown for an unknown framerate.
Fixes an assert in the schroenc test.
https://bugzilla.gnome.org/show_bug.cgi?id=657419
Sebastian Dröge [Thu, 8 Dec 2011 10:50:49 +0000 (11:50 +0100)]
basevideoencoder: Only make the header buffer metadata writable, not the buffer
Sebastian Dröge [Thu, 8 Dec 2011 09:18:36 +0000 (10:18 +0100)]
basevideoencoder: Fix handling of force-keyunit events
Sebastian Dröge [Tue, 6 Dec 2011 12:28:41 +0000 (13:28 +0100)]
omxaudioenc: Don't forward EOS events immediately but let all other events be handled by the base class
Previously this logic was inversed, which did not make any sense at all.
Sebastian Dröge [Tue, 6 Dec 2011 11:47:25 +0000 (12:47 +0100)]
omxaudioenc: Use correct timestamp, duration and filled length for the EOS buffers
Sebastian Dröge [Tue, 6 Dec 2011 11:47:12 +0000 (12:47 +0100)]
omxvideodec: Use correct timestamp, duration and filled length for the EOS buffers
Sebastian Dröge [Tue, 6 Dec 2011 11:46:51 +0000 (12:46 +0100)]
omxvideoenc: Use correct timestamp, duration and filled length for the EOS buffers
Sebastian Dröge [Mon, 5 Dec 2011 12:18:09 +0000 (13:18 +0100)]
omx: Improve debugging of buffer handling
Sebastian Dröge [Mon, 5 Dec 2011 07:12:48 +0000 (08:12 +0100)]
omxvideoenc: Drop EOS events in ::finish()
The event will be forwarded downstream from the srcpad
loop function after the last buffer was generated by the
component. Forwarding it after ::finish() will use the
sinkpad streaming thread and does not guarantee that
the encoder is completely drained.
Sebastian Dröge [Thu, 1 Dec 2011 15:20:36 +0000 (16:20 +0100)]
omxvideodec: Properly drop frames due to QoS
Instead of finishing them they should be passed to drop(), which
will then send QoS messages.
Jonas Larsson [Tue, 29 Nov 2011 11:21:32 +0000 (12:21 +0100)]
omxh264enc: Add support for resending headers after a forced-keyframe
Sebastian Dröge [Tue, 29 Nov 2011 11:12:33 +0000 (12:12 +0100)]
basevideoencoder: Pass the all-headers field of the force-key-unit event to the subclass
Sebastian Dröge [Tue, 29 Nov 2011 11:12:04 +0000 (12:12 +0100)]
basevideoencoder: Implement full support for the new force-key-unit event
Including support for the running-time and count fields.
Sebastian Dröge [Tue, 29 Nov 2011 08:31:11 +0000 (09:31 +0100)]
basevideoencoder: Use new force-keyunit event API from gst-plugins-base
Sebastian Dröge [Tue, 29 Nov 2011 08:18:19 +0000 (09:18 +0100)]
basevideoencoder: Adjusting padding is not required for -bad libraries
Sebastian Dröge [Mon, 28 Nov 2011 18:48:01 +0000 (19:48 +0100)]
basevideoencoder: Move some fields to the private part of the instance struct
Sebastian Dröge [Mon, 28 Nov 2011 18:36:56 +0000 (19:36 +0100)]
basevideoencoder: Make headers metadata writable before pushing downstream
The timestamp, duration, etc of the headers has to be changed.
Sebastian Dröge [Mon, 28 Nov 2011 18:35:40 +0000 (19:35 +0100)]
basevideoencoder: Push the downstream force-keyframe event after the next keyframe
Even if the corresponding GstVideoFrame doesn't have the is_sync_point
flag set.
Sebastian Dröge [Mon, 28 Nov 2011 18:29:13 +0000 (19:29 +0100)]
basevideoencoder: Don't push an upstream force-keyunit event downstream
Jonas Larsson [Fri, 25 Nov 2011 10:48:08 +0000 (11:48 +0100)]
basevideoencoder: Add initial support for the all-headers field of the force-keyframe event
See bug #607742.
Tim-Philipp Müller [Fri, 25 Nov 2011 11:37:39 +0000 (11:37 +0000)]
basevideodecoder: some more debug logging
Tim-Philipp Müller [Wed, 23 Nov 2011 20:03:32 +0000 (20:03 +0000)]
basevideodecoder: add API to drop a frame and post a QoS message on the bus
https://bugzilla.gnome.org/show_bug.cgi?id=640017
API: gst_base_video_decoder_drop_frame()
Tim-Philipp Müller [Tue, 22 Nov 2011 23:04:49 +0000 (23:04 +0000)]
docs: fix comment in gst_base_video_decoder_get_max_decode_time() docs
Tim-Philipp Müller [Tue, 22 Nov 2011 19:57:07 +0000 (19:57 +0000)]
basevideodecoder: fix weird event list handling
Get rid of weird code that copies a list manually, taking
ownership of the elements and then frees the old list. Instead,
just take over the old list entirely. (If the intent was to
reverse the list, one could use g_list_reverse() instead).
Then, push events in the list out from last to first (since they
were prepended as they came in) instead of just pushing out the
last in the list and leaking the others.
Sebastian Dröge [Fri, 25 Nov 2011 10:31:58 +0000 (11:31 +0100)]
omxaudioenc: Use audio base classes from gst-plugins-base instead of having our own copies
Sebastian Dröge [Fri, 18 Nov 2011 18:00:31 +0000 (10:00 -0800)]
omxaudioenc: First set ports to flushing before waiting for the srcpad streaming thread to finish
Sebastian Dröge [Fri, 18 Nov 2011 17:59:43 +0000 (09:59 -0800)]
omxvideoenc: First set ports to flushing before waiting for the srcpad streaming thread to finish
Sebastian Dröge [Fri, 18 Nov 2011 17:58:58 +0000 (09:58 -0800)]
omxvideodec: First set ports to flushing before waiting for the srcpad streaming thread to finish
Sebastian Dröge [Thu, 17 Nov 2011 22:38:54 +0000 (14:38 -0800)]
omx: Only disabling of a port is like flushing, enabling is like unflushing
Sebastian Dröge [Thu, 17 Nov 2011 21:33:35 +0000 (13:33 -0800)]
omx: Enabling/disabling a port is also like flushing
The component returns all buffers to us and shouldn't get any
new buffers passed anymore.
Sebastian Dröge [Thu, 17 Nov 2011 19:26:33 +0000 (11:26 -0800)]
omxaudioenc: Signal the drain GCond even if downstream returned an error
Sebastian Dröge [Thu, 17 Nov 2011 19:26:20 +0000 (11:26 -0800)]
omxvideoenc: Signal the drain GCond even if downstream returned an error
Sebastian Dröge [Thu, 17 Nov 2011 19:25:52 +0000 (11:25 -0800)]
omxvideodec: Signal the drain GCond even if downstream returned an error
Sebastian Dröge [Thu, 17 Nov 2011 18:34:19 +0000 (10:34 -0800)]
basevideoencoder: Only call ::reset once in READY->PAUSED
Sebastian Dröge [Thu, 17 Nov 2011 18:19:35 +0000 (10:19 -0800)]
omxaudioenc: Shutdown component in PAUSED->READY and deallocate buffers
Sebastian Dröge [Thu, 17 Nov 2011 18:19:30 +0000 (10:19 -0800)]
omxvideoenc: Shutdown component in PAUSED->READY and deallocate buffers
Sebastian Dröge [Thu, 17 Nov 2011 18:19:10 +0000 (10:19 -0800)]
omxvideodec: Shutdown component in PAUSED->READY and deallocate buffers
Sebastian Dröge [Wed, 16 Nov 2011 20:02:08 +0000 (12:02 -0800)]
omxvideoenc: Set force_keyframe to FALSE after handling it
There's no reason why the base class should forward the event
further downstream if we already handled it and will insert a
keyframe.
Sebastian Dröge [Wed, 16 Nov 2011 19:21:25 +0000 (11:21 -0800)]
omxvideodec: Always push buffers downstream, even if we didn't find a corresponding GstVideoFrame
Sebastian Dröge [Tue, 15 Nov 2011 17:47:55 +0000 (09:47 -0800)]
omx: Fix debug level for flushing in wrong state from ERROR to DEBUG
It's not really an error and doesn't matter at all if flush is called
when the component is not running.
Sebastian Dröge [Tue, 15 Nov 2011 16:40:07 +0000 (08:40 -0800)]
omxh264enc: Detect bytestream stream format and don't put SPS/PPS into the caps for this format
Sebastian Dröge [Tue, 15 Nov 2011 16:28:32 +0000 (08:28 -0800)]
omxvideoenc: Add vfunc for handling the output frames
This can be used by subclasses to override the buffer flags
or to handle some frames differently than the default behaviour.
Sebastian Dröge [Mon, 14 Nov 2011 20:50:26 +0000 (12:50 -0800)]
omxvideodec: Don't release buffers twice if dropping because of QoS
Sebastian Dröge [Mon, 14 Nov 2011 17:13:06 +0000 (09:13 -0800)]
omx: Add XXX to the nOffset reset hack comment for QCOM
Sebastian Dröge [Thu, 10 Nov 2011 14:18:08 +0000 (15:18 +0100)]
omxaudioenc: Make srcpad caps setting threadsafe
Sebastian Dröge [Thu, 10 Nov 2011 14:17:56 +0000 (15:17 +0100)]
omxvideoenc: Make srcpad caps setting threadsafe
Sebastian Dröge [Thu, 10 Nov 2011 14:17:41 +0000 (15:17 +0100)]
omxvideodec: Make srcpad caps setting threadsafe
Sebastian Dröge [Thu, 10 Nov 2011 14:10:14 +0000 (15:10 +0100)]
omxaudioenc: Make the srcpad task and the sinkpad streaming thread handling threadsafe
Sebastian Dröge [Thu, 10 Nov 2011 14:03:05 +0000 (15:03 +0100)]
omxaudioenc: Always flush the ports and make sure no processing is happening in ::flush
This fixes a race condition that happened when seeking
very often in a short period of time.
Sebastian Dröge [Thu, 10 Nov 2011 14:02:22 +0000 (15:02 +0100)]
omxvideoenc: Always flush the ports and make sure no processing is happening in ::reset
This fixes a race condition that happened when seeking
very often in a short period of time.
Sebastian Dröge [Thu, 10 Nov 2011 14:01:36 +0000 (15:01 +0100)]
omxvideoenc: Fix minor race condition when draining after upstream signalled EOS
Sebastian Dröge [Thu, 10 Nov 2011 13:56:19 +0000 (14:56 +0100)]
omxaudioenc: Improve EOS handling
If downstream return UNEXPECTED we should still signal the
drain cond because nothing will trigger this again later.
Sebastian Dröge [Thu, 10 Nov 2011 13:56:11 +0000 (14:56 +0100)]
omxvideoenc: Improve EOS handling
If downstream return UNEXPECTED we should still signal the
drain cond because nothing will trigger this again later.
Sebastian Dröge [Thu, 10 Nov 2011 13:54:33 +0000 (14:54 +0100)]
omxaudioenc: Improve debugging of EOS and draining
Sebastian Dröge [Thu, 10 Nov 2011 13:54:17 +0000 (14:54 +0100)]
omxvideoenc: Improve debugging of EOS and draining
Sebastian Dröge [Thu, 10 Nov 2011 13:51:06 +0000 (14:51 +0100)]
omxvideodec: Log if acquiring buffer for EOS failed
Sebastian Dröge [Thu, 10 Nov 2011 13:42:13 +0000 (14:42 +0100)]
omxvideodec: The component is not started in READY
Sebastian Dröge [Thu, 10 Nov 2011 13:39:40 +0000 (14:39 +0100)]
omxaudioenc: No need to signal the drain cond when going from READY to PAUSED
Also the component is not started in READY
Sebastian Dröge [Thu, 10 Nov 2011 13:40:56 +0000 (14:40 +0100)]
omxvideoenc: No need to signal the drain cond when going from READY to PAUSED
Also the component is not started in READY.
Sebastian Dröge [Wed, 9 Nov 2011 14:46:02 +0000 (15:46 +0100)]
omxvideodec: Always flush the ports and make sure no processing is happening in ::reset
This fixes a race condition that happened when seeking
very often in a short period of time.
Sebastian Dröge [Wed, 9 Nov 2011 14:45:20 +0000 (15:45 +0100)]
omxvideodec: Fix minor race condition when draining after upstream signalled EOS
Sebastian Dröge [Wed, 9 Nov 2011 14:44:11 +0000 (15:44 +0100)]
omxvideodec: Improve EOS handling
If downstream return UNEXPECTED we should still signal the
drain cond because nothing will trigger this again later.
Sebastian Dröge [Wed, 9 Nov 2011 14:43:32 +0000 (15:43 +0100)]
omxvideodec: Improve debugging of EOS and draining
Sebastian Dröge [Wed, 9 Nov 2011 14:42:46 +0000 (15:42 +0100)]
omxvideodec: The component is not started already when going from READY to PAUSED
Sebastian Dröge [Wed, 9 Nov 2011 14:42:13 +0000 (15:42 +0100)]
omxvideodec: No need to signal the drain cond when going from READY to PAUSED
Sebastian Dröge [Wed, 9 Nov 2011 14:41:02 +0000 (15:41 +0100)]
omx: Always reset buffer flags for output ports, even in flushing/error state
Sebastian Dröge [Wed, 9 Nov 2011 08:00:57 +0000 (09:00 +0100)]
omxvideodec: Improve debugging in case of QoS-related frame drops
Sebastian Dröge [Tue, 8 Nov 2011 11:46:31 +0000 (12:46 +0100)]
omxvideoenc: Release the video codec stream lock before acquiring an input buffer
Otherwise the srcpad task might block on this lock and
no buffers ever become available again.
Sebastian Dröge [Tue, 8 Nov 2011 11:45:16 +0000 (12:45 +0100)]
omxaudioenc: Release the audio encoder stream lock before acquiring an input buffer
Otherwise the srcpad task might block on this lock and
no buffers ever become available again.
Sebastian Dröge [Tue, 8 Nov 2011 11:42:58 +0000 (12:42 +0100)]
omxvideodec: Release the video codec stream lock before acquiring an input buffer
Otherwise the srcpad task might block on this lock and
no buffers ever become available again.
Sebastian Dröge [Tue, 8 Nov 2011 10:07:01 +0000 (11:07 +0100)]
omxaudioenc: Don't try to drain the component after EOS
And don't send EOS twice in any case. This most likely
will cause the component to not output it again and
is not necessary anyway.
Sebastian Dröge [Tue, 8 Nov 2011 10:03:29 +0000 (11:03 +0100)]
omxvideoenc: Don't try to drain the component after EOS
And don't send EOS twice in any case. This most likely
will cause the component to not output it again and
is not necessary anyway.
Sebastian Dröge [Tue, 8 Nov 2011 09:46:36 +0000 (10:46 +0100)]
omxvideodec: Don't try to drain the component after EOS
And don't send EOS twice in any case. This most likely
will cause the component to not output it again and
is not necessary anyway.
Sebastian Dröge [Tue, 8 Nov 2011 08:09:28 +0000 (09:09 +0100)]
omxvideodec: Implement dropping of too late frames via QoS