Commit graph

1122 commits

Author SHA1 Message Date
Sreerenj Balachandran
0847b3888d vaapidecode: add support for post-seek semantics reset.
Implement GstVideoDecoder::reset() as a destruction of the VA decoder
and the creation of a new VA decoder.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-30 11:00:19 +01:00
Gwenole Beauchesne
1568922c1c Bump version for development. 2013-01-30 09:38:07 +01:00
Gwenole Beauchesne
52fd545c6e 0.5.1. 2013-01-30 09:37:38 +01:00
Sreerenj Balachandran
0d5e203e79 mpeg2: implement GstVaapiDecoder::flush() as a DPB flush. 2013-01-29 18:25:22 +01:00
Sreerenj Balachandran
3e4c7f564d decoder: fix documentation for GstVaapiDecoderFrame.
Drop superfluous reference to prev_slice member.
2013-01-29 18:24:46 +01:00
Gwenole Beauchesne
aee91a31ba decoder: assume current frame is complete at end-of-stream.
Assume we got a complete frame when the end-of-stream is reached and that
the current codec frame contains at least one slice data unit.
2013-01-29 16:18:13 +01:00
Gwenole Beauchesne
0c99f351fc legal: fix year for some copyright notices (2013). 2013-01-29 14:37:02 +01:00
Gwenole Beauchesne
22094ed053 legal: fix year for some copyright notices (2012). 2013-01-29 14:37:02 +01:00
Gwenole Beauchesne
0f662a8913 legal: add Intel copyright on modified files. 2013-01-29 14:00:04 +01:00
Gwenole Beauchesne
e8ea18b209 NEWS: updates. 2013-01-29 13:37:41 +01:00
Gwenole Beauchesne
1d16669aca wayland: use a local event queue to avoid lock contention.
This improves performance when rendering several surfaces from within
the same process. e.g. a tee of vaapidecode'd buffers to vaapisink.
2013-01-28 19:06:59 +01:00
Gwenole Beauchesne
96d12f9eb1 wayland: fix thread-safe issues.
The Wayland API is not fully thread-safe and client applications shall
perform locking themselves on key functions. Besides, make sure to
release the lock if the _render() function fails.
2013-01-28 19:06:59 +01:00
Gwenole Beauchesne
1fb25b0853 wayland: really wait until the pending redraw completed.
Introduce gst_vaapi_window_wayland_sync() helper function to wait for
the completion of the redraw request. Use it in _render() function to
actually block until the previous draw request is completed.
2013-01-28 18:57:21 +01:00
Gwenole Beauchesne
23c6053b94 wayland: fix frame_redraw callback.
The redraw callback needs to be attached to the surface prior to the
commit. Otherwise, the callback notifies the next surface repaint,
which is not the desired behaviour. i.e. we want to be notified for
the surface we have just filled.

Another isse was the redraw_pending was reset before the actual completion
of the frame redraw callback function, thus causing concurrency issues.
e.g. the callback could have been called again, but with a NULL buffer.
2013-01-28 18:24:37 +01:00
Gwenole Beauchesne
087bf30c23 wayland: fix display sharing.
When the Wayland display is shared, we still have to create our own local
shell and compositor objects, since they are not propagated from the cache.
Likewise, we also need to determine the display size or vaapisink would
fail to account for the display aspect ratio, and will try to create a 0x0
window.
2013-01-28 18:24:37 +01:00
Gwenole Beauchesne
0ed1735d8b codecparsers: update to gst-vaapi-branch commit 21a098e.
21a098e vc1: fix bitplanes decoding (DIFF6 or NORM6) [residual]
f8c836a vc1: fix bitplanes decoding (DIFF6 or NORM6)
2013-01-24 18:30:53 +01:00
Gwenole Beauchesne
efd90114bf vc1: handle frames with multiple slices. 2013-01-23 17:02:45 +01:00
Gwenole Beauchesne
9f2b2a56d6 codecparsers: update to gst-vaapi-branch commit 3fba492.
3fba492 vc1: add API to parse slice headers
2013-01-23 17:02:32 +01:00
Gwenole Beauchesne
3eeff1786a vc1: handle CLOSED_ENTRY.
When CLOSED_ENTRY == 0, and if the B pictures that follow an entry-point
lack a reference anchor picture, these B pictures shall be discarded.

