Commit graph

124 commits

Author SHA1 Message Date
Sebastian Dröge
00be69f4a0 omxvideodec: Disable output port when setting a new format
Based on a patch by Josep Torra <n770galaxy@gmail.com>
2013-03-11 10:22:07 +01:00
Sebastian Dröge
65174bbd7f omx: Catch errors when releasing buffers to a port and handle them 2013-03-11 10:04:10 +01:00
Josep Torra
bd071327da omx: Fix deadlock in encoders and add explainatory comments. 2013-03-09 14:14:40 +01:00
Josep Torra
7423e3e023 omxvideodec: fix printf format identifier 2013-03-09 13:27:08 +01:00
Josep Torra
cde5df17fa omx: Minor changes on debuging info 2013-03-09 13:24:30 +01:00
Josep Torra
6d8bf76391 omxvideodec: avoid a deadlock 2013-03-09 13:24:16 +01:00
Sebastian Dröge
aa6be53375 omxvideodec: Don't forget to populate output port 2013-03-08 15:58:01 +01:00
Sebastian Dröge
c014b1c9a3 omx: Flush and stop srcpad when configuring new caps 2013-03-08 15:50:20 +01:00
Sebastian Dröge
ed0de9d699 omxvideodec: Only negotiate a color format with downstream on the initial caps 2013-03-07 17:38:40 +01:00
Sebastian Dröge
bbd30a96bd omxvideodec: Make sure the output port is disabled while we allocate buffers 2013-03-07 17:29:43 +01:00
Sebastian Dröge
0cd96e8c6b omxvideodec: Add buffer pool for sharing OpenMAX memory with downstream 2013-03-07 14:10:12 +01:00
Sebastian Dröge
7a1eaec3b9 omx: Add timeout to the flush operation and move buffer populating to a separate function 2013-03-07 13:57:00 +01:00
Sebastian Dröge
60861f3990 omx: Do number of buffers configuration explicitely 2013-03-07 13:56:44 +01:00
Josep Torra
cc495aeb16 omxvideodec: fixes reconfiguration
Avoid having fixed fields from previous caps on reconfiguration.
2013-03-07 11:24:54 +01:00
Sebastian Dröge
687a188dad omxvideo{dec,enc}: Don't use the input state if it wasn't set yet 2013-03-01 11:44:17 +01:00
Sebastian Dröge
63e0d61971 omxvideodec: Only enable the output port after we know the output format 2013-03-01 11:21:25 +01:00
Sebastian Dröge
aeec430261 omx: Return the OMX_ERRORTYPE from gst_omx_port_update_port_definition 2013-02-28 15:49:14 +01:00
Sebastian Dröge
1a906da409 omx: Add API for allocating a specific number of buffers and using EGLImages or buffers allocated elsewhere 2013-02-28 11:20:52 +01:00
Sebastian Dröge
e42faae652 omx: Refactor code flow a bit if output port settings have changed 2013-02-27 16:56:02 +01:00
Sebastian Dröge
b12610efd7 omx: Clean up port settings change handling 2013-02-27 15:50:20 +01:00
Josep Torra
26b69d99a2 omxvideodec: initialize param structure before using it 2013-02-27 11:30:14 +01:00
Josep Torra
3973425689 omxvideodec: prevent a NULL pointer access 2013-02-26 17:25:49 +01:00
Sebastian Dröge
5b45cb0810 omx: Auto-detect the port indizes if possible 2013-02-25 12:42:05 +01:00
Sebastian Dröge
3e090dd83b omx: Refactor querying of component supported caps into its own function 2013-02-25 11:42:38 +01:00
Sebastian Dröge
70368c31cd omx: Refactor waiting for buffers to be released by the component to a separate function 2013-02-25 10:41:12 +01:00
Sebastian Dröge
e08b801fea omxvideodec: Rename component variable 2013-02-25 09:19:08 +01:00
Sebastian Dröge
219a93bbaf omx: Some minor refactoring and cleanup 2013-02-12 11:49:21 +01:00
Sebastian Dröge
c3bcc43db7 omx: Split enabling/disabling of port into sending the command and waiting for it
This allows to do anything necessary after sending the command to actually let it finish
2013-02-12 11:41:43 +01:00
Sebastian Dröge
be31e7273b omx: Fix some memory leaks and suboptimal locking 2013-01-14 10:36:57 +01:00
Sebastian Dröge
2fd8d72c50 omxvideodec: Fix copying of the video frames from the OMX buffers 2013-01-14 10:36:38 +01:00
Sebastian Dröge
1bf69c8f69 omxvideodec: Set the OMX buffer nFilledLength field properly 2012-12-20 19:30:38 +01:00
Sebastian Dröge
1d01c0ebf0 omx: Fix ununsed variable compiler warning 2012-12-20 12:30:05 +01:00
Sebastian Dröge
83b4c1d892 omx: No need to start the srcpad task in ::start() already
It will be started properly after the caps are set.
2012-12-20 12:27:47 +01:00
Sebastian Dröge
4ef40839a2 omxvideodec: OMX_ErrorNoMore is no error and just means we ended iteration 2012-12-20 12:23:49 +01:00
Sebastian Dröge
f90a6ed9e9 omx: Improve debug output 2012-12-20 12:20:31 +01:00
Sebastian Dröge
f6f078e847 omxvideodec: Don't forget to free a GList 2012-12-20 12:02:30 +01:00
Sebastian Dröge
20280afa1f omxvideodec: Map OMX_COLOR_FormatYUV420PackedPlanar to I420 too
This is used on the Raspberry Pi.
2012-12-20 11:56:29 +01:00
Sebastian Dröge
a80e2b9053 omxvideodec: During negotiation of the output format make sure we use the correct OpenMAX format 2012-12-20 11:55:36 +01:00
Sebastian Dröge
07e0d674a0 omxvideodec: If negotiation fails this could also mean that the component can't do it at this point yet 2012-12-20 11:42:17 +01:00
Sebastian Dröge
7354baec66 omxvideodec: Improve format negotiation a bit
Don't leak caps and make sure to fixate caps.
2012-12-20 11:40:28 +01:00
Sebastian Dröge
9c464924a5 omxvideodec: Extract data from the input buffer, not the codec data 2012-12-19 12:44:31 +01:00
Sebastian Dröge
7fa4616598 omx: Fix refcount problem with frames being dropped because of decoder bugs 2012-11-12 15:14:09 +01:00
Sebastian Dröge
2481ceb8c4 omx: Update to new GLib thread API 2012-11-12 11:29:48 +01:00
Sebastian Dröge
bced70525a omx: Use open/close vfuncs 2012-10-22 14:34:53 +02:00
Sebastian Dröge
9d0e582484 omx: Handle video meta correctly 2012-10-22 14:28:04 +02:00
Sebastian Dröge
5fdb490f1a omx: Port to video base classes from -base 2012-10-22 14:20:41 +02:00
Sebastian Dröge
e84fee6488 omx: Fix compilation after gst_pad_start_task() API changes 2012-06-20 11:09:13 +01:00
George Kiagiadakis
158775f497 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.
2012-05-07 17:01:16 +03:00
George Kiagiadakis
7ca067be28 omxvideodec: Implement no-empty-eos-buffer hack, as in omxvideoenc.
Conflicts:

	omx/gstomxvideodec.c
2012-05-03 12:24:43 +02:00
George Kiagiadakis
4aa3fa8a0d omxvideodec: Fix coding style in the drain-may-not-return hack code 2012-05-03 12:20:05 +02:00