Commit graph

112 commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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
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
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
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
3159b7b5dd Add support for MPEG1/2 video 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
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
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
bb8e53d4b8 Always pass 1 as number of frames to finish_frame() 2012-10-15 16:28:41 +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
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
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
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
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
4966f68512 Fixes to element/elementfactory creation 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