Sebastian Dröge
b44724f662
androidmedia: Actually print the stacktrace into the error string
2014-06-02 12:39:49 +02:00
Sebastian Dröge
40fb09544f
androidmedia: Clear the exception before trying to call Java methods to convert it to a string
2014-06-02 11:28:43 +02:00
Sebastian Dröge
0c93a82861
androidmedia: Fix crashes when loading the plugin in a standalone application on Android >= 4.4
...
Check if libnativehelper is loaded in the process and if
it has these awful wrappers for JNI_CreateJavaVM and
JNI_GetCreatedJavaVMs that crash the app if you don't
create a JniInvocation instance first. If it isn't we
just fail here and don't initialize anything.
See this code for reference:
https://android.googlesource.com/platform/libnativehelper/+/master/JniInvocation.cpp
2014-06-02 11:18:38 +02:00
Sebastian Dröge
f844af2320
androidmedia: Add exceptions from the Java API to error messages, and post more error/warning messages overall
2014-05-30 16:36:11 +02:00
Sebastian Dröge
440574d963
androidmedia: Add a GError argument to all amc methods and catch exceptions there
2014-05-30 15:25:25 +02:00
Sebastian Dröge
22b5abf86c
androidmedia: Describe exceptions happening when scanning all codecs
2014-05-30 15:25:21 +02:00
Sebastian Dröge
3cf4c8cad1
androidmedia: Add API to convert an exception into a string
2014-05-30 15:25:21 +02:00
Jorge Zapata
ad82575693
Release the codec before freeing it
...
On Samsung Galaxy S4 it is impossible to have more than one
hardware decoder at the same time. If we do not release it
explicitly the GC only releases it whenever the whole application
is finished not whenever the activity is finished and thus a player
will not be able to work correctly
2014-05-30 12:40:59 +02:00
Sebastian Dröge
81716909fe
Revert "androidmedia: Place some const keywords in a few places"
...
This reverts commit 3078b3a34c
.
gst_video_frame_map() doesn't take a const GstVideoInfo*, so
all this is rather useless.
2014-05-27 08:51:39 +02:00
Sebastian Dröge
3078b3a34c
androidmedia: Place some const keywords in a few places
2014-05-26 16:31:11 +02:00
Chen Jie
8e0bbc9e32
androidmedia: add gst_amc_color_format_copy
...
gst_amc_color_format_copy will copy in/out a frame resides at a
GstAmcBuffer. Lots of codes in gst_amc_video_*_fill_buffer are moved to
this new function.
2014-05-26 16:29:01 +02:00
Chen Jie
557d6b974f
androidmedia: move create_src|sink_caps to gstamc.c
...
Some hack logic needs also to be present in create_src|sink_caps, for
working around some broken codecs. These hacks are hidden
in color_format/video_format conversion -- the prototypes of these
functions are also changed to include more args for hack judgement.
Also in case of multi-color_formats mapped to one video_format, then
map that video_format back will not give the original color_format, which
causes gst_amc_codec_configure failed with something like
'does not support color format N'.
The new prototype involves with GstAmcCodecInfo and mime, which
ensures the converted color_format is supported by the codec.
A COLOR_FormatYCbYCr to GST_VIDEO_FORMAT_YUY2 mapping is also added, in
order to work around bugs in OMX.k3.video.decoder.avc(which incorrectly
reports supporting COLOR_FormatYCbYCr, which is actually
COLOR_FormatYUV420SemiPlanar). There are already hacks for this in
gst_amc_video_format_to_color_format, gst_amc_color_format_to_video_format
and gst_amc_color_format_info_set, but the codec will still not work(be
ignored because of "has unknown color formats") without adding this mapping.
2014-05-26 16:29:01 +02:00
Chen Jie
27f4d8237f
amcvideoenc: Unit of bitrate property is now bit/sec
...
https://bugzilla.gnome.org/show_bug.cgi?id=705129
2014-05-26 12:10:44 +02:00
Jorge Zapata
738da7835f
androidmedia: Add a new QCOM color format
...
It is a NV12 based, aligned to 32 bytes
https://bugzilla.gnome.org/show_bug.cgi?id=730635
2014-05-23 15:19:36 +02:00
Sebastian Dröge
158caf952d
androidmedia: First try to get symbols from the current program, then load libdvm
...
If the application is using the new ART runtime it will otherwise
load dalvik and start a dalvik VM next to the ART VM.
Does not work very well obviously.
2014-05-23 15:13:28 +02:00
Chen Jie
22c0464aa6
androidmedia: add support for video encoding
...
https://bugzilla.gnome.org/show_bug.cgi?id=705129
2014-05-23 09:37:54 +02:00
Sebastian Dröge
5b23cf694c
amcaudiodec: Calculate number of samples per frame for MP3 and use that
...
Some audio decoders (at least the MP3 decoder on MTK based devices) outputs
raw audio in batches of multiple audio frames. We need to handle that
properly, otherwise the base class will be kind of unhappy.
2014-02-14 12:51:50 +01:00
Sebastian Dröge
aeeeedd7c7
amcaudiodec: Error out if we get an invalid raw audio buffer size
2014-02-14 12:51:50 +01:00
Sebastian Dröge
cea218db6f
amcvideodec: Store return value of gst_caps_merge_structure()
...
The inputs are both invalid afterwards.
2014-02-14 12:51:50 +01:00
Sebastian Dröge
faf48d26bf
amcvideodec: Release buffer to Android if allocating output failed
2014-02-14 12:51:50 +01:00
Sebastian Dröge
2476b926b1
amcaudiodec: Release buffer back to Android if allocating output fails
2014-02-14 12:51:50 +01:00
Sebastian Dröge
30d80bf658
androidmedia: Don't handle FLUSHING or NOT_LINKED as error
...
And also just stop the task for FLUSHING.
2014-01-25 17:41:18 +01:00
Jorge Zapata
c9abe8c50d
amcvideodec: Add the divx variant for mpeg4 video
...
Looks like all the mpeg4 video decoders also accept the divx
variants. So we better add those caps too
https://bugzilla.gnome.org/show_bug.cgi?id=711163
2014-01-14 20:49:24 +01:00
Jan Schmidt
1df82fc14f
androidmedia: Add new color format, and enhance debug output
...
Add a new color format seen on my Galaxy S3
(OMX_SEC_COLOR_FormatNV12Tiled = 0x7fc00002) to the table,
but don't actually implement it - the decoder doesn't choose it.
Remove an assert that makes the plugin fail noisily and take the app down
if it sees a color format it doesn't recognise (just skip the codec instead)
Modify the debug output when plugin scanning to print color format info to
make this sort of thing easier in the future.
2013-12-31 23:24:06 +11:00
Sebastian Dröge
219275dbb6
amcvideodec: Use new gst_video_decoder_set_needs_format() API
2013-12-05 11:50:17 +01:00
Andoni Morales Alastruey
786f5e4f7c
androidmedia: fix rank for more software decoders
...
In Galaxy S4 the codecs list contains some OMX.SEC.foo.sw.dec
as software decoders
https://bugzilla.gnome.org/show_bug.cgi?id=711214
2013-10-31 16:38:41 +01:00
Andoni Morales Alastruey
6b49683447
androidmedia: fix access to invalid buffers in the decoding loop
...
Flushing the decoder invalidates all buffers, so it should be done
after quiting the decoding loop. Otherwise we can jump into
"failed_release" and stop everything
https://bugzilla.gnome.org/show_bug.cgi?id=711156
2013-10-30 16:24:17 +01:00
Chen Jie
b05a1f75fd
androidmedia: make gst_amc_avc_profile_from_string recognize alt name
...
https://bugzilla.gnome.org/show_bug.cgi?id=710433
2013-10-18 10:01:43 +01:00
Sebastian Dröge
2b94641a42
amcvideodec: Don't put the level restrictions on the sinkpad caps
...
They tend to be inaccurate and having them in the sinkpad caps
prevents playback of files that would otherwise play fine.
2013-09-12 13:23:28 +02:00
Sebastian Dröge
d065c09684
amcvideodec: Port tiled NV12 conversion to 1.0
2013-09-03 11:06:00 +02:00
Sebastian Dröge
c4e742f428
amcvideodec: Add FIXME comment
2013-09-03 11:06:00 +02:00
Jorge Luis Zapata
48484f04a2
androidmedia: add support for a new qualcomm colorspace
2013-09-03 11:06:00 +02:00
Sebastian Dröge
2e8af6973f
ext: Use new flush vfunc of video codec base classes and remove reset implementations
2013-08-15 15:46:58 +02:00
Edward Hervey
97426a1caa
all: Fix for GST_DISABLE_GST_DEBUG
...
Where applicable, remove methods that don't do anything different than
the default implementation.
2013-07-29 09:42:12 +02:00
Xavi Artigas
85c1510d6b
androidmedia: Fix copying of raw video frames on Samsung Galaxy S3 with Exynos 4 SOC
2013-06-20 09:53:41 +02:00
Sebastian Dröge
17699d07e7
androidmedia: Fix string comparison
2013-06-07 14:01:46 +02:00
Chen Jie
a36c9c1cc9
androidmedia: Hacks for HuaweiMediaPad which reports wrong color format
...
COLOR_FormatYCbYCr is reported but it is actually COLOR_TI_FormatYUV420PackedSemiPlanar.
2013-06-07 11:08:52 +02:00
Sebastian Dröge
e66f097f37
androidmedia: Fix indention
2013-05-20 13:24:07 +02:00
Chen Jie
0a90994b99
androidmedia: fix a minor error in COLOR_FormatYUV420Planar converting
...
https://bugzilla.gnome.org/show_bug.cgi?id=700521
2013-05-20 13:23:52 +02:00
Sebastian Dröge
a887497d18
amcaudiodec: Properly set output format instead of just setting caps
2013-04-16 16:23:46 +02:00
Sebastian Dröge
055154fe78
androidmedia: Set parent class in class_init
2013-04-16 16:17:50 +02:00
Sebastian Dröge
7832b9b43f
androidmedia: Handle refcounts of pad templates correctly
...
gst_pad_template_new() does not take ownership of caps anymore and
gst_element_class_add_pad_template() does take ownership of the
pad template now.
2013-04-16 16:00:30 +02:00
Sebastian Dröge
fd8defc525
amcaudiodec: Use 1.0-style raw audio caps
2013-04-16 15:32:01 +02:00
Sebastian Dröge
75493a7731
androidmedia: Properly set subclasses metadata/pad templates in base_init
2013-04-16 15:31:34 +02:00
Sebastian Dröge
f17ebca62a
amcvideodec: Fix refcount problem with frames being dropped because of decoder bugs
2012-11-12 14:58:00 +01:00
Sebastian Dröge
b2e5b9cb67
androidmedia: Update to new GLib thread API
2012-11-12 11:32:44 +01:00
Sebastian Dröge
92fffc8cbe
androidmedia: Skip Aricent codecs for now
...
The HTC One X claims to have one (but doesn't) and loading
the library for it hangs forever.
2012-11-01 13:55:54 +01:00
Sebastian Dröge
1d9d3c1c30
androidmedia: Remember and use input state
2012-10-25 14:05:48 +02:00
Sebastian Dröge
079c68e4de
androidmedia: Port to 1.0
2012-10-25 14:05:48 +02:00
Sebastian Dröge
80533fa3a3
androidmedia: Add missing file
2012-10-16 11:33:50 +02:00
Sebastian Dröge
6fa3f058b1
androidmedia: Rename plugin
2012-10-15 16:37:54 +02:00
Sebastian Dröge
5e954a7d0a
androidmedia: Make everything buildable
2012-10-15 16:28:43 +02:00
Sebastian Dröge
f3682a0a6b
Don't try to use the NVidia DRM codecs
2012-10-15 16:28:43 +02:00
Sebastian Dröge
31f0f163bd
Try to handle format changes more gracefully
...
And make stop() faster and more robust
2012-10-15 16:28:43 +02:00
Sebastian Dröge
b0b642d8ab
Add workaround for Google MP3 decoder outputting garbage in first output buffer
...
And assume one decoded input frame per output buffer to fix timestamp
handling by the base class.
2012-10-15 16:28:43 +02:00
Sebastian Dröge
2f3b2c586f
Also add some more output format checks to the audio decoder
2012-10-15 16:28:42 +02:00
Sebastian Dröge
a870e6a5c3
Check output format metadata some more
...
And implement workaround for NVidia Tegra 3 not setting the slice_height.
Thanks to Josep Torra for debugging this issue.
2012-10-15 16:28:42 +02:00
Sebastian Dröge
7341ed62fa
Add some more default channel layouts, these should be good for AAC at least
2012-10-15 16:28:42 +02:00
Sebastian Dröge
6ed3ea7cad
Don't set timestamps, the baseclass handles this for us anyway
2012-10-15 16:28:42 +02:00
Sebastian Dröge
86176bd2a2
List profiles in reverse to minimize caps
2012-10-15 16:28:42 +02:00
Sebastian Dröge
fc5a18c091
Iterate levels in reverse order to minimize caps
2012-10-15 16:28:42 +02:00
Sebastian Dröge
0b0255ed12
Merge structures into caps instead of appending them
2012-10-15 16:28:42 +02:00
Sebastian Dröge
9f7ed3f180
Use orc_memcpy() instead of memcpy() as it should be faster for larger memory areas
2012-10-15 16:28:42 +02:00
Sebastian Dröge
7a53743bfd
Add support for audio/mpeg-L2 for the Nexus 7
2012-10-15 16:28:42 +02:00
Sebastian Dröge
3159b7b5dd
Add support for MPEG1/2 video
2012-10-15 16:28:42 +02:00
Sebastian Dröge
41862dff59
Ignore the *law and Vorbis decoders
...
They are broken unfortunately.
2012-10-15 16:28:42 +02:00
Sebastian Dröge
f098ae6b88
Add FIXME comment for not handling odd widths/height with the TI hardware decoders
...
Must likely an issue with the codec itself though.
2012-10-15 16:28:42 +02:00
Sebastian Dröge
42d11e8c1b
Fix handling of I420 buffers with odd width
2012-10-15 16:28:41 +02:00
Sebastian Dröge
cb6f703669
Only mpegversion=4 is supported for AAC
2012-10-15 16:28:41 +02:00
Sebastian Dröge
742816df69
Remove some obsolete FIXMEs
2012-10-15 16:28:41 +02:00
Sebastian Dröge
f839a615a0
Fix flushing logic to unbreak handling of flushing seeks
2012-10-15 16:28:41 +02:00
Sebastian Dröge
bc7d2006e3
Fix chroma stride for I420 stride/crop conversion
2012-10-15 16:28:41 +02:00
Sebastian Dröge
7dbef6415f
Fix Vorbis decoding
2012-10-15 16:28:41 +02:00
Sebastian Dröge
562b033872
Wait at most 100ms for dequeueing a buffer, and retry after that
...
Some codecs don't fail the dequeueing if the codec is flushed,
causing deadlocks when shutting down the element.
2012-10-15 16:28:41 +02:00
Sebastian Dröge
9a034f2beb
Release output buffers a bit earlier
2012-10-15 16:28:41 +02:00
Sebastian Dröge
4c3617f7f0
Keep another reference of the input buffer in handle_frame()
...
It might be unreffed in the meantime by the other thread due
to finish_frame().
2012-10-15 16:28:41 +02:00
Sebastian Dröge
613a75ad92
Pass -1 as number of frames to the base class
...
This will automatically do the right thing if timestamps are good enough
2012-10-15 16:28:41 +02:00
Sebastian Dröge
0143418e0c
Use correct buffer variable
2012-10-15 16:28:41 +02:00
Sebastian Dröge
bb8e53d4b8
Always pass 1 as number of frames to finish_frame()
2012-10-15 16:28:41 +02:00
Sebastian Dröge
99e287b86b
Correctly remember number of channels and samplerate
2012-10-15 16:28:40 +02:00
Sebastian Dröge
efac01d096
Don't unref input buffer from handle_frame(), it's owned by the baseclass
2012-10-15 16:28:40 +02:00
Sebastian Dröge
3c40a9ca56
Remove invalid GST_ERROR() call
2012-10-15 16:28:40 +02:00
Sebastian Dröge
b07cd212ac
Only try to get the channel-mask if it is set
2012-10-15 16:28:40 +02:00
Sebastian Dröge
afbc23ceed
Add support for FLAC
2012-10-15 16:28:40 +02:00
Sebastian Dröge
b64e57ce42
Fix src template caps
2012-10-15 16:28:40 +02:00
Sebastian Dröge
6cc535581f
Fix plugin initialization
2012-10-15 16:28:40 +02:00
Sebastian Dröge
77fbaae250
Add support for audio decoders, completely untested so far
2012-10-15 16:28:40 +02:00
Sebastian Dröge
de5375da81
Only set the SYNC_FRAME flag on the first buffer if we need to split the input
2012-10-15 16:28:40 +02:00
Sebastian Dröge
290d6f61c5
Ignore codecs with unknown color formats for stability purposes
...
They can be registered nonetheless if an environment variable
or compile-time #define is set.
2012-10-15 16:28:40 +02:00
Sebastian Dröge
65448a3790
Implement cropping and correctly handle the different color formats
2012-10-15 16:28:40 +02:00
Sebastian Dröge
3acc776dd6
Really implement stride conversion for NV12 too
2012-10-15 16:28:40 +02:00
Sebastian Dröge
266bc5bf69
Implement stride-conversion for I420 and NV12
2012-10-15 16:28:39 +02:00
Sebastian Dröge
024ac3560d
Fix typo in previous commit
2012-10-15 16:28:39 +02:00
Sebastian Dröge
f2c5afd031
Don't allow using non-Google codecs if we started the Java VM ourselves
...
Hardware codecs, e.g. the TI ones, only work in processes that had their
Java VM started via the non-public AndroidRuntime class.
2012-10-15 16:28:39 +02:00
Sebastian Dröge
6feb6433d5
Rename to amc from androidmediacodec everywhere
2012-10-15 16:28:39 +02:00
Sebastian Dröge
2de542373b
Improve debug output
2012-10-15 16:28:39 +02:00
Sebastian Dröge
0df00d68b5
Print the MediaFormats we get in the debug logs
2012-10-15 16:28:39 +02:00
Sebastian Dröge
11b8d33666
Improve debug output
2012-10-15 16:28:39 +02:00
Sebastian Dröge
d06af02637
Improve level/profile handling
2012-10-15 16:28:39 +02:00
Sebastian Dröge
2eff8bf82d
Allow registering as static plugin with the GStreamer SDK API
2012-10-15 16:28:39 +02:00
Sebastian Dröge
b7a923234c
If the buffer sizes are the same, just memcpy() to the output buffers
2012-10-15 16:28:39 +02:00
Sebastian Dröge
cb262e2465
Correctly convert timestamps between us and ns
2012-10-15 16:28:39 +02:00
Sebastian Dröge
2fe74efc04
Set SYNC_FRAME flag on buffers if required
2012-10-15 16:28:39 +02:00
Sebastian Dröge
ed98e8cf60
Improve flushing
2012-10-15 16:28:38 +02:00
Sebastian Dröge
d2aff4ecd3
Wait at most 0.5 seconds for getting an input buffer for EOS
2012-10-15 16:28:38 +02:00
Sebastian Dröge
3be4965d00
Correctly check for flushing
2012-10-15 16:28:38 +02:00
Sebastian Dröge
6a48db3d0f
Retry for negative return values when dequeueing buffers
2012-10-15 16:28:38 +02:00
Sebastian Dröge
911ca50971
Fix refcount bug
2012-10-15 16:28:38 +02:00
Sebastian Dröge
b63c58e850
The MediaCodec API is apparently not threadsafe between stop() and release()
...
So we don't call release() and just hope for the GC to release the
codec in time.
2012-10-15 16:28:38 +02:00
Sebastian Dröge
525ecbb76a
Fix plugin cache creation
2012-10-15 16:28:38 +02:00
Sebastian Dröge
e7b21d5796
Cache the codec informations inside the registry
...
Otherwise we would always load all codecs during plugin initialization
which can take quite some time (because of hardware) and also loads
lots of shared libraries (which number is limited by 64 in Android).
2012-10-15 16:28:38 +02:00
Sebastian Dröge
a98a627370
Properly attach and detach the current threads to the Java VM
...
Attaching a thread after it was detached will cause segfaults,
as such we use a pthread_key_t to keep track of the JNIEnv* of
the attached threads and in the destructor (i.e. when the
thread exits) we detach the thread.
2012-10-15 16:28:38 +02:00
Sebastian Dröge
bafd4a0b19
Don't get the output format from the codec before it is ready
...
Apparently things are crashing otherwise.
2012-10-15 16:28:38 +02:00
Sebastian Dröge
c4258069bb
Get the input buffers from the codec
2012-10-15 16:28:38 +02:00
Sebastian Dröge
30b25fea35
Fix JNI method call signatures
2012-10-15 16:28:38 +02:00
Sebastian Dröge
686b9cf2fa
Initialize the VM will full debugging for now
2012-10-15 16:28:37 +02:00
Sebastian Dröge
d7148efb8e
Use NewStringUTF() instead of our own method for that
2012-10-15 16:28:37 +02:00
Sebastian Dröge
5bbaa1f359
Add the TI format to the mapping table too
2012-10-15 16:28:37 +02:00
Sebastian Dröge
e9790ae693
Add another TI specific OpenMAX color format
2012-10-15 16:28:37 +02:00
Sebastian Dröge
4966f68512
Fixes to element/elementfactory creation
2012-10-15 16:28:37 +02:00
Sebastian Dröge
32d4d29706
Some bugfixes to the codec scanning code
...
Also it's not possible to attach a thread after it was
detached once. As such we simply never detach any thread
at all now.
2012-10-15 16:28:37 +02:00
Sebastian Dröge
a48d2feae0
Fix some compilation errors
2012-10-15 16:28:37 +02:00
Sebastian Dröge
e9dcb1b329
Add important FIXME
2012-10-15 16:28:37 +02:00
Sebastian Dröge
1e73da2941
Add video decoder element
2012-10-15 16:28:37 +02:00
Sebastian Dröge
c846605082
Add some more JNI wrapping
2012-10-15 16:28:37 +02:00
Sebastian Dröge
a6a34c8f1c
Add some missing color format constants
2012-10-15 16:28:37 +02:00
Sebastian Dröge
d0ebf261ff
Implement basic wrapper around MediaCodec API
...
Ideally nothing else will be needed from the elements later.
2012-10-15 16:28:37 +02:00
Sebastian Dröge
f99214a657
Some more WIP
...
Scanning all codecs now and have data structures for holding codec
information and codec contexts. Also function declarations for
working with them.
2012-10-15 16:28:36 +02:00
Sebastian Dröge
8f232ea90b
Initial commit
2012-10-15 16:28:36 +02:00