vaapi:gstreamer-vaapi.git
5 years agoNEWS: updates.
Gwenole Beauchesne [Fri, 7 Sep 2012 13:10:58 +0000 (15:10 +0200)]
NEWS: updates.

5 years agovaapidecode: acquire lock only if the mutex exists.
Philip Lorenz [Tue, 4 Sep 2012 11:54:19 +0000 (13:54 +0200)]
vaapidecode: acquire lock only if the mutex exists.

When playback stops the GstVaapiDecode object is reset into a clean
state. However, surfaces may still be referenced by library users and
unreferencing them after the reset triggers an access to an unset mutex.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoDo not forward declare enums.
Philip Lorenz [Tue, 4 Sep 2012 11:40:04 +0000 (13:40 +0200)]
Do not forward declare enums.

Forward declaring enums is not allowed by the C standard and aborts
compilation if the header file is included in a C++ project.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agodecoder: drop extraneous return for void function.
Gwenole Beauchesne [Fri, 7 Sep 2012 09:58:53 +0000 (11:58 +0200)]
decoder: drop extraneous return for void function.

5 years agoimage: don't use (void *) pointer arithmetic.
Gwenole Beauchesne [Fri, 7 Sep 2012 09:57:59 +0000 (11:57 +0200)]
image: don't use (void *) pointer arithmetic.

5 years agovaapisink: automatically detect overlay rendering mode.
Gwenole Beauchesne [Mon, 27 Aug 2012 15:34:27 +0000 (18:34 +0300)]
vaapisink: automatically detect overlay rendering mode.

Retain the VA surface until another surface is to be displayed only
if VA display rendering mode is determined to be "overlay" mode.

5 years agovaapisink: ensure display from a single function.
Gwenole Beauchesne [Mon, 23 Jul 2012 15:49:08 +0000 (17:49 +0200)]
vaapisink: ensure display from a single function.

5 years agovaapisink: retain VA surface until another one is displayed.
Gwenole Beauchesne [Fri, 24 Aug 2012 13:30:33 +0000 (16:30 +0300)]
vaapisink: retain VA surface until another one is displayed.

Keep VA surface proxy associated with the surface that is currently
being displayed. This makes sure that surface is not released back
to the pool of surfaces free to use for decoding. This is necessary
with VA driver implementations that support rendering to an overlay
pipe. Otherwise, there could be cases where we are decoding into a
surface that is being displayed, hence some flickering.

5 years agodisplay: fix validation process of properties during discovery.
Gwenole Beauchesne [Tue, 28 Aug 2012 12:05:16 +0000 (14:05 +0200)]
display: fix validation process of properties during discovery.

Some VA drivers (e.g. EMGD) can have completely random values for initial
display attributes. So, try to improve the discovery process to check the
initial display attribute values actually fall within valid bounds. If not,
try to reset those to some sensible values like the default value reported
through vaQueryDisplayAttributes().

5 years agodisplay: add support for rendering modes.
Gwenole Beauchesne [Mon, 27 Aug 2012 15:11:37 +0000 (18:11 +0300)]
display: add support for rendering modes.

A rendering mode can be "overlay" or "texture"'ed blit.

The former mode implies that a VA surface used for rendering can't be
re-used right away for decoding, so the sink shall make provisions to
retain the associated surface proxy until the next surface is to be
displayed.

The latter mode implies that the VA surface is implicitly copied to an
intermediate backing store, or back buffer of a frame buffer, so the
associated surface proxy can be disposed right away.

5 years agodisplay: add initial support for display attributes.
Gwenole Beauchesne [Mon, 27 Aug 2012 14:02:49 +0000 (17:02 +0300)]
display: add initial support for display attributes.

The VA display attributes are mapped to properties so that to maintain the
GStreamer terminology. Properties are to be identified by name, but internal
functions are available to lookup the property by the actual VA display
attribute type.

5 years agompeg2: include start code into VA slice data buffer.
Gwenole Beauchesne [Fri, 24 Aug 2012 16:41:47 +0000 (18:41 +0200)]
mpeg2: include start code into VA slice data buffer.