https://bugs.freedesktop.org/show_bug.cgi?id=59505
2013-01-23 11:19:32 +01:00
Gwenole Beauchesne
ee181d1b85 vc1: cope with latest codecparser changes.
Fix build with newer VC-1 codecparser where dqsbedge was renamed to
dqbedge, and now represents either DQSBEDGE or DQDBEDGE depending on
the actual value of DQPROFILE.
2013-01-23 10:25:52 +01:00
Gwenole Beauchesne
56c31ca1c9 codecparsers: update to gst-vaapi-branch commit 3d2c67c.
3d2c67c vc1: simplify GstVC1VopDquant structure
2013-01-23 10:24:04 +01:00
Gwenole Beauchesne
0d256a49da codecparsers: update to gst-vaapi-branch commit 5d33da8.
5d33da8 vc1: fix bitplanes decoding
562bdc4 vc1: fix VOPDQUANT parser for DQUANT == 2
0b13d2b vc1: fix calculation of ALTPQUANT
ba88e63 vc1: fix parser for DQPROFILE in VOPDQUANT
2013-01-22 18:20:50 +01:00
Gwenole Beauchesne
df411e435f vc1: fix size of encapsulated BDU.
Fix size of encapsulated BDUs since GstVC1BDU.size actually represents
the size of the BDU data, starting from offset, i.e. after any start
code is parsed.