Integrate the start code prefix in the slice data buffer that is submitted
to the hardware. VA-API specifies that slice_data_offset is the offset to
the first byte of slice data. And, for MPEG-2, slice() data begins with
the slice_start_code. Some VA driver implementations (EMGD) expect this.

5 years agojpeg: fix end-of-image (EOI) handler.
Sreerenj Balachandran [Fri, 24 Aug 2012 08:36:16 +0000 (11:36 +0300)]
jpeg: fix end-of-image (EOI) handler.

decode_current_picture() was converted to return a gboolean instead
of a GstVaapiDecoderStatus, so we were not getting out of the decode
loop as expected, or could cause an error instead.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agotests: add test for JPEG decoding.
Gwenole Beauchesne [Tue, 17 Jul 2012 11:44:45 +0000 (13:44 +0200)]
tests: add test for JPEG decoding.

5 years agoAdd initial JPEG decoder.
Gwenole Beauchesne [Thu, 9 Feb 2012 16:21:04 +0000 (00:21 +0800)]
Add initial JPEG decoder.

Cherry picked from commits:
75e8a7d: add initial JPEG decoder
449606e: fix build without JPEG decoder
4e1a354: update to current VA/JPEG decoding API
06be1af: fix build with VA-API < 0.32.0
c7587e8: fix configure check for VA/JPEG decoding API
1139908: update to match latest parser API
4f95b62: add missing doc entries for the JPEG decoder
7c1b9b4: update to the latest VA-API changes (0.32.1+)

Signed-off-by: Wind Yuan <feng.yuan@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agocodecparsers: add JPEG parser.
Gwenole Beauchesne [Thu, 9 Feb 2012 16:21:04 +0000 (00:21 +0800)]
codecparsers: add JPEG parser.

Cherry picked from commits:
c350a08: add JPEG parser
0cf06cd: simplify and optimize parser API
53cbdcc: update to match latest parser API
4c5cc7e: make gst_jpeg_parse() support multiple scans
90e6532: add new GstJpegHuffmanTables structure
e61f4c4: use U_READ_UINT*() wherever possible
326a229: track valid quantization and Huffman tables
8f93bbc: tweak parser API
f883238: compute default Huffman tables
0b3d75f: fix default quantization tables
fbb9a5e: fix make dist

Signed-off-by: Wind Yuan <feng.yuan@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agodisplay: query for supported display attributes.
Yan Yin [Tue, 31 Jul 2012 10:24:14 +0000 (18:24 +0800)]
display: query for supported display attributes.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoutils: add string_of_VADisplayAttributeType() helper.
Yan Yin [Tue, 31 Jul 2012 10:22:48 +0000 (18:22 +0800)]
utils: add string_of_VADisplayAttributeType() helper.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agodisplay: fix destruction of mutex.
Gwenole Beauchesne [Wed, 25 Jul 2012 09:37:26 +0000 (11:37 +0200)]
display: fix destruction of mutex.

5 years agoutils: fix gl_create_context() with parent context set.
Gwenole Beauchesne [Tue, 24 Jul 2012 08:58:32 +0000 (10:58 +0200)]
utils: fix gl_create_context() with parent context set.

If GLX window was created from a foreign Display, then that same Display shall
be used for subsequent glXMakeCurrent(). This means that gl_create_context()
will now use the same Display that the parent, if available.

This fixes cluttersink with the Intel GenX VA driver.

5 years agoUse standard G_GNUC_INTERNAL keyword instead of attribute_hidden.
Gwenole Beauchesne [Thu, 19 Jul 2012 15:55:00 +0000 (17:55 +0200)]
Use standard G_GNUC_INTERNAL keyword instead of attribute_hidden.

5 years agoDrop obsolete GstVaapiTSB.
Gwenole Beauchesne [Thu, 19 Jul 2012 15:41:25 +0000 (17:41 +0200)]
Drop obsolete GstVaapiTSB.

It has been replaced with a GstAdapter and gst_adapter_prev_pts().

5 years agoplugins: declare _get_type() functions as const.
Javier Jardón [Thu, 28 Jun 2012 23:45:47 +0000 (08:45 +0900)]
plugins: declare _get_type() functions as const.