This fixes a buffer overflow during the unescaping process.
2013-01-22 16:59:40 +01:00
Wind Yuan
a68c218c8e vc1: fix decoding of WMV3 videos in AVI format.
The AVI demuxer (avidemux) does not set a proper "format" attribute
to the generated caps. So, try to recover the video codec format from
the "wmvversion" property instead.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-22 16:10:07 +01:00
Gwenole Beauchesne
d69cb4389f vc1: review and report errors accordingly.
Use GST_ERROR() to report real errors instead of hiding them into
GST_DEBUG().
2013-01-22 16:10:07 +01:00
Gwenole Beauchesne
b134a97d42 vc1: don't create GstBuffers for all decoder units.
Don't create temporary GstBuffers for all decoder units, even if they
are lightweight "sub-buffers", since it is not really necessary to keep
the buffer data around.
2013-01-22 16:10:07 +01:00
Gwenole Beauchesne
ec3c4576c0 vc1: implement flush() hook.
Make it a simple DPB flush.
2013-01-22 16:09:45 +01:00
Gwenole Beauchesne
1513f52fc1 vc1: implement {start,end}_frame() hooks.
Implement GstVaapiDecoder.start_frame() and end_frame() semantics so
that to create new VA context earlier and submit VA pictures to the
HW for decoding as soon as possible. i.e. don't wait for the next
frame to start decoding the previous one.
2013-01-22 16:08:25 +01:00
Gwenole Beauchesne
823f16d7ce vc1: fix next POC for new sequence layers.
Fix next POC when a new sequence layer is reached. At this point, we
need to reset any previous reference picture, i.e. non B-frame.
2013-01-22 09:30:04 +01:00
Sreerenj Balachandran
472f3473e0 vc1: port to common GstVaapiDpb interface.
Use GstVaapiDpb interface instead of maintaining our own prev and next
picture pointers. While doing so, try to derive a sensible POC value.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-21 19:08:00 +01:00
Gwenole Beauchesne
142e13f637 vc1: fix decode_sequence_end() to return success, not EOS. 2013-01-21 16:35:58 +01:00
Gwenole Beauchesne
b24752da4f decoder: simplify gst_vaapi_decoder_get_surface().
Avoid extraenous branches, i.e. immediately return with success once we
have a decoded frame available.
2013-01-18 17:00:18 +01:00
Gwenole Beauchesne
a811a5de3d decoder: optimize and clean decode_step() up.
Avoid usage of goto. Simplify decode_step() process to first accumulate all
pending buffers into the GstAdapter, and then parse and decode units from
that input adapter. Stop the process once a frame is fully decoded or an
error occurred.
2013-01-18 16:56:15 +01:00
Gwenole Beauchesne
cd52fa315a display: move "vaapi" debug init to libgstvaapi_init_once(). 2013-01-18 14:49:15 +01:00
Gwenole Beauchesne
655f400e1c display: dump gstreamer-vaapi version for debugging purposes. 2013-01-18 14:49:15 +01:00
Gwenole Beauchesne
732320d878 tests: simple-decoder: fix build with built-in videoutils.
Fix build with built-in videoutils, i.e. when system GStreamer installation
does not know about GstVideoDecoder API.
2013-01-18 14:32:14 +01:00
Gwenole Beauchesne
48b67470e3 tests: simple-decoder: flush decoded frames at EOS.
Flush the remaining decoded frames when an end-of-stream is reached.
2013-01-18 10:35:44 +01:00
Gwenole Beauchesne
caee174e2f tests: simple-decoder: drop use of GstVaapiVideoMeta.
Don't use GstVaapiVideoMeta since that object is not guaranteed to live
in libgstvaapi forever. Rather, that'd move to plugin elements at some
point.
2013-01-18 10:25:14 +01:00
Gwenole Beauchesne
0a7a9e8304 tests: simple-decoder: add benchmark mode.
Add --benchmark option to enable benchmark mode where rendering is not
synchronized with presentation timestamps of the decoded surfaces.
2013-01-17 19:04:13 +01:00
Gwenole Beauchesne
14242cda5d tests: simple-decoder: honour framerate from the bitstream.
Try to honour the framerate from the bitstream, or cap the playback to
60 fps by default.
2013-01-17 19:04:13 +01:00
Gwenole Beauchesne
7b4dadc8ae tests: simple-decoder: set window size to the surface dimensions.
Set the window size to the decoded surface dimensions, if the user has
not requested the application to run in full-screen mode. Besides, no
effort is made to preserve aspect ratio or to center the video within
the mapped window.
2013-01-17 19:04:13 +01:00
Gwenole Beauchesne
c094fe3038 tests: add simple decoder application.
Add simple decoder application to show off decoding capabilities from
raw bitstreams, for debugging or performance evaluation purposes.
2013-01-17 19:03:41 +01:00
Gwenole Beauchesne
b22bade310 tests: add codec helper utils.
Add helper functions to determine the codec type from a specific file
or utility functions to convert from codec type to GstCaps or from
codec name to codec type.
2013-01-17 19:03:21 +01:00
Gwenole Beauchesne
ea3905fa14 tests: allow fullscreen mode.
Add new --fullscreen|-f option to create new windows in fullscreen mode.
2013-01-17 19:03:21 +01:00
Gwenole Beauchesne
319f87f142 h264: implement GstVaapiDecoder::flush() as a DPB flush. 2013-01-17 18:40:36 +01:00
Gwenole Beauchesne
34162f5001 h264: handle end-of-stream NALU.
Handle <end-of-stream> NAL unit to actually flush any pending picture
from the DPB.
2013-01-17 18:40:36 +01:00
Gwenole Beauchesne
236e8833d1 vaapidecode: handle EOS events.
Flush all decoded frames to downstream when EOS is received. This is
performed by implementing GstVideoDecoder::finish() hook.
2013-01-17 18:40:36 +01:00
Gwenole Beauchesne
cbcdc3bfae vaapidecode: split gvd_handle_frame() into decode/push frames.
Split GstVideoDecoder::handle_frame() implementation into two functions:
(i) one for decoding the provided GstVideoCodecFrame and (ii) another one
for purging all decoded frames and submit them downstream.
2013-01-17 18:39:22 +01:00
Gwenole Beauchesne
60acedb56e decoder: add GstVaapiDecoder::flush() hook. 2013-01-17 18:39:22 +01:00
Gwenole Beauchesne
e4e3a58bc0 decoder: fix check for end-of-stream in raw API mode.
Make sure to immediately return GST_VAAPI_DECODER_STATUS_END_OF_STREAM
if the end-of-stream was already reached at the previous iteration.
2013-01-17 18:39:22 +01:00