Declaring a function as const enables better optimization of calls to
the function.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agolibs: use g_clear_object() wherever applicable.
Javier Jardón [Sat, 30 Jun 2012 20:34:15 +0000 (05:34 +0900)]
libs: use g_clear_object() wherever applicable.

This is a preferred thread-safe version. Also add an inline version of
g_clear_object() if compiling with glib < 2.28.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agolibs: declare _get_type() functions as const.
Javier Jardón [Fri, 29 Jun 2012 06:19:51 +0000 (15:19 +0900)]
libs: declare _get_type() functions as const.

Declaring a function as const enables better optimization of calls
to the function.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agolibs: use generic g_cclosure_marshal_VOID__VOID().
Javier Jardón [Sat, 30 Jun 2012 21:02:22 +0000 (06:02 +0900)]
libs: use generic g_cclosure_marshal_VOID__VOID().

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoglibcompat: drop explicit check for g_list_free_full().
Gwenole Beauchesne [Thu, 19 Jul 2012 12:29:33 +0000 (14:29 +0200)]
glibcompat: drop explicit check for g_list_free_full().

5 years agoconfigure: fix merge of 5dfe45b from master.
Gwenole Beauchesne [Thu, 19 Jul 2012 14:22:40 +0000 (16:22 +0200)]
configure: fix merge of 5dfe45b from master.

5 years agoconfigure: fix build without gtk-doc support.
Javier Jardón [Wed, 27 Jun 2012 15:39:10 +0000 (00:39 +0900)]
configure: fix build without gtk-doc support.

Also do not generate tamplate files as all the documentation is inline.
Drop un-needed code in autogen.sh as well.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoconfigure: put m4 macros and autogenerated files into m4/ directory.
Javier Jardón [Wed, 27 Jun 2012 15:27:31 +0000 (00:27 +0900)]
configure: put m4 macros and autogenerated files into m4/ directory.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoconfigure: drop deprecated autoconf macros.
Javier Jardón [Wed, 27 Jun 2012 15:20:12 +0000 (00:20 +0900)]
configure: drop deprecated autoconf macros.

Bump autoconf required version to 2.58, needed for AS_HELP_STRING macro.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoconfigure: don't use AC_SUBST for some variables.
Javier Jardón [Wed, 27 Jun 2012 15:04:19 +0000 (00:04 +0900)]
configure: don't use AC_SUBST for some variables.

PKG_CHECK_MODULES already does this for us.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoplugins: add support for GstImplementsInterface.
Gwenole Beauchesne [Thu, 19 Jul 2012 09:43:03 +0000 (11:43 +0200)]
plugins: add support for GstImplementsInterface.

5 years agoplugins: do not use deprecated GStreamer -base symbols.
Javier Jardón [Sat, 30 Jun 2012 18:57:13 +0000 (03:57 +0900)]
plugins: do not use deprecated GStreamer -base symbols.

Bump GStreamer plugins -base required version to 0.10.31, needed for
gst_x_overlay_got_window_handle().

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoplugins: use G_DEFINE_TYPE_* instead of deprecated GST_BOILERPLATE_*.
Javier Jardón [Sat, 30 Jun 2012 17:58:36 +0000 (02:58 +0900)]
plugins: use G_DEFINE_TYPE_* instead of deprecated GST_BOILERPLATE_*.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoplugins: do not use deprecated core GStreamer symbols.
Javier Jardón [Sat, 30 Jun 2012 18:57:13 +0000 (03:57 +0900)]
plugins: do not use deprecated core GStreamer symbols.

Bump GStreamer required version to 0.10.14, needed for
gst_element_class_set_details_simple().

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoNEWS: updates.
Gwenole Beauchesne [Tue, 26 Jun 2012 13:04:58 +0000 (15:04 +0200)]
NEWS: updates.

5 years agovaapiplugin: fix build when compiling without GLX.
Yan Yin [Mon, 25 Jun 2012 08:07:55 +0000 (16:07 +0800)]
vaapiplugin: fix build when compiling without GLX.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoconfigure: disable FFmpeg-based decoders.
Gwenole Beauchesne [Tue, 26 Jun 2012 09:03:25 +0000 (11:03 +0200)]
configure: disable FFmpeg-based decoders.

FFmpeg decoders are still available through the --enable-ffmpeg option
but are no longer maintained.

5 years agoBump version for development.
Gwenole Beauchesne [Tue, 26 Jun 2012 13:02:44 +0000 (15:02 +0200)]
Bump version for development.

5 years ago0.3.7. 0.3.7
Gwenole Beauchesne [Tue, 26 Jun 2012 12:46:40 +0000 (14:46 +0200)]
0.3.7.

5 years agoFix build with recent GStreamer stack.
Gwenole Beauchesne [Mon, 25 Jun 2012 15:25:44 +0000 (17:25 +0200)]
Fix build with recent GStreamer stack.

5 years agoNEWS: updates.
Gwenole Beauchesne [Tue, 26 Jun 2012 11:34:39 +0000 (13:34 +0200)]
NEWS: updates.

5 years agompeg4: fix picture used to determine backward_reference_vop_coding_type.
Wind Yuan [Thu, 19 Apr 2012 02:30:45 +0000 (22:30 -0400)]
mpeg4: fix picture used to determine backward_reference_vop_coding_type.

Complete fix brought by bf9f77b1afb0829b97e2d502057aec973c5fd7f5
but Gwenole did not apply all the bits.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg4: handle skipped frames (vop_hdr->coded = 0).
Wind Yuan [Fri, 27 Apr 2012 08:10:17 +0000 (04:10 -0400)]
mpeg4: handle skipped frames (vop_hdr->coded = 0).

Gracefully skip non VOP coded frames.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg4: map Simple_Scalable profile to Advanced_Simple profile.
Wind Yuan [Fri, 27 Apr 2012 08:13:00 +0000 (04:13 -0400)]
mpeg4: map Simple_Scalable profile to Advanced_Simple profile.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg4: fix timestamp issues on too fast playback.
Wind Yuan [Thu, 26 Apr 2012 08:00:41 +0000 (04:00 -0400)]
mpeg4: fix timestamp issues on too fast playback.

Improve generation of presentation timestamps to be less sensitive
to input stream errors. In practise, GOP is also a synchronization
point for PTS calculation.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg4: fix VOP coding type of backward reference pictures.
Wind Yuan [Thu, 12 Apr 2012 09:48:24 +0000 (11:48 +0200)]
mpeg4: fix VOP coding type of backward reference pictures.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg4: fix handling of temporal reference distances.
Wind Yuan [Thu, 12 Apr 2012 03:02:45 +0000 (23:02 -0400)]
mpeg4: fix handling of temporal reference distances.

TRD and TRB fields are not large enough to hold the difference of PTS
expressed with nanosecond resolution. So, compute them from the original
VOP info.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agodpb: mpeg2: cosmetics.
Gwenole Beauchesne [Thu, 12 Apr 2012 09:00:22 +0000 (11:00 +0200)]
dpb: mpeg2: cosmetics.

Define MAX_MPEG2_REFERENCES to 2 and avoid magic numbers all around.

5 years agovaapidecode: fix VA display type.
Wind Yuan [Tue, 10 Apr 2012 11:29:10 +0000 (13:29 +0200)]
vaapidecode: fix VA display type.

Fix typo whereby plain VADisplay type was used instead of the GstVaapiDisplay
wrapper.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agovaapidecode: fix includes when compiling for a single API.
Gwenole Beauchesne [Tue, 10 Apr 2012 12:28:31 +0000 (14:28 +0200)]
vaapidecode: fix includes when compiling for a single API.

5 years agompeg2: fix calculation of macroblock_offset.
Gwenole Beauchesne [Mon, 2 Apr 2012 16:42:12 +0000 (18:42 +0200)]
mpeg2: fix calculation of macroblock_offset.

Fix decoding of streams with extra slice() information before the first
macroblock(). e.g. this fixes sony-ct3.bs from conformance test.

5 years agompeg2: fix interpolation of GOP TSN from new PTS.
Gwenole Beauchesne [Mon, 2 Apr 2012 16:09:21 +0000 (18:09 +0200)]
mpeg2: fix interpolation of GOP TSN from new PTS.

New GOP TSN base could be mis-calculated. In particular, this fixes
decoding of uruseiyatsura.vob from <http://samples.mplayerhq.hu/>.

5 years agompeg2: fix decoding of high profile streams.
Gwenole Beauchesne [Mon, 2 Apr 2012 14:07:58 +0000 (16:07 +0200)]
mpeg2: fix decoding of high profile streams.

Allow MPEG-2 High profile streams only if the HW supports that profile
or no High profile specific bits are used, and thus Main profile could
be used instead. i.e. chroma_format is 4:2:0, intra_dc_precision is not
set to 11 and no sequence_scalable_extension() was parsed.

5 years agovaapidecode: report unsupported codec profiles.
Gwenole Beauchesne [Mon, 2 Apr 2012 12:51:06 +0000 (14:51 +0200)]
vaapidecode: report unsupported codec profiles.

Try to gracefully abort when the HW does not support the requested
profile. There is no fallback unless profiles are correctly parsed
and matched through caps beforehand.

5 years agovaapisink: don't resize a 'foreign' X-window.
Holger Kaelberer [Tue, 7 Feb 2012 14:23:22 +0000 (15:23 +0100)]
vaapisink: don't resize a 'foreign' X-window.

Don't forcibly resize foreign X windows. The user is responsible for
their size and vaapisink shall not change this.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agovaapisink: recalculate render rect only if caps are negotiated.
Holger Kaelberer [Tue, 7 Feb 2012 14:21:05 +0000 (15:21 +0100)]
vaapisink: recalculate render rect only if caps are negotiated.

Fix gst_vaapisink_xoverlay_set_window_handle() when it is called before
caps got negotiated. Besides, when a foreign window is provided by the
user, so should the render rect.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoBump version for development.
Gwenole Beauchesne [Mon, 2 Apr 2012 11:07:34 +0000 (13:07 +0200)]
Bump version for development.

5 years ago0.3.6. 0.3.6
Gwenole Beauchesne [Mon, 2 Apr 2012 08:07:33 +0000 (10:07 +0200)]
0.3.6.

5 years agoFix a few documentation issues.
Gwenole Beauchesne [Mon, 2 Apr 2012 10:52:54 +0000 (12:52 +0200)]
Fix a few documentation issues.

5 years agoUpdate introduction and changelog.
Gwenole Beauchesne [Mon, 2 Apr 2012 08:05:57 +0000 (10:05 +0200)]
Update introduction and changelog.

5 years agompeg2: allocate dummy picture for first field based I-frame.
Gwenole Beauchesne [Mon, 2 Apr 2012 09:29:53 +0000 (11:29 +0200)]
mpeg2: allocate dummy picture for first field based I-frame.

In P-pictures, prediction shall be made from the two most recently
decoded reference fields. However, when the first I-frame is a field,
the next field of the current picture could be a P-picture but only a
single field was decoded so far. In this case, create a dummy picture
with POC = -1 that will be used as reference.

Some VA drivers would error out if P-pictures don't have a forward
reference picture. This is true in general but not in this very specific
initial case.

5 years agompeg2: fix simple to main profile fallback.
Gwenole Beauchesne [Mon, 2 Apr 2012 08:43:30 +0000 (10:43 +0200)]
mpeg2: fix simple to main profile fallback.

Allow fallback from simple to main profile when the HW decoder does
not support the former profile and that no sequence_header_extension()
is available to point out this.

5 years agompeg4: improve error checking while decoding packets.
Wind Yuan [Fri, 30 Mar 2012 07:04:40 +0000 (03:04 -0400)]
mpeg4: improve error checking while decoding packets.

decode_picture() could return an error when an MPEG-4 profile is not
supported for example. In this case, the underlying VA context is not
allocated and no other proper action can be taken. Likewise on exit
from decode_slice().

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agodecoder: use POC to maintain the DPB.
Gwenole Beauchesne [Fri, 30 Mar 2012 15:03:28 +0000 (17:03 +0200)]
decoder: use POC to maintain the DPB.

Introduce a POC field in GstVaapiPicture so that to store simpler sequential
numbers. A signed 32-bit integer should be enough for 1 year of continuous
video streaming at 60 Hz.

Use this new POC value to maintain the DPB, instead of 64-bit timestamps.
This also aligns with H.264 that will be migrated to GstVaapiDpb infrastructure.

5 years agompeg2: rework generation of presentation timestamps.
Gwenole Beauchesne [Fri, 30 Mar 2012 14:23:33 +0000 (16:23 +0200)]
mpeg2: rework generation of presentation timestamps.

Always prefer PTS from the demuxer layer for GOP times. If this is invalid,
i.e. demuxer could not determine the PTS or the generated PTS is lower than
max PTS from past pictures, then try to fix it up based on the duration of
a frame.

For picture PTS, simply use the GOP PTS formerly computed then use TSN to
reconstruct a current time. Also now handle wrapped TSN correctly.

5 years agompeg2: ignore empty user-data packets.
Gwenole Beauchesne [Fri, 30 Mar 2012 15:07:39 +0000 (17:07 +0200)]
mpeg2: ignore empty user-data packets.

Fix tcela-8.bits conformance test.

5 years agompeg2: review and report errors accordingly.
Gwenole Beauchesne [Thu, 29 Mar 2012 09:13:20 +0000 (11:13 +0200)]
mpeg2: review and report errors accordingly.

Use GST_ERROR() to report real errors instead of hiding them into
GST_DEBUG().

5 years agompeg2: fix invalid interlaced frame in progressive sequence.
Gwenole Beauchesne [Wed, 28 Mar 2012 17:15:47 +0000 (19:15 +0200)]
mpeg2: fix invalid interlaced frame in progressive sequence.

Some streams, badly constructed, could have signaled an interlaced
frame while the sequence was meant to be progressive. Warn and force
frame to be progressive in this case.

5 years agompeg2: add support for interlaced streams.
Gwenole Beauchesne [Wed, 28 Mar 2012 14:08:29 +0000 (16:08 +0200)]
mpeg2: add support for interlaced streams.

Pictures are submitted to the HW for rendering only when both fields
are decoded or current picture is a full frame.

5 years agompeg2: add new decoded picture buffer infrastructure.
Gwenole Beauchesne [Wed, 28 Mar 2012 12:36:30 +0000 (14:36 +0200)]
mpeg2: add new decoded picture buffer infrastructure.

Decoded pictures are now maintained into DPB, similarly to H.264.
The same mechanism could be re-used for VC-1 and MPEG-4:2 codecs.

5 years agodecoder: add first-field flag to picture.
Gwenole Beauchesne [Wed, 28 Mar 2012 15:50:28 +0000 (17:50 +0200)]
decoder: add first-field flag to picture.

Add first-field (FF) flag to GstVaapiPicture, thus not requiring is_first_field
member in each decoder. Rather, when a GstVaapiPicture is created, it is considered
as the first field. Any subsequent allocated field will become the second field.

5 years agodecoder: allow pictures to be cloned for field decoding.
Gwenole Beauchesne [Wed, 28 Mar 2012 14:05:58 +0000 (16:05 +0200)]
decoder: allow pictures to be cloned for field decoding.

Add gst_vaapi_picture_new_field() function that clones a picture, while
preserving the parent picture surface. i.e. the surface proxy reference
count is increased and other fields copied as is. Besides, the picture
is reset into a "non-output" mode.

5 years agodecoder: rework picture field flags.
Gwenole Beauchesne [Wed, 28 Mar 2012 14:07:44 +0000 (16:07 +0200)]
decoder: rework picture field flags.

Add top-field-first (TFF) and interlaced flags to GstVaapiPicture so they
could be propagated to the surface proxy when it is pushed for rendering.
Besides, top and bottom fields are now expressed with picture structure flags
from GstVaapiSurfaceRenderFlags.

5 years agodecoder: add OUTPUT flag to pictures.
Gwenole Beauchesne [Wed, 28 Mar 2012 12:28:26 +0000 (14:28 +0200)]
decoder: add OUTPUT flag to pictures.

Allow pictures to be marked as output gst_vaapi_picture_output().

5 years agodecoder: fix semantics of SKIPPED pictures.
Gwenole Beauchesne [Wed, 28 Mar 2012 12:24:40 +0000 (14:24 +0200)]
decoder: fix semantics of SKIPPED pictures.

If GstVaapiPicture has flag SKIPPED set, this means gst_vaapi_picture_output()
will not push the underlying surface for rendering. Besides, VC-1 skipped P-frame
has nothing to do with rendering. This only means that the currently decoded
picture is just a copy of its reference picture.

5 years agovaapipostproc: get "interlaced" attribute from surface proxy.
Gwenole Beauchesne [Wed, 28 Mar 2012 13:16:17 +0000 (15:16 +0200)]
vaapipostproc: get "interlaced" attribute from surface proxy.

Add new "interlaced" attribute to GstVaapiSurfaceProxy. Use this in
vaapipostproc so that to handles cases where bitstream is interlaced
but almost only frame pictures are generated. In this case, we should
not be alternating between top/bottom fields.

5 years agovaapipostproc: add new element for video postprocessing.
Gwenole Beauchesne [Mon, 26 Mar 2012 12:37:24 +0000 (14:37 +0200)]
vaapipostproc: add new element for video postprocessing.

Add vaapipostproc element for video postprocessing. So far, only basic
bob deinterlacing is implemented. Interlaced mode is automatically
detected based on sink caps ("interlaced" field).

5 years agovideobuffer: add surface render flags.
Gwenole Beauchesne [Mon, 26 Mar 2012 10:01:36 +0000 (12:01 +0200)]
videobuffer: add surface render flags.

Allow rendering flags, as a combination of GstVaapiSurfaceRenderFlags,
to be set to the video buffer. In particular, this is mostly useful for
basic deinterlacing.

5 years agocompat: add compatibility glue with VA-API 0.34+ (WIP).
Gwenole Beauchesne [Fri, 23 Mar 2012 16:13:58 +0000 (17:13 +0100)]
compat: add compatibility glue with VA-API 0.34+ (WIP).

5 years agoh264: skip all Filler Data NALs.
Gwenole Beauchesne [Fri, 23 Mar 2012 16:11:18 +0000 (17:11 +0100)]
h264: skip all Filler Data NALs.

5 years agompeg4: check for decoder status prior to decoding packet.
Wind Yuan [Thu, 22 Mar 2012 07:28:22 +0000 (03:28 -0400)]
mpeg4: check for decoder status prior to decoding packet.

Make sure there is a VA surface free prior to decoding the current frame.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agodecode: delay NEWSEGMENT event if vaapidecode element was not linked.
Wind Yuan [Thu, 15 Mar 2012 08:58:04 +0000 (04:58 -0400)]
decode: delay NEWSEGMENT event if vaapidecode element was not linked.

Rationale: playbin2 links all elements at run-time. Once vaapidecode
is created and a NEWSEGMENT event arrives, downstream element may not
be ready yet. So, delay this event until next element is chained in,
otherwise basesink could output "Received buffer without a new-segment.
Assuming timestamps start from 0".

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg2: fix GOP timestamps when incorrect data is received.
Wind Yuan [Wed, 14 Mar 2012 00:33:41 +0000 (20:33 -0400)]
mpeg2: fix GOP timestamps when incorrect data is received.

Some streams have incorrect GOP timestamps, or nothing set at all.
i.e. GOP time is 00:00:00 for all GOPs. Try to recover in this case
from demuxer timestamps, which are monotonic.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg2: don't decode anything before the first sequence_header().
Wind Yuan [Tue, 13 Mar 2012 06:03:31 +0000 (02:03 -0400)]
mpeg2: don't decode anything before the first sequence_header().

Skip all pictures prior to the first sequence_header(). Besides,
skip all picture_data() if there was no prior picture_header().

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoffmpeg: add support for interlaced streams.
Holger Kaelberer [Tue, 7 Feb 2012 14:57:14 +0000 (15:57 +0100)]
ffmpeg: add support for interlaced streams.

Evaluate interlaced stream properties.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agovaapidecode: propagate interlaced and TFF properties downstream.
Holger Kaelberer [Tue, 7 Feb 2012 14:54:15 +0000 (15:54 +0100)]
vaapidecode: propagate interlaced and TFF properties downstream.

Propagate "interlaced" caps downstream and set "tff" buffer flag
appropriately to output buffers for interlaced pictures.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agodecoder: maintain caps for interlaced streams.
Holger Kaelberer [Tue, 7 Feb 2012 14:54:15 +0000 (15:54 +0100)]
decoder: maintain caps for interlaced streams.

Extend GstVaapiDecoder base object to maintain caps with "interlaced"
property.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agosurfaceproxy: add TFF property.
Holger Kaelberer [Tue, 7 Feb 2012 14:54:15 +0000 (15:54 +0100)]
surfaceproxy: add TFF property.

Add TFF (top-field-first) property to GstVaapiSurfaceProxy.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoAUTHORS: update to match current authors.
Gwenole Beauchesne [Fri, 16 Mar 2012 13:21:36 +0000 (14:21 +0100)]
AUTHORS: update to match current authors.

5 years agompeg2: fix is_first_field calculation.
Gwenole Beauchesne [Tue, 28 Feb 2012 10:58:21 +0000 (11:58 +0100)]
mpeg2: fix is_first_field calculation.

Reset is_first_field for frame pictures. Factor out locations where
the flag is updated.

5 years agompeg2: catch incorrect picture_structure from bitstreams.
Gwenole Beauchesne [Fri, 24 Feb 2012 11:56:48 +0000 (12:56 +0100)]
mpeg2: catch incorrect picture_structure from bitstreams.

Assume "frame" picture structure if the syntax element was zero or if
progressive_frame is set.

5 years agompeg2: fix slice_vertical_position calculation (again).
Gwenole Beauchesne [Fri, 24 Feb 2012 11:53:30 +0000 (12:53 +0100)]
mpeg2: fix slice_vertical_position calculation (again).

VA-API expects slice_vertical_position as the initial position from the
bitstream. i.e. the direct slice() information. VA drivers will be fixed
accordingly.

5 years agoRevert "vaapidecode: fix another pad template ref leak" (Holger Kaelberer) 0.3.5
Gwenole Beauchesne [Fri, 2 Mar 2012 14:03:57 +0000 (15:03 +0100)]
Revert "vaapidecode: fix another pad template ref leak" (Holger Kaelberer)

This reverts commit 2f127d6af473afd647a2c88f75faafd1cd718437.

For gst_element_class_get_pad_template(), no unreferencing is necessary
according to the GStreamer documentation.

5 years agoh264: fix slice_data_bit_offset calculation.
Gwenole Beauchesne [Fri, 2 Mar 2012 12:41:16 +0000 (13:41 +0100)]
h264: fix slice_data_bit_offset calculation.

Unlike what VA-API documentation defines, the slice_data_bit_offset
represents the offset to the first macroblock in the slice data, minus
any emulation prevention bytes in the slice_header().

This fix copes with binary-only VA drivers that won't be fixed any
time soon. Besides, this aligns with the current FFmpeg behaviour
that was based on those proprietary drivers implementing the API
incorrectly.

5 years agoh264: skip all Access Unit (AU) NALs.
Wind Yuan [Tue, 21 Feb 2012 07:11:20 +0000 (02:11 -0500)]
h264: skip all Access Unit (AU) NALs.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agoh264: fix modification process of reference picture lists.
Wind Yuan [Wed, 29 Feb 2012 08:08:46 +0000 (03:08 -0500)]
h264: fix modification process of reference picture lists.

Construction of RefPicList0/1 could be off by one element.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg2: fix size calculation from sequence_extension().
Sreerenj Balachandran [Sun, 12 Feb 2012 09:21:52 +0000 (11:21 +0200)]
mpeg2: fix size calculation from sequence_extension().

Original values from sequence_header() are 12-bit and the remaining
2 most significant bits are coming from sequence_extension().

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
5 years agompeg2: fix slice_vertical_position calculation.
Gwenole Beauchesne [Thu, 23 Feb 2012 15:39:14 +0000 (16:39 +0100)]
mpeg2: fix slice_vertical_position calculation.

Make sure to adjust slice_vertical_position if picture structure
is a top or bottom field.