Commit graph

1867 commits

Author SHA1 Message Date
Wind Yuan
0e8afe1c22 decoder: fix crash on invalid pointer for GST_DEBUG().
When decoding failed, or that the frame was dropped, the associated
surface proxy is not guaranteed to be present. Thus, the GST_DEBUG()
message needs to check whether the proxy is actually present or not.

https://bugzilla.gnome.org/show_bug.cgi?id=722403

[fixed gst_vaapi_surface_proxy_get_surface_id() to return VA_INVALID_ID]
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
deff9c775c encoder: h264: disable NAL HRD parameters for now.
Don't emit NAL HRD parameters for now in the SPS headers because the
SEI buffering_period() and picture_timing() messages are not handled
yet. Some additional changes are necessary to get it right.

https://bugzilla.gnome.org/show_bug.cgi?id=722734
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
9d5fc53899 encoder: h264: fix default CPB buffer size.
Fix default CPB buffer size to something more reasonable (1500 ms)
and that still fits the level limits. This is a non configurable
property for now. The initial CPB removal delay is also fixed to
750 ms.

https://bugzilla.gnome.org/show_bug.cgi?id=722087
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
9d42c86422 encoder: h264: fix bitrate encoding for HRD conformance.
Round down the calculated, or supplied, bitrate (kbps) into a multiple
of the HRD bitrate scale factor. Use a bitrate scale factor of 64 so
that to have less losses in precision. Likewise, don't round up because
that could be a strict constraint imposed by the user.
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
4c04a1bc88 encoder: h264: fix level lookup constraints wrt. bitrate.
Fix the level calculation involving bitrate limits. Since we are
targetting NAL HRD conformance, the check against MaxBR from the
Table A-1 limits shall involve cpbBrNalFactor depending on the
active profile.
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
1e502d63d5 encoder: h264: submit sequence parameter only once.
Submit sequence parameter buffers only once, or when the bitstream
was reconfigured in a way that requires such. Always submit packed
sequence parameter buffers at I-frame period, if the VA driver needs
those.

https://bugzilla.gnome.org/show_bug.cgi?id=722737
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
71113e4999 encoder: h264: only submit packed headers when required.
Make sure to submit the packed headers only if the underlying VA driver
requires those. Currently, only handle packed sequence and picture
headers.

https://bugzilla.gnome.org/show_bug.cgi?id=722737
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
d9cf58e88a encoder: h264: fix ip_period value in sequence parameter.
The VAEncSequenceParameterBuffer.ip_period value reprents the distance
between the I-frame and the next P-frame. So, this also accounts for
any additional B-frame in the middle of it.

This fixes rate control heuristics for certain VA drivers.

https://bugzilla.gnome.org/show_bug.cgi?id=722735
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
586f872085 encoder: h264: fix level when bitrate is automatically computed.
Fix level characterisation when the bitrate is automatically computed
from the active coding tools. i.e. ensure the bitrate once the profile
is completely characterized but before the level calculation process.
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
54d1900e1d encoder: h264: clean-ups.
Document and rename a few functions here and there. Drop code that
caps num_bframes variable in reset_properties() since they shall
have been checked beforehand, during properties initialization.
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
c48e769e08 encoder: h264: clean-up bitwriter related utilities.
Clean-up GstBitWriter related utility functions and simplify notations.
While we are at it, also make bitstream writing more robust should an
overflow occur. We could later optimize for writing headers capped to
their maximum possible size by using the _unchecked() helper variants.
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
8e62164160 encoder: h264: completely remove private headers.
Drop private header since it was originally used to expose internals
to the plugin element. The proper interface is now the properties API,
thus rendering private headers totally obsolete.
2014-01-22 18:30:26 +01:00
Gwenole Beauchesne
7e6f7f384a encoder: h264: fix PPS header packing with profile < high.
Fix PPS header packing when profile is below High since 8x8 transform
mode and scaling lists are High Profile features.
2014-01-15 15:54:32 +01:00
Gwenole Beauchesne
391ad15ba0 encoder: h264: always emit VUI parameters for framerate.
Always emit VUI parameters for timing_info, which includes framerate
information.
2014-01-15 15:46:19 +01:00
Gwenole Beauchesne
5f5df3f723 encoder: h264: really fix frame cropping rectangle calculation.
Make frame cropping rectangle calculation future proof, i.e. exactly
follow the specification (7-18) to (7-21), and subsampling definitions
from Table 6-1.

https://bugzilla.gnome.org/show_bug.cgi?id=722089
https://bugzilla.gnome.org/show_bug.cgi?id=722238
2014-01-15 15:15:54 +01:00
Gwenole Beauchesne
751aa05937 surface: rework render flags.
Pack render flags per category and provide more flags into the color
standard category. In particular, cover for SMPTE-240M.
2014-01-15 13:53:42 +01:00
Zhao, Halley
467bf95c09 vaapipostproc: add support for colorbalance filters.
Add support for hue, saturation, brightness and constrat adjustments.
Also fix cap info local copy to match the really expected cap subtype
of interest.

https://bugzilla.gnome.org/show_bug.cgi?id=720376

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2014-01-15 11:49:49 +01:00
Gwenole Beauchesne
c03682ecc1 encoder: re-order submission of VA objects.
Change the submission order of VA objects so that to make that process
more logical. i.e. submit sequence parameter first, if any; next the
packed headers associated to sequece, picture or slices; and finally
the actual picture and associated slices.
2014-01-14 15:28:21 +01:00
Gwenole Beauchesne
d45c6a486f encoder: clean-up objects.
Various clean-ups to improve consistency and readability: rename some
variables, drop unused macro definitions, drop initialization of vars
that are zero-initialized from the base class, drop un-necessary casts,
allocate GPtrArrays with a destroy function.
2014-01-14 15:28:19 +01:00
Gwenole Beauchesne
78bf2c01cc encoder: h264: fix frame cropping rectangle calculation.
Fix frame cropping rectangle calculation to handle horizontal resolutions
that don't match a multiple of 16 pixels, but also the vertical resolution
that was incorrectly computed for progressive sequences too.

https://bugzilla.gnome.org/show_bug.cgi?id=722089
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
c7a2095b78 encoder: h264: improve automatic bitrate calculation.
For non "Constant-QP" modes, we could provide more reasonable heuristics
for the target bitrate. In general, 48 bits per macroblock with all the
useful coding tools enable looks safe enough. Then, this rate is raised
by +10% to +15% for each coding tool that is disabled.

https://bugzilla.gnome.org/show_bug.cgi?id=719699
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
7b1233faa8 encoder: h264: support "high-compression" tuning option.
Add support for "high-compression" tuning option. First, determine the
largest supported profile by the hardware. Next, check any target limit
set by the user. Then, enable each individual coding tool based on the
resulting profile_idc value to use.

https://bugzilla.gnome.org/show_bug.cgi?id=719696
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
bdf91aa765 encoder: h264: allow target decoder constraints.
Allow user to precise the largest profile to use for encoding due
to target decoder constraints. For instance, if CABAC entropy coding
mode is requested by "constrained-baseline" profile only is desired,
then an error is returned during codec configuration.

Also make sure that the suitable profile we derived actually matches
what the HW can cope with.

https://bugzilla.gnome.org/show_bug.cgi?id=719694
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
00e0af9a7c encoder: h264: refine size of coded buffer.
Refine the heuristic to determine the maximum size of a coded buffer
to account for the exact number of slices. set_context_info() is the
last step during codec reconfiguration, no additional change is done
afterwards, so re-using the num_slices field here is fine.

https://bugzilla.gnome.org/show_bug.cgi?id=719953
2014-01-13 17:31:55 +01:00
Wind Yuan
8df97cf9ec encoder: h264: expose more coding tools.
Add new H.264 coding tools to improve compression:
- "cabac": enable CABAC entropy coding (default: FALSE);
- "dct8x8": enable spatial transform 8x8 (default: FALSE).

https://bugzilla.gnome.org/show_bug.cgi?id=719693

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
b59a5572af encoder: h264: derive profile and level from active coding tools.
Automatically derive the minimum profile and level to be used for
encoding, based on the activated coding tools. The encoder will
be trying to generate a bitstream that has the best chances to be
decoded on most platforms by default.

Also change the default profile to "constrained-baseline" so that
to ensure maximum compatibility when the stream is decoded.

https://bugzilla.gnome.org/show_bug.cgi?id=719691
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
2b482e8e4b encoder: h264: fix hardware profile lookup.
Fix lookup for a suitable HW profile, as to be used by the underlying
hardware, based on heuristics that lead to characterize the SW profile,
i.e. the one used by the SW level encoding logic.

Also fix constraint_set0_flag (A.2.1) and constraint_set1_flag (A.2.2)
as they should respectively match the baseline and main profile.

https://bugzilla.gnome.org/show_bug.cgi?id=719827
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
e2f8c059a5 encoder: h264: support only the byte-stream format.
The libgstvaapi core encoders are meant to support raw bitstreams only.
Henceforth, we are always producing a stream in "byte-stream" format.

However, the "codec-data" buffer which holds SPS and PPS headers is
always available. The "lengthSizeMinusOne" field is always set to 3
so that in-place "byte-stream" format to "avc" format conversion could
be performed.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
45732dcc83 encoder: h264: clean-ups.
Various clean-ups to improve consistency and readability: rename some
variables, drop unused macro definitions, drop initialization of vars
that are zero-initialized from the base class, drop un-necessary casts.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
0c5f69e0d9 encoder: mpeg2: fix hardware profile lookup.
Fix lookup for a suitable HW profile, as to be used by the underlying
hardware, based on heuristics that lead to characterize the SW profile,
i.e. the one used by the SW level encoding logic.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
e311d53c8a encoder: mpeg2: derive profile and level from active coding tools.
Automatically derive the minimum profile and level to be used for
encoding, based on the activated coding tools. Improve lookup for
the best suitable level with the new MPEG-2 helper functions.

Also change the default profile to "simple" so that to ensure maximum
compatibility when the stream is decoded.

https://bugzilla.gnome.org/show_bug.cgi?id=719703
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
1edeb6ec08 encoder: mpeg2: clean-ups.
Various clean-ups to improve consistency and readability: drop unused
macro definitions, drop initialization of vars that are zero-initialized
from the base class, drop un-necessary casts.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
21c95dbc42 encoder: add tuning options API.
Add encoder "tune" option to override the default behaviour that is to
favor maximum decoder compatibility at the expense of lower compression
ratios.

Expected tuning options to be developed are:
- "high-compression": improve compression, target best-in-class decoders;
- "low-latency": tune for low-latency decoding;
- "low-power": tune for encoding in low power / resources conditions.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
368caf22da encoder: fix bitrate units to match kbps.
Bitrate is expressed in kilobits per second (kbps). So, this exactly
means in multiple of 1000 bits, not 1024 bits.

https://bugzilla.gnome.org/show_bug.cgi?id=722086
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
4a6fbddad6 encoder: clean-ups.
Drop obsolete and unused macros. Add a few doc comments. Slightly
improve indentation of a few leftovers.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
850a637d0f encoder: filter out the supported set of rate-control properties.
Only expose the exact static set of supported rate-control properties
to the upper layer. For instance, if the GstVaapiEncoderXXX class does
only support CQP rate control, then only add it the the exposed enum
type.

Add helper macros and functions to build a GType for an enum subset.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
59229b20a5 encoder: add keyframe period API.
Add gst_vaapi_encoder_set_keyframe_period() interface to allow the
user control the maximum distance between two keyframes. This new
property can only be set prior to gst_vaapi_encoder_set_codec_state().

A value of zero for "keyframe-period" gets it re-evaluated to the
actual framerate during encoder reconfiguration.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
8788ea99a8 encoder: improve codec reconfiguration.
Improve codec reconfiguration to be performed only through a single
function. That is, remove the _set_context_info() hook as subclass
should not alter the parent GstVaapiContextInfo itself. Besides, the
VA context is constructed only at the final stages of reconfigure().
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
20ab910d15 encoder: fix possible memory leak of coded buffer pools.
Fix gst_vaapi_encoder_reconfigure_internal() to re-/allocate the coded
buffer pool only if the coded buffer size actually changed.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
5394c75461 encoder: add video codec-state API.
Add interface to communicate the encoder resolution and related info
like framerate, interlaced vs. progressive, etc. This new interface
supersedes gst_vaapi_encoder_set_format() and doesn't use any GstCaps
but rather use GstVideoCodecState.

Note that gst_vaapi_encoder_set_codec_state() is also a synchronization
point for codec config. This means that the encoder is reconfigured
there to match the latest properties.
2014-01-13 17:31:55 +01:00
Gwenole Beauchesne
dcc7a94408 encoder: add properties API.
Add interface to communicate configurable properties to the encoder.
This covers both the common ones (rate-control, bitrate), and the
codec specific properties.

https://bugzilla.gnome.org/show_bug.cgi?id=719529
2014-01-13 17:31:54 +01:00
Gwenole Beauchesne
70b3600f11 encoder: add bitrate API.
Add gst_vaapi_encoder_set_bitrate() interface to allow the user control
the bitrate for encoding. Currently, changing this parameter is only
valid before the first frame is encoded. Should the value be modified
afterwards, then GST_VAAPI_ENCODER_STATUS_ERROR_OPERATION_FAILED is
returned.

https://bugzilla.gnome.org/show_bug.cgi?id=719529
2014-01-13 17:31:54 +01:00
Gwenole Beauchesne
a24c52e4d0 encoder: add rate control API.
Add gst_vaapi_encoder_set_rate_control() interface to request a new
rate control mode for encoding. Changing the rate control mode is
only valid prior to encoding the very first frame. Afterwards, an
error ("operation-failed") is issued.

https://bugzilla.gnome.org/show_bug.cgi?id=719529
2014-01-13 17:31:54 +01:00
Gwenole Beauchesne
01af353116 encoder: fix indentation. 2014-01-13 17:31:54 +01:00
Gwenole Beauchesne
9548e32cf4 utils: add new MPEG-2 helper functions.
Add various helper functions to convert profile, level, chroma formats
from gstreamer-vaapi world and the MPEG-2 specification world.
2014-01-13 16:25:49 +01:00
Gwenole Beauchesne
4a650e8e62 utils: h264: don't use fatal asserts.
Replace g_assert() with a g_debug() so that to not make the program
abort when an unsupported value is supplied.
2014-01-10 19:52:50 +01:00
Gwenole Beauchesne
b0c2ac4159 utils: h264: add helpers for profile and level string mappings.
Add profile and level helper functions to convert to/from strings.
2014-01-10 19:52:50 +01:00
Gwenole Beauchesne
589078f2a4 utils: h264: expose levels in public header.
Instal <gst/vaapi/gstvaapiutils_h264.h> header but only expose the
H.264 levels in there. The additional helper functions are meant
to be private for now.
2014-01-10 19:52:50 +01:00
Gwenole Beauchesne
39dda15f5f codec: add helper macros to maintain object refcount.
Add gst_vaapi_mini_object_{ref,unref,replace}() helper macros so that
to avoid explicit casts to GstVaapiMiniObject in all caller sites.
2014-01-09 09:59:17 +01:00
Gwenole Beauchesne
caf13671bb codec: re-indent decoder objects. 2014-01-09 09:46:46 +01:00
Gwenole Beauchesne
c010ce2340 codec: re-indent base codec objects. 2014-01-09 09:46:46 +01:00
Gwenole Beauchesne
dd2ca582a1 tests: simple-decoder: don't use deprecated g_thread_create().
Use g_thread_try_new() instead of the deprecated g_thread_create()
function. Provide compatibility glue for any GLib version < 2.31.2.
2014-01-06 10:04:08 +01:00
Gwenole Beauchesne
33bb859228 Fix printf()-like formats.
Fix formts for various GST_DEBUG et al. invocations. More precisely,
make size_t arguments use the %zu format specifier accordingly; force
XID formats to be a 32-bit unsigned integer; and fix the format used
for gst_vaapi_create_surface_with_format() error cases since we have
been using strings nowadays.
2014-01-06 10:04:05 +01:00
Gwenole Beauchesne
4902df0e40 utils: format: drop unused helper functions.
The following helper functions are no longer used, thus are removed:
- gst_vaapi_video_format_from_structure()
- gst_vaapi_video_format_from_caps()
- gst_vaapi_video_format_to_caps()
2013-12-21 12:35:24 +01:00
Gwenole Beauchesne
52b6fc57d4 utils: re-indent GstVideoFormat related helpers. 2013-12-21 12:35:24 +01:00
Gwenole Beauchesne
c5581298fb display: don't use GstCaps for decode or encode profiles list.
Replace gst_vaapi_display_get_{decode,encode}_caps() APIs with more
more convenient APIs that return an array of GstVaapiProfile instead
of GstCaps: gst_vaapi_display_get_{decode,encode}_profiles().
2013-12-20 17:16:58 +01:00
Gwenole Beauchesne
c4ca08a8d6 display: don't use GstCaps for image or subpicture formats list.
Replace gst_vaapi_display_get_{image,subpicture}_caps() APIs, that
returned GstCaps, with more convenient APIs that return an array of
GstVideoFormat: gst_vaapi_display_get_{image,subpicture}_formats().
2013-12-20 17:16:58 +01:00
Gwenole Beauchesne
446b060c7a display: allocate queried resources on-demand.
Allocate the set of decoders or encoders on-demand, when they are
queried. Likewise for VA display attributes, image and subpicture
formats.
2013-12-20 17:16:12 +01:00
Gwenole Beauchesne
ff0642efad display: re-indent all GstVaapiDisplay related source code. 2013-12-20 17:16:12 +01:00
Gwenole Beauchesne
a6fe7698bc utils: add helper functions to get codec or profile name. 2013-12-20 17:16:12 +01:00
Gwenole Beauchesne
b324fc6add plugins: factor out pad caps. 2013-12-18 16:38:57 +01:00
Gwenole Beauchesne
fad3f538bc plugins: check type of display obtained from neighbours.
Fix display creation code to check that any display obtained from a
neighbour actually has the type we expect. Note: if display type is
set to "any", we can then accept any VA display type.
2013-12-18 16:38:57 +01:00
Gwenole Beauchesne
61f6cbffc6 plugins: fix GLTextureUploadMeta to work with different texture ids.
The GLTextureUploadMeta implementation assumed that for each upload()
sequence, the supplied texture id is always the same as the one that
was previously cached into the underlying GstVaapiTexture. Cope with
any texture id change the expense to recreate the underlying VA/GLX
resources.

https://bugzilla.gnome.org/show_bug.cgi?id=719643
2013-12-11 15:30:51 +01:00
Gwenole Beauchesne
6fe54964bb h264: improve robustness when packets are missing.
Improve robustness when some expected packets where not received yet
or that were not correctly decoded. For example, don't try to decode
a picture if there was no valid frame headers parsed so far.

https://bugs.freedesktop.org/show_bug.cgi?id=57902
2013-12-10 16:14:27 +01:00
Gwenole Beauchesne
1dd89800b0 decoder: h264: fix decoding of BA3_SVA_C.264.
Conformance test Base_Ext_Main_profiles/BA3_SVA_C.264 complys with
extended profile specifications. However, the SPS header has the
constraint_set1_flag syntax element set to 1. This means that, if
a Main profile compliant decoder is available, then it should be
able to decode this stream.

This changes makes it possible to fall-back from Extended profile
to Main profile if constraint_set1_flag is set to 1.

https://bugzilla.gnome.org/show_bug.cgi?id=720190
2013-12-10 15:22:40 +01:00
Gwenole Beauchesne
416ab33e34 utils: h264: add more profiles.
Add extended profile (A.2.3), high 4:2:2 profile (A.2.6), high 4:2:2
profiles (A.2.7, A.2.10), scalable profiles (G.10.1.1, G.10.1.2) and
multiview profiles (H.10.1.1, H.10.1.2).

Document "Constrained Baseline" and "High 10" profiles.
2013-12-10 15:22:40 +01:00
Wind Yuan
009e4522bf decoder: h264: add support for constrained baseline profile.
Recognize streams marked as conforming to the "Constrained Baseline
Profile". If VA driver supports that as is, fine. Otherwise, fallback
to baseline, main or high profile.

Constrained Baseline Profile conveys coding tools that are common
to baseline profile and main profile.

https://bugzilla.gnome.org/show_bug.cgi?id=719947

[Added fallbacks to main and high profiles]
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-12-09 13:11:56 +01:00
Gwenole Beauchesne
bd5ae1b220 decoder: h264: fix decoding of scaling lists.
The GStreamer codecparser layer now parses the scaling lists in zigzag
scan order, as expected, so that to match the original bitstream layout
and specification. However, further convert the scaling lists into
raster scan order to fit the existing practice in most VA drivers.

https://bugzilla.gnome.org/show_bug.cgi?id=706406
2013-12-09 12:46:45 +01:00
Gwenole Beauchesne
e2f137f149 utils: add helpers for H.264 levels.
- gst_vaapi_utils_h264_get_level():
  Returns GstVaapiLevelH264 from H.264 level_idc value
- gst_vaapi_utils_h264_get_level_idc():
  Returns H.264 level_idc value from GstVaapiLevelH264
- gst_vaapi_utils_h264_get_level_limits():
  Returns level limits as specified in Table A-1 of the H.264 standard
- gst_vaapi_utils_h264_get_level_limits_table():
  Returns the Table A-1 specification
2013-12-06 19:26:15 +01:00
Gwenole Beauchesne
7f1f879e28 utils: add new H.264 profiles.
Add "Constrained Baseline Profile" and "High 10 Profile" definitions
and helper functiions.
2013-12-06 19:25:22 +01:00
Gwenole Beauchesne
47dee4db96 utils: add new H.264 helper functions.
* Profiles:
- gst_vaapi_utils_h264_get_profile():
  Returns GstVaapiProfile from H.264 profile_idc value
- gst_vaapi_utils_h264_get_profile_idc():
  Returns H.264 profile_idc value from GstVaapiProfile

* Chroma formats:
- gst_vaapi_utils_h264_get_chroma_type():
  Returns GstVaapiChromaType from H.264 chroma_format_idc value
- gst_vaapi_utils_h264_get_chroma_format_idc():
  Returns H.264 chroma_format_idc value from GstVaapiChromaType
2013-12-06 19:25:21 +01:00
Matthieu Bouron
44ead80f5f Fix missing files in distribution tarball.
https://bugzilla.gnome.org/show_bug.cgi?id=719776

[Additional fixes and clean-ups]
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-12-06 14:16:28 +01:00
Gwenole Beauchesne
2940a74ea4 encoder: fix computation of max coded buffer size (again).
The previous fix was only valid to express the maximum size of the
macroblock layer, i.e. without any headers. Now, also account for
the slice headers and top picture header, but also any other header
we might stuff into the VA coded buffer, e.g. sequence headers.
2013-12-05 18:13:54 +01:00
Gwenole Beauchesne
b864d1f71a encoder: fix computation of max coded buffer size.
Fix coded buffer size for each codec. A generic issue was that the
number of macroblocks was incorrectly computed. The second issue was
specific to MPEG-2 were the max number of bits per macroblock, and
as defined by the standard, was incorrectly mapped to the (lower)
H.264 requirement. i.e. 4608 bits vs. 3200 bits limit.
2013-12-04 19:14:38 +01:00
Gwenole Beauchesne
fd9c855f14 encoder: simplify VA context initialization process.
Change get_context_info() into a set_context_info() function that
initializes common defaults into the base class, thus allowing the
subclasses to specialize the context info further on.

The set_context_info() hook is also the location where additional
context specific data could be initialized. At this point, we are
guaranteed to have valid video resolution size and framerate. i.e.
gst_vaapi_encoder_set_format() was called beforehand.
2013-12-04 19:14:38 +01:00
Wind Yuan
fdddf83c71 encoder: fix mpeg2 compilation error.
https://bugzilla.gnome.org/show_bug.cgi?id=719746

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-12-04 19:14:38 +01:00
Gwenole Beauchesne
2f5e5f0784 encoder: clean-ups and document public APIs.
Clean public APIs up so that to better align with the decoder APIs.
Most importantly, gst_vaapi_encoder_get_buffer() is changed to only
return the VA coded buffer proxy. Also provide useful documentation
for the public APIs.
2013-12-04 19:14:38 +01:00
Gwenole Beauchesne
26726b18fc encoder: avoid extra allocations of GstVaapiEncoderSyncPic objects.
Kill GstVaapiEncoderSyncPic objects that are internally and temporarily
allocated. Rather, associate a GstVaapiEncPicture to a coded buffer
through GstVaapiCodedBufferProxy user-data facility.

Besides, use a GAsyncQueue to maintain a thread-safe queue object of
coded buffers.

Partial fix for the following report:
https://bugzilla.gnome.org/show_bug.cgi?id=719530
2013-12-04 19:14:38 +01:00
Gwenole Beauchesne
038149b69b encoder: refactor status codes.
Drop obsolete or unused status codes. Align some status codes with the
decoder counterparts.
2013-12-04 19:14:38 +01:00
Gwenole Beauchesne
8ecc35ecf2 encoder: fix subclassing process.
Fix the GstVaapiEncoderClass parent class type. Make sure to validate
subclass hooks as early as possible, i.e. in gst_vaapi_encoder_init(),
thus avoiding useless run-time checks. Also simplify the subclass
initialization process to be less error prone.
2013-12-04 19:14:38 +01:00
Gwenole Beauchesne
0fb7c60508 encoder: rework GstVaapiCodedBuffer and related proxy.
Refactor the GstVaapiCodedBuffer APIs so that to more clearly separate
public and private interfaces. Besides, the map/unmap APIs should not
be exposed as is but appropriate accessors should be provided instead.

* GstVaapiCodedBuffer: VA coded buffer abstraction
- gst_vaapi_coded_buffer_get_size(): get coded buffer size.
- gst_vaapi_coded_buffer_copy_into(): copy coded buffer into GstBuffer

* GstVaapiCodedBufferPool: pool of VA coded buffer objects
- gst_vaapi_coded_buffer_pool_new(): create a pool of coded buffers of
  the specified max size, and bound to the supplied encoder

* GstVaapiCodedBufferProxy: pool-allocated VA coded buffer object proxy
- gst_vaapi_coded_buffer_proxy_new_from_pool(): create coded buf from pool
- gst_vaapi_coded_buffer_proxy_get_buffer(): get underlying coded buffer
- gst_vaapi_coded_buffer_proxy_get_buffer_size(): get coded buffer size

Rationale: more optimized transfer functions might be provided in the
future, thus rendering the map/unmap mechanism obsolete or sub-optimal.

https://bugzilla.gnome.org/show_bug.cgi?id=719775
2013-12-04 19:14:38 +01:00
Gwenole Beauchesne
9ab6037847 plugins: use G_PARAM_STATIC_STRINGS.
This avoids a few string copies during initialization.
2013-11-28 17:35:44 +01:00
Gwenole Beauchesne
5e245ae2c2 surfaceproxy: add copy function.
Add gst_vaapi_surface_proxy_copy() function that creates a new surface
proxy with the same information from the parent proxy, except that the
user-defined destroy notify function is not copied over.

The underlying VA surface is pushed back to the video pool only when
the last reference to the parent surface proxy is released.
2013-11-28 17:32:18 +01:00
Gwenole Beauchesne
30f382fcdf vaapiencode: optimize _handle_frame() to avoid extra allocation.
Optimize gst_vaapiencode_handle_frame() to avoid extra memory allocation,
and in particular the GstVaapiEncObjUserData object. i.e. directly use
the VA surface proxy from the source buffer. This also makes the user
data attached to the GstVideoCodecFrame more consistent between both
the decoder and encoder plug-in elements.
2013-11-28 17:32:18 +01:00
Gwenole Beauchesne
bc020c05f9 vaapiencode: add initial support for GStreamer 0.10. 2013-11-27 17:23:56 +01:00
Gwenole Beauchesne
e9e988fc71 libs: add more GstBuffer compat glue for GStreamer 0.10.
Add gst_buffer_new_allocate() and gst_buffer_fill() implementations.
Fix gst_buffer_new_wrapped_full() implementation to handle the destroy
notify function.
2013-11-27 17:23:56 +01:00
Gwenole Beauchesne
f82deaf10c libs: always use built-in videoutils for GStreamer 0.10.
GStreamer 0.10.36 is the latest and ultimate version to be released
from the GStreamer 0.10 branch. i.e. no further releases are to be
made. So, we can safely enable the built-in videoutils replacement
now that they are in sync with the 0.10 branch.
2013-11-27 17:23:56 +01:00
Matthieu Bouron
76174922bc Fix build with GStreamer >= 1.3.
http://bugzilla.gnome.org/show_bug.cgi?id=715183

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-27 15:08:40 +01:00
XuGuangxin
d753c2226a encoder: add mpeg2 encoder.
Add initial support for MPEG-2 encoding. I/P/B frames are supported.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-24 16:52:05 +01:00
Wind Yuan
652245fb87 encoder: add h264 encoder.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-24 16:52:05 +01:00
Wind Yuan
8174a35737 Add initial infrastructure for video encoding.
Add initial API for video encoding: only basic interfaces and small
encoder objects are implemented so far.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-24 16:52:05 +01:00
Wind Yuan
99947d0592 libs: add generic bitstream writer.
GstBitWriter provides a bit writer that can write any number of bits
to a pre-allocated memory buffer. Helper functions are also provided
to write any number of bits from 8, 16, 32 and 64 bit variables.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-24 16:52:05 +01:00
Wind Yuan
02e174c8bc libs: add support for rate-control to GstVaapiContext.
Extend GstVaapiContextInfo structure to hold the desired rate control
mode for encoding purposes. For decoding purposes, this field is not
used and it is initialized to GST_VAAPI_RATECONTROL_NONE.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-24 16:45:35 +01:00
Wind Yuan
082fb3f1b4 libs: add rate-control attributes.
Add GstVaapiRateControl types and GType values in view to supporting
rate controls for encoding. This is meant to be used for instance in
GstVaapiContext.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-24 16:45:31 +01:00
Ross Burton
bc8a87d8bb build: link libgstvaapi-wayland against videoutils.
This library is using symbols that don't exist in GStreamer 0.10 so
it needs to link to built-in implementation (libgstvaapi-videoutils).

https://bugzilla.gnome.org/show_bug.cgi?id=712282

Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-22 11:23:03 +01:00
Gwenole Beauchesne
922a04b734 vaapostproc: fix memory leaks.
Destroy VPP output surface pool on exit. Also avoid a possible crash
in double-free situation caused by insufficiently reference counted
array of formats returned during initialization.
2013-11-22 11:15:57 +01:00
Gwenole Beauchesne
c516311a1a legal: update copyright notice dates. 2013-11-22 06:39:20 +01:00
Gwenole Beauchesne
15519ebe3d legal: add per-file authorship information.
Credit original authors on a per-file basis as we cannot expect people
to know all country-specific rules, or bother browsing through the git
history.
2013-11-22 06:39:15 +01:00
Gwenole Beauchesne
dc48509bad decoder: don't include obsolete headers.
The <gst/vaapi/gstvaapicontext.h> header was removed from the public
set of APIs. So, don't make public headers (gstvaapidecoder.h) depend
on private files.
2013-11-21 23:17:59 +01:00
Halley Zhao
5a9e169504 filter: add helper to specify references for deinterlacing.
Add gst_vaapi_fitler_set_deinterlacing_references() API to submit the
list of surfaces used for forward or backward reference in advanced
deinterlacing mode, e.g. Motion-Adaptive, Motion-Compensated.

The list of surfaces used as deinterlacing references shall be live
until the next call to gst_vaapi_filter_process().

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-21 23:08:02 +01:00
Gwenole Beauchesne
06c7fde8e0 filter: fix semantics of deinterlacing flags.
Fix deinterlacing flags to make more sense. The TFF (top-field-first)
flag is meant to specify the organization of reference frames used in
advanced deinterlacing modes. Introduce the more explicit flag TOPFIELD
to specify that the top-field of the supplied input surface is to be
used for deinterlacing. Conversely, if not set, this means that the
bottom field of the supplied input surface will be used instead.
2013-11-21 23:08:02 +01:00
Gwenole Beauchesne
152ffb52d2 filter: add helpers to check for supported/active operation.
Add a couple of helper functions:
- gst_vaapi_filter_has_operation(): checks whether the VA driver
  advertises support for the supplied operation ;
- gst_vaapi_filter_use_operation(): checks whether the supplied
  operation was already enabled to its non-default value.
2013-11-21 23:08:02 +01:00
Gwenole Beauchesne
a1189301c9 libs: fix GstVaapiSurfaceProxy destroy notify call site.
The user-defined destroy notify function is meant to be called only when
the surface proxy was fully released, i.e. once it actually released the
VA surface back to the underlying pool.
2013-11-21 11:08:23 +01:00
XuGuangxin
f9ee8703cf libs: make GstVaapiVideoPool thread-safe.
https://bugzilla.gnome.org/show_bug.cgi?id=707108

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-21 11:08:23 +01:00
XuGuangxin
f9d0d6e272 libs: robustify decoder objects and surface proxy initialization.
Fix GstVaapiPicture, GstVaapiSlice and GstVaapiSurfaceProxy initialization
sequences to have the expected default values set beforehand in case of an
error raising up further during creation. i.e. make it possible to cleanly
destroy those partially initialized objects.

https://bugzilla.gnome.org/show_bug.cgi?id=707108

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-11-21 11:08:23 +01:00
Gwenole Beauchesne
f6f24bfc55 vaapipostproc: rework plug-in element.
Rewrite the vaapipostproc plug-in element so that it derives from
GstBaseTransform, thus simplifying the caps negotiation process.
2013-10-09 18:30:06 +02:00
Gwenole Beauchesne
b242c5874b filter: fix memory leak of VPP operations.
Fix ensure_operations() to release the VPP operations array if non
NULL, prior to returning to the caller. The former function was also
renamed to a more meaningful get_operations() since the caller owns
the returned array that needs to be released.
2013-10-01 18:41:29 +02:00
Zhao Halley
e05e65e349 filter: fix first-time operation lookup.
Fix first-time operation lookup through find_operation() if the set
of supported operations was not initially determined through the
gst_vaapi_filter_get_operations() helper function.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-10-01 18:41:29 +02:00
Zhao Halley
3e4d8d27b3 filter: fix colorbalance related subtypes.
Fix intiialization of GstVaapiFilterOpData for colorbalance related
operations. In particular, fill in the va_subtype field accordingly.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-10-01 18:41:29 +02:00
Víctor Manuel Jáquez Leal
94b554e7a2 filter: fix VA-API 0.34.0 symbol guards.
VASurfaceAttrib and VAProcFilterParameterBufferType are symbols
that need to be guarded for libva 0.34 and 0.33, respectively.

https://bugzilla.gnome.org/show_bug.cgi?id=709102

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-10-01 18:41:29 +02:00
Gwenole Beauchesne
c171b007ff jpeg: fix calculation of MCU count.
Fix calculation of MCU count for image sizes that are not a multiple
of 8 pixels in either dimension, but also for non-common sampling
factors like 4:2:2 in non-interleaved mode.
2013-09-23 19:17:17 +02:00
Gwenole Beauchesne
5444ab44d2 jpeg: add support for multiscan images.
Add support for images with multiple scans per frame. The Huffman table
can be updated before SOS, and thus possibly requiring multiple uploads
of Huffman tables to the VA driver. So, the latter must be able to cope
with multiple VA buffers of type 'huffman-table' and with the correct
sequential order.
2013-09-23 17:38:07 +02:00
Gwenole Beauchesne
fd51db279a jpeg: improve robustness when packets are missing.
Improve robustness when some expected packets where not received yet
or that were not correctly decoded. For example, don't try to decode
a picture if there was no valid frame headers.
2013-09-23 17:25:51 +02:00
Gwenole Beauchesne
22fef09443 jpeg: minor clean-ups.
Improve debugging and error messages. Rename a few variables to fit the
existing naming conventions. Change some fatal asserts to non-fatal
error codes.
2013-09-20 18:32:12 +02:00
Gwenole Beauchesne
f52dfe5797 jpeg: rework and optimize parser.
Split the input buffer data into decoder units that represent a JPEG
segment. Handle scan decoder unit specifically so that it can include
both the scan header (SOS) but also any other ECS or RSTi segment.

That way, we parse the input buffer stream only once at the gst-vaapi
level instead of (i) in gst_vaapi_decoder_jpeg_parse() to split the
stream into frames SOI .. EOI and (ii) in decode_buffer() to further
determine segment boundaries and decode them.

In practice, this is a +15 to +25% performance improvement.
2013-09-20 18:32:12 +02:00
Junfeng Xu
a4aac6b89e jpeg: handle comment segments.
Fix decode_buffer() function to gracefully skip comment (COM) segments.
This fixes decoding of streams generated by certain cameras, e.g. like
the Logitech Pro C920.

https://bugzilla.gnome.org/show_bug.cgi?id=708208

Signed-off-by: Junfeng Xu <jun.feng.xu@intel.com>
2013-09-20 18:32:12 +02:00
Gwenole Beauchesne
77298beb15 jpeg: fix determination of image bounds.
Look for the exact image bounds characterised by the <SOI> and <EOI>
markers. Use the gst_jpeg_parse() codec parser utility function to
optimize the lookup for the next marker segment.

https://bugzilla.gnome.org/show_bug.cgi?id=707447
2013-09-20 18:32:12 +02:00
Junfeng Xu
9c29bbde58 jpeg: fix calculation of offset to next marker segment.
Fix calculation of the offset to the next marker segment since the
correction of the codecparser part to match the API specification.
i.e. the GstJpegMarkerSegment.size field represents the size in bytes
of the segment minus any marker prefix.

https://bugzilla.gnome.org/show_bug.cgi?id=707447

Signed-off-by: Junfeng Xu <jun.feng.xu@intel.com>
2013-09-20 18:32:12 +02:00
Wind Yuan
621d48a5b1 configure: fix detection of VA/JPEG decoding API.
Fix detection of VA/JPEG decoding API with non-standard libva packages.
More precisely, some packages were shipping with a <va/va.h> header that
did not include <va/va_dec_jpeg.h>.

https://bugzilla.gnome.org/show_bug.cgi?id=706055

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-08-29 19:44:48 +02:00
Gwenole Beauchesne
1362352825 wayland: render the raw surface if VPP failed.
As a last resort, if video processing capabilities (VPP) are not available,
or they did not produce anything conclusive enough, then try to fallback to
the original rendering code path whereby the whole VA surface is rendered
as is, no matter of video cropping or deinterlacing requests.

Note: under those conditions, the visual outcome won't be correct but at
least, something gets displayed instead of bailing out.
2013-08-27 18:29:45 +02:00
Gwenole Beauchesne
7759acd2f0 wayland: add supporting for video processing.
Try to use VA/VPP processing capabilities to handle video cropping and
additional rendering flags that may not be directly supported by the
underlying hardware when exposing a suitable Wayland buffer for the
supplied VA surface. e.g. deinterlacing, different color primaries than
BT.601, etc.
2013-08-27 18:29:45 +02:00
Gwenole Beauchesne
5fdc9a0e95 wayland: add new frame redraw infrastructure.
Update the frame redraw infrastructure with a new FrameState stucture
holds all the necessary information used to display the next pending
surface.

While we are at it, delay the sync operation down to when it is actually
needed. That way, we keep performing additional tasks meanwhile.
2013-08-27 18:28:28 +02:00
Gwenole Beauchesne
71e5fd536f filter: allow specification of render target regions.
Add support for rendering the source surface to a particular region within
the supplied target surface. The default background color is black.
2013-08-27 18:28:10 +02:00
Gwenole Beauchesne
292b2f51b4 mpeg2: disable video cropping as picture_display_extension() is missing.
Disable video cropping in MPEG-2 codec because it is partially implemented
and actually because nobody implements it that way, and the standard spec
does not specify the display process either anyway.

Most notably, there are two possible use cases for sequence_display_extension()
horizontal_display_size & vertical_display_size: (i) guesstimating the
pixel-aspect-ratio, or (ii) implement some kind of span & scan process
in conjunction with picture_display_extension() information.

https://bugzilla.gnome.org/show_bug.cgi?id=704848
2013-08-26 16:19:01 +02:00
Gwenole Beauchesne
d16db58968 mpeg4: fix double definition of GstVaapiDecoderMpeg4Class.
This fixes the following issue:

  CC     libgstvaapi_0.10_la-gstvaapidecoder_mpeg4.lo
gstvaapidecoder_mpeg4.c:113: error: redefinition of typedef
'GstVaapiDecoderMpeg4Class'
gstvaapidecoder_mpeg4.c:44: note: previous declaration of
'GstVaapiDecoderMpeg4Class' was here
make[5]: *** [libgstvaapi_0.10_la-gstvaapidecoder_mpeg4.lo] Error 1
make[5]: Leaving directory
`/builddir/build/BUILD/gstreamer-vaapi-0.5.5.1/gst-libs/gst/vaapi'

https://bugzilla.gnome.org/show_bug.cgi?id=705148
2013-08-26 11:31:06 +02:00
Zhao Halley
944a7bd077 filter: add initial support for deinterlacing.
Add basic deinterlacing support, i.e. bob-deinterlacing whereby only
the selected field from the input surface is kept for the target surface.
Setting gst_vaapi_filter_set_deinterlacing() method argument to
GST_VAAPI_DEINTERLACE_METHOD_NONE means to disable deinterlacing.

Also move GstVaapiDeinterlaceMethod definition from vaapipostproc plug-in
to libgstvaapi core library.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-08-23 19:00:38 +02:00
Zhao Halley
1d222d3b4a filter: add support for color balance adjustment.
Add ProcAmp (color balance) adjustments for hue, saturation, brightness
and contrast. The respective range for each filter shall be the same as
for the VA display attributes.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-08-23 19:00:38 +02:00
Zhao Halley
a854768a80 filter: add support for sharpening.
Sharpening is configured with a float value. The supported range is
-1.0 .. 1.0 with 0.0 being the default, and that means no sharpening
operation at all.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-08-23 19:00:38 +02:00
Zhao Halley
22f55bd513 filter: add support for denoising.
Noise reduction is configured with a float value. The supported range
is 0.0 .. 1.0 with 0.0 being the default, and that means no denoise
operation at all.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-08-23 19:00:38 +02:00
Gwenole Beauchesne
81395418e9 filter: add support for frame cropping.
Frame cropping is defined with a GstVaapiRectangle value. The default
behaviour is to treat the source surface as a whole
2013-08-23 19:00:38 +02:00
Gwenole Beauchesne
87c8d28499 filter: add helper functions.
Add helper functions to ensure an operation VA buffer is allocated to
the right size; that filter caps get parsed and assigned to the right
operation too; and that float parameters are correctly scaled to fit
the reported range from the VA driver.
2013-08-23 19:00:38 +02:00
Gwenole Beauchesne
f09008a8d1 Add initial infrastructure for video processing.
Add initial API for video processing: only scaling and color format
conversion operations are supported.
2013-08-23 19:00:38 +02:00
Gwenole Beauchesne
f34b6ffc60 libs: add gst_vaapi_video_format_from_string() helper.
Add gst_vaapi_video_format_from_string() helper function to convert from
a video format string representation to a suitable GstVideoFormat. This
is just an alias to gst_video_format_from_string() for GStreamer 1.0.x
builds, and a proper iteration over all GstVideoFormat string representations
otherwise for earlier GStreamer 0.10.x builds.
2013-08-23 19:00:38 +02:00
Gwenole Beauchesne
8ffe11a9df libs: add gst_vaapi_video_format_from_va_fourcc() helper.
Add gst_vaapi_video_format_from_va_fourcc() helper that converts from a
VA fourcc value to a suitable GstVideoFormat.
2013-08-23 19:00:38 +02:00
Gwenole Beauchesne
53fc8bb4c7 libs: add type definitions for GstVaapiPoint and GstVaapiRectangle.
Add helper functions to describe GstVaapiPoint and GstVaapiRectangle
structures as a standard GType. This could be useful to have them
described as a GValue later on.
2013-08-23 19:00:38 +02:00
Gwenole Beauchesne
d8ffc2c150 libs: drop some public APIs.
Don't expose GstVaapiContext APIs and make them totally private to
libgstvaapi core library. That API would also tend to disappear in
a future revision. Likewise, don't expose GstVaapiDisplayCache API
but keep symbols visible so that the various render backends could
share a common display cache implementation in libgstvaapi.

Try to clean-up the documentation from any stale entry too.
2013-08-23 19:00:38 +02:00
Gwenole Beauchesne
2b0a4a0304 image: clean image API up.
Don't expose functions that reference a GstVaapiImageRaw, those are
meant to be internal only for implementing subpictures sync. Also add
a few private definitions to avoid functions calls for retrieving
image size and format information.
2013-07-26 13:16:52 +02:00
Gwenole Beauchesne
e183ea1290 image: add gst_vaapi_image_copy() helper.
Add gst_vaapi_image_copy() helper function to copy images of same format
and size.
2013-07-26 13:16:52 +02:00
Gwenole Beauchesne
0af0849a92 x11: implement pixmap rendering with RENDER extension.
Use hardware accelerated XRenderComposite() function, from the RENDER
extension, to blit a pixmap to screen. Besides, this can also support
cropping and scaling.
2013-07-22 15:45:10 +02:00
Gwenole Beauchesne
373329e6ff x11: implement pixmap API.
Implement the new render-to-pixmap API. The only supported pixmap format
that will work is xRGB, with native byte ordering. Others might work but
they were not tested.
2013-07-22 15:45:10 +02:00
Gwenole Beauchesne
5eb2cbb5ef x11: update x11_get_geometry() helper function with depth output.
Allow x11_get_geometry() utility function to also return the depth
assigned to the X drawable.
2013-07-22 15:45:10 +02:00
Gwenole Beauchesne
5cabf4e305 Add initial Pixmap API.
Add API to transfer VA urfaces to native pixmaps. Also add an API to
render a native pixmap, for completeness. In general, rendering to
pixmap would only be useful to certain VA drivers and use cases on
X11 display servers. e.g. GLX_EXT_texture_from_pixmap (TFP) handled
in an upper layer.
2013-07-22 15:43:28 +02:00
Gwenole Beauchesne
4a8a80061f libs: add and expose gst_vaapi_video_format_to_string() helper.
This is just a wrapper over gst_video_format_to_string() for older
GStreamer 0.10 builds.
2013-07-22 15:22:34 +02:00
Gwenole Beauchesne
f4097931a1 mpeg2: don't output dummy pictures.
Mark dummy pictures as output already so that we don't try to submit
them to the upper layer since this is purely internal / temporary
picture for helping the decoder.
2013-07-15 17:51:51 +02:00
Gwenole Beauchesne
b358651fb3 decoder: dispose GstVideoCodecFrame earlier.
Once the picture was output, it is no longer necessary to keep an extra
reference to the underlying GstVideoCodecFrame. So, we can release it
earlier, and maybe subsequently release the associate surface proxy
earlier.
2013-07-15 17:43:34 +02:00
Gwenole Beauchesne
7fa4973f8a Fix new video format API.
Fix new internal video format API, based on GstVideoFormat, to not
clobber with system symbols. So replace the gst_video_format_* prefix
with gst_vaapi_video_format_ prefix, even if the format type remains
GstVideoFormat.
2013-07-15 14:42:33 +02:00
Gwenole Beauchesne
1fff3a44dd decoder: fix memory leak when processing interlaced pictures.
Fix memory leak when processing interlaced pictures and that occurs
because the first field, represented as a GstVideoCodecFrame, never
gets released. i.e. when the picture is completed, this is generally
the case when the second field is successfully decoded, we need to
propagate the GstVideoCodecFrame of the first field to the original
GstVideoDecoder so that it could reclaim memory.

Otherwise, we keep accumulating the first fields into GstVideoDecoder
private frames list until the end-of-stream is reached. The frames
are eventually released there, but too late, i.e. too much memory
may have been consumed.

https://bugzilla.gnome.org/show_bug.cgi?id=701257
2013-07-15 14:01:06 +02:00
Gwenole Beauchesne
ac75755105 pool: fix deallocation of video pools.
The queue of free objects to used was deallocated with g_queue_free_full().
However, this convenience function shall only be used if the original queue
was allocated with g_queue_new(). This caused memory corruption, eventually
leading to a crash.

The correct solution is to pair the g_queue_init() with the corresponding
g_queue_clear(), while iterating over all free objects to deallocate them.
2013-07-12 15:01:01 +02:00
Wind Yuan
89321cd3c4 image: add support for raw YUY2/UYVY image copies.
Implement raw image copies for YUY2 format. Add support for UYVY format
too, with the same copy function as for YUY2. Even though components
ordering differs, copying line strides is essentially the same.

https://bugzilla.gnome.org/show_bug.cgi?id=703939
https://bugzilla.gnome.org/show_bug.cgi?id=703940

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-07-11 19:09:53 +02:00
Gwenole Beauchesne
1c9ebecb77 surface: fix surface pool creation with an explicit pixel format.
Fix creation of surface pool objects to honour explicit pixel format
specification. If this operation is not supported, then fallback to
the older interface with chroma format.
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
8663ad9492 surface: try to determine the underlying VA surface format.
If a VA surface was allocated with the chroma-format interface, try to
determine the underlying pixel format on gst_vaapi_surface_get_format(),
or return GST_VIDEO_FORMAT_ENCODED if this is not a supported operation.
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
a1b27c920b surface: allow creation with explicit pixel format.
Make it possible to create VA surfaces with a specific pixel format.
This is a new capability brought in by VA-API >= 0.34.0. If that
capability is not built-in (e.g. using VA-API < 0.34.0), then
gst_vaapi_surface_new_with_format() will return NULL.
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
e3da054e48 surface: add helper function to get chroma type from GstVideoFormat.
Add gst_video_format_get_chroma_type() helper function to determine
the GstVaapiChromaType from a standard GStreamer video format. It is
possible to reconstruct that from GstVideoFormatInfo but it is much
simpler (and faster?) to use the local GstVideoFormatMap table.
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
d633e0d072 surface: add new chroma formats.
Add new chroma formats available with VA-API >= 0.34.0. In particular,
this includes "RGB" chroma formats, and more YUV subsampled formats.
Also add a new from_GstVaapiChromaType() helper function to convert
libgstvaapi chroma type to VA chroma format.
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
60b003709f pool: fix image pool to check for the video format to use.
Make gst_vaapi_image_pool_new() succeed, and thus returning a valid
image pool object, only if the underlying VA display does support the
requested VA image format.
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
4ca7922f4b Use GstVideoInfo for video pools.
Get rid of GstCaps to create surface/image pool, and use GstVideoInfo
structures instead. Those are smaller, and allows for streamlining
libgstvaapi more.
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
97c0316fe4 Add more video formats.
Add new video format mappings to VA image formats:
- YUV: packed YUV (YUY2, UYVY), grayscale (Y800) ;
- RGB: 32-bit RGB without alpha channel (XRGB, XBGR, RGBX, BGRX).
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
d469b7274c image: fix debug message with video format.
Fix debug message string with image format expressed with GstVideoFormat
instead of the obsolete format that turned out to be a fourcc.

This is a regression from git commit e61c5fc.
2013-07-10 17:03:47 +02:00
Gwenole Beauchesne
40ac87b45e libs: use GstVideoInfo wherever possible.
In particular, use gst_video_info_from_caps() helper function in VA image
for implementating gst_vaapi_image_get_buffer() [vaapidownload] and
gst_vaapi_image_update_from_buffer() [subpictures] in GStreamer 0.10 builds.
2013-07-09 17:16:35 +02:00
Gwenole Beauchesne
cb808f91aa libs: drop GstVaapiImageFormat helpers.
Drop GstVaapiImageFormat helpers since everything was moved to the new
GstVideoFormat based API. Don't bother with backwards compatibility and
just bump the library major version afterwards.
2013-07-09 17:16:35 +02:00
Gwenole Beauchesne
e61c5fc3d1 libs: port to new video format API. 2013-07-09 17:16:35 +02:00
Gwenole Beauchesne
430598cf00 Add new video format API.
Leverage GstVideoFormat utilities from core GStreamer to provide an
adaptation layer to VA image formats.
2013-07-09 17:16:35 +02:00
Sreerenj Balachandran
0b1faa62d0 mpeg2: add support for video cropping.
If the stream has a sequence_display_extenion, then attach the
display_horizontal/display_vertical dimension as the cropping
rectangle width/height to the GstVaapiPicture.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-07-08 18:54:15 +02:00
Sreerenj Balachandran
f9ae0c0de4 vc1: add support for video cropping.
If the Advanced profile has display_extension fields, then set the display
width/height dimension as cropping rectangle to the GstVaapiPicture.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-07-08 18:54:15 +02:00
Sreerenj Balachandran
976d27841a h264: add support for video cropping.
If the encoded stream has the frame_cropping_flag set, then associate
the cropping rectangle to GstVaapiPicture.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-07-08 18:54:15 +02:00
Gwenole Beauchesne
eb00f6d101 surfaceproxy: allow for NULL cropping rectangle.
Make it possible associate an empty cropping rectangle to the surface
proxy, thus resetting any cropping rectangle that was previously set.
This allows for returning plain NULL when no cropping rectangle was
initially set up to the surface proxy, or if it was reset to defaults.
2013-07-08 18:52:56 +02:00
Gwenole Beauchesne
ad7202bb77 surfaceproxy: clean-up helper macros.
Always use the GST_VAAPI_SURFACE_PROXY() helper macro to cast from a
proxy macro argument to a GstVaapiSurfaceProxy pointer.
2013-07-08 18:52:56 +02:00
Gwenole Beauchesne
99dfd44f33 surface: add simple surface info accessors as helper macros.
Add helper macros to retrieve the VA surface information like size
(width, height) or chroma type. This is a micro-optimization to avoid
useless function calls and NULL pointer re-checks in internal routines.
2013-07-08 18:52:56 +02:00
Sreerenj Balachandran
e66e72e7e3 decoder: add support for video cropping.
Add gst_vaapi_picture_set_crop_rect() helper function to copy the video
cropping information from raw bitstreams to each picture being decoded.
Also add helper function to surface proxy to propagate that information
outside of libgstvaapi. e.g. plug-in elements or standalone applications.

Signed-off-by: Sreerenj Balachandran <sreerenj.balachandran@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-07-08 18:52:56 +02:00
Zhong Cong
c2ddf464e5 mpeg2: reset quantization matrices on new sequence headers.
The MPEG-2 standard specifies (6.3.7) that all quantisation matrices
shall be reset to their default values when a Sequence_Header() is
decoded.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-07-05 17:57:57 +02:00
Gwenole Beauchesne
800b66f071 mpeg2: cope with latest codecparser changes.
Fix build with newer MPEG-2 codecparser where GstMpegVideoPacket are
used in individual header parsers. Also use the new slice parsing API.
2013-07-05 17:57:47 +02:00
Wind Yuan
b3525c824a image: fix wrong check for rect bounds in copy_image(). 2013-06-14 13:50:47 +02:00
Gwenole Beauchesne
4559f691a1 configure: always build the MPEG-4 parser.
Always build the MPEG-4 parser for now as there are also core fixes
included in the parser that cannot be tested for with API checks.
2013-06-14 11:45:11 +02:00
Gwenole Beauchesne
7793250607 wayland: fix memory leak of display resources. 2013-06-05 11:09:37 +02:00
Gwenole Beauchesne
18031dc6ff surface: fix memory leak through unreleased parent context.
Break the circular references between GstVaapiContext and its children
GstVaapiSurfaces. Since the VA surfaces held an extra reference to the
context, which holds a reference to its VA surfaces, then none of those
were released.

How does this impact support for subpictures?

The only situation when the parent context needs to disappear is when
it is replaced with another one because of a resolution change in the
video stream for instance, or a normal destroy. In this case, it does
not really matter to apply subpictures to the peer surfaces since they
are either gone, or those that are left in the pipe can probably bear
a reinstantiation of the subpictures for it.

So, parent_context is set to NULL when the parent context is destroyed,
other VA surfaces can still get subpictures attached to them, individually
not as a whole. i.e. subpictures for surface S1 will be created from
active composition buffers and associated to S1, subpictures for S2 will
be created from the next active composition buffers, etc. We don't try
to cache the subpictures in those cases (pending surfaces until EOS
is reached, or pending surfaces until new surfaces matching new VA context
get to be used instead).
2013-05-30 19:32:58 +02:00
Gwenole Beauchesne
382542c747 window: fix GLX window initialization.
Make sure to create the GLX context once the window object has completed
its creation. Since gl_resize() relies on the newly created window size,
then we cannot simply overload the GstVaapiWindowClass::create() hook.
So, we just call into gst_vaapi_window_glx_ensure_context() once the
window object is created in the gst_vaapi_window_glx_new*() functions.
2013-05-27 17:21:10 +02:00
Gwenole Beauchesne
b1e5dfab96 display: validate display types. 2013-05-27 17:20:35 +02:00
Gwenole Beauchesne
b40cd3b382 display: drop internal NAME_PREFIX, store the real display name.
Always store a valid display name/device path, instead of adding a
particular prefix. i.e. make it simply a strdup(), or "" if it was
initially NULL.
2013-05-27 16:21:08 +02:00
Gwenole Beauchesne
71ab07d9c6 display: make it possible to lookup the display cache by type.
Make it possible to add extra an extra filter to most of display cache
lookup functions so that the GstVaapiDisplay instance can really match
a compatible and existing display by type, instead of relying on extra
string tags (e.g. "X11:" prefix, etc.).
2013-05-27 16:07:15 +02:00
Gwenole Beauchesne
c957823e8a display: cope with new display cache API. 2013-05-27 16:07:15 +02:00
Gwenole Beauchesne
b59445b2ab display: rework display cache API.
Simplify display cache API, while making it more flexible. We can now create
custom lookup functions with gst_vaapi_display_cache_lookup_custom().
2013-05-27 16:07:15 +02:00
Gwenole Beauchesne
809c7e097b libs: add query for GstVaapiVideoPool object types.
Add API to identify the underlying GstVaapiVideoPool object type.
2013-05-23 19:01:34 +02:00
Gwenole Beauchesne
67eea92044 libs: drop GST_VAAPI_IS_xxx() helper macros.
Drop obsolete GST_VAAPI_IS_xxx() helper macros since we are no longer
deriving from GObject and so those were only checking for whether the
argument was NULL or not. This is now irrelevant, and even confusing
to some extent, because we no longer have type checking.

Note: this incurs more type checking (review) but the libgstvaapi is
rather small, so this is manageable.
2013-05-23 18:15:48 +02:00
Gwenole Beauchesne
98bee4240f display: fix set_synchronous() to lock display. 2013-05-07 18:19:03 +02:00
Gwenole Beauchesne
4cf1213b04 videopool: simplify creation of video objects pool. 2013-05-07 18:19:03 +02:00
Gwenole Beauchesne
c2abeb1290 libs: simplify GstVaapiID definitions.
Make GstVaapiID a gsize instead of guessing an underlying integer large
enough to hold all bits of a pointer. Also drop GST_VAAPI_ID_NONE since
this is plain zero and that it is no longer passed as varargs.
2013-05-07 18:19:03 +02:00
Gwenole Beauchesne
4ffdc98ab4 libs: drop obsolete function helpers and objects.
Drop obsolete GstVaapiID related function helpers for passing them as
GValues.
2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
915cef5e01 libs: use GstVaapiMiniObject for display objects. 2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
3cc7b26961 libs: use GstVaapiMiniObject for video decoders.
Port GstVaapiDecoder and GstVaapiDecoder{MPEG2,MPEG4,JPEG,H264,VC1} to
GstVaapiMiniObject. Add gst_vaapi_decoder_set_codec_state_changed_func()
helper function to let the user add a callback to a function triggered
whenever the codec state (e.g. caps) changes.
2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
2e6ff64a34 libs: use GstVaapiMiniObject for video object pools.
Port GstVaapiVideoPool, GstVaapiSurfacePool and GstVaapiImagePool to
GstVaapiMiniObject. Drop gst_vaapi_video_pool_get_caps() since it was
no longer used for a long time. Make object allocators static, i.e.
local to the shared library.
2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
98c7068937 libs: use GstVaapiObject for texture objects. 2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
8402b04ac9 libs: use GstVaapiObject for window objects. 2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
6c46179709 libs: use GstVaapiObject for VA objects. 2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
1f15c28a1b Port GstVaapiObject to GstVaapiMiniObject. 2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
6439169db5 libs: refine GstVaapiMiniObject.
Drop support for user-defined data since this capability was not used
so far and GstVaapiMiniObject represents the smallest reference counted
object type. Add missing GST_VAAPI_MINI_OBJECT_CLASS() helper macro.

Besides, since GstVaapiMiniObject is a libgstvaapi internal object, it
is also possible to further simplify the layout of the object. i.e. merge
GstVaapiMiniObjectBase into GstVaapiMiniObject.
2013-05-07 17:51:27 +02:00
Gwenole Beauchesne
da2493f731 decoder: update picture size from the bitstream.
Propagate the picture size from the bitstream to the GstVaapiDecoder,
and subsequent user who installed a signal on notify::caps. This fixes
decoding of TS streams when the demuxer failed to extract the required
information.
2013-05-07 16:43:51 +02:00
Gwenole Beauchesne
5ea1a675ab decoder: fix raw decoding mode.
Fix gst_vaapi_decoder_get_surface() to actually transfer ownership of the
surface proxy to the caller.
2013-04-25 14:20:55 +02:00
Gwenole Beauchesne
c43a2d497a decoder: add gst_vaapi_decoder_get_frame_with_timeout().
Add gst_vaapi_decoder_get_frame_with_timeout() helper function that will
wait for a frame to be decoded, until the specified timeout in microseconds,
prior to returning to the caller.

This is a fix to performance regression from 851cc0, whereby the vaapidecode
loop executed on the srcpad task was called to often, thus starving all CPU
resources.
2013-04-25 14:18:00 +02:00
Gwenole Beauchesne
851cc000c2 vaapidecode: rework GstVideoDecoder::handle_frame() with a task.
Rework GstVideoDecoder::handle_frame() to decode the current frame,
while possibly waiting for a free surface, and separately submit all
decoded frames from a task. This makes it possible to pop and render
decoded frames as soon as possible.
2013-04-18 18:46:01 +02:00
Gwenole Beauchesne
945516c9c7 vaapipostproc: port to GStreamer 1.0.
Add support for interlaced streams with GStreamer 1.0 too. Basically,
this enables vaapipostproc, though it is not auto-plugged yet. We also
make sure to reply to CAPS queries, and happily handle CAPS events.
2013-04-17 10:18:45 +02:00
Gwenole Beauchesne
2909d0229d decoder: fix GstVideoCodecFrame flags for interlaced contents.
Fix support for interlaced contents with GStreamer 0.10. In particular,
propagate GstVaapiSurfaceProxy frame flags to GstVideoCodecFrame flags
correctly.

This is a regression from commit 87e5717.
2013-04-17 10:14:55 +02:00
Gwenole Beauchesne
a24e216466 decoder: rename GstVaapiDecoderFrame to GstVaapiParserFrame.
Rename GstVaapiDecoderFrame to GstVaapiParserFrame because this data
structure was only useful to parsing and a proper GstvaapiDecoderFrame
instance will be created instead.
2013-04-16 19:11:02 +02:00
Gwenole Beauchesne
2ac474b207 decoder: export presentation timestamp for raw decoding mode.
Fix regression from 0.4-branch whereby GstVaapiSurfaceProxy no longer
held any information about the expected presentation timestamp, frame
duration or additional flags like interlaced or top-field-first.
2013-04-16 19:11:02 +02:00
Gwenole Beauchesne
87e5717f66 decoder: use new GstVaapiSurfaceProxy utility functions.
Use new GstVaapiSurfaceProxy internal helper functions to propagate the
necessary GstVideoCodecFrame flags to vaapidecode (GStreamer 0.10).

Also make GstVaapiDecoder push_frame() operate similarly to drop_frame().
i.e. increase the GstVideoCodecFrame reference count in push_frame rather
than gst_vaapi_picture_output().
2013-04-16 19:07:24 +02:00
Gwenole Beauchesne
c7dff071c7 surfaceproxy: add more attributes for raw decoding modes.
Add more attributes for raw decoding modes, i.e. directly through the
libgstvaapi helper library. In particular, add presentation timestamp,
duration and a couple of flags (interlaced, TFF, RFF, one-field).
2013-04-16 19:07:24 +02:00
Gwenole Beauchesne
0bd929dfa2 surfaceproxy: drop user-data support from GstVaapiSurfaceProxy.
Drop user-data support from GstVaapiSurfaceProxy. Rather make it explicit
to call some user-provided function when the surface proxy is released.
2013-04-16 18:54:37 +02:00
Víctor Manuel Jáquez Leal
2db47c0ade build: link libgstvaapi-glx-1.0.so against libdl.
Ensure libgstvaapi-glx*.so builds against libdl since dlsym() is used
to resolve glXGetProcAddress() from GLX libraries. This fix builds on
Fedora 17.

https://bugzilla.gnome.org/show_bug.cgi?id=698046

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-04-15 15:04:29 +02:00
Gwenole Beauchesne
8cce65c6f1 decoder: fix gst_vaapi_decoder_get_codec_state().
Fix previous commit whereby gst_vaapi_decoder_get_codec_state() was
supposed to make GstVaapiDecoder own the return GstVideoCodecState
object. Only comment was updated, not the actual code.
2013-04-15 14:22:57 +02:00
Gwenole Beauchesne
1790823ed4 decoder: make gst_vaapi_decoder_get_codec_state() return the original state.
Make gst_vaapi_decoder_get_codec_state() return the original codec state,
i.e. make the GstVaapiDecoder object own the return state so that callers
that want an extra reference to it would just gst_video_codec_state_ref()
it before usage. This aligns the behaviour with what we had before with
gst_vaapi_decoder_get_caps().

This is an ABI incompatible change, library major version was bumped from
previous release (0.5.2).
2013-04-15 13:58:58 +02:00
Gwenole Beauchesne
9b981dd244 plugins: fix description for gst-inspect.
Fix the name of the plug-in element reported to gst-inspect-1.0. i.e. we
need an explicit definition for GStreamer >= 1.0 because the GST_PLUGIN_DEFINE
incorrectly uses #name for creating the plug-in name, instead of using macro
expansion (and let further expansion of macros) through e.g. G_STRINGIFY().
2013-04-12 13:44:52 +02:00
Gwenole Beauchesne
aedef381b2 Fix make dist to include all source files, in any case.
Fix make dist to allow build for either GStreamer 0.10 or 1.0. i.e. make
sure to include all source files in either case while generating source
tarballs.
2013-04-10 15:43:28 +02:00
Gwenole Beauchesne
788d337505 decoder: fix unpaired GstBuffer map/unmaps.
This possibly fixes a few memory leaks along the way.
2013-04-10 14:58:17 +02:00
Gwenole Beauchesne
1b500dee54 Allow build against either GStreamer API (0.10 or 1.0).
Introduce a new configure option --with-gstreamer-api that determines
the desired GStreamer API to use. By default, GStreamer 1.0 is selected.
Also integrate more compatibility glue into gstcompat.h and plugins.
2013-04-10 14:58:17 +02:00
Gwenole Beauchesne
13ca9f382c tests: add support for GStreamer 1.0. 2013-04-10 14:58:16 +02:00
Sreerenj Balachandran
51151e7aa1 Add initial support for GStreamer 1.0.
This integrates support for GStreamer API >= 1.0 only in the libgstvaapi
core decoding library. The changes are kept rather minimal here so that
the library retains as little dependency as possible on core GStreamer
functionality.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-04-10 14:58:16 +02:00
Gwenole Beauchesne
e65726de8d decoder: drop obsolete functions.
Drop the following functions that are now obsolete:
- gst_vaapi_context_get_surface()
- gst_vaapi_context_put_surface()
- gst_vaapi_context_find_surface_by_id()
- gst_vaapi_surface_proxy_new()
- gst_vaapi_surface_proxy_get_context()
- gst_vaapi_surface_proxy_set_context()
- gst_vaapi_surface_proxy_set_surface()

This is an API change.
2013-04-03 13:34:59 +02:00
Gwenole Beauchesne
6e82da1e93 decoder: delegate surface size check to VA context reset.
Now that the surface pool is reference counted in the surface proxy wrapper,
we can safely ignore surface size checks in gst_vaapi_decoder_ensure_context().
Besides, this check is already performed in gst_vaapi_context_reset_full().
2013-04-03 13:34:59 +02:00
Gwenole Beauchesne
e22a863084 decoder: simplify acquisition/release of spare surface.
Introduce gst_vaapi_surface_proxy_new_from_pool() to allocate a new surface
proxy from the context surface pool. This change also makes sure to retain
the parent surface pool in the proxy.

Besides, it was also totally useless to attach/detach parent context to
VA surface each time we acquire/release it. Since the whole context owns
all associated VA surfaces, we can mark this as such only once and for all.
2013-04-03 13:34:59 +02:00
Gwenole Beauchesne
140fa66be3 plugins: integrate GstVaapiVideoMeta from libgstvaapi.
Move GstVaapiVideoMeta from core libgstvaapi decoding library to the
actual plugin elements. That's only useful there. Also inline reference
counting code from GstVaapiMiniObject.
2013-03-26 10:33:27 +01:00
Gwenole Beauchesne
4cf44e3ad2 plugins: integrate GstVaapiVideoBuffer from libgstvaapi.
Move GstVaapiVideoBuffer from core libgstvaapi decoding library to the
actual plugin elements. That's only useful there.
2013-03-21 18:16:14 +01:00
Gwenole Beauchesne
17e7e67c1f plugins: integrate GstVaapiVideoConverterGLX from libgstvaapi.
Make sure libgstvaapi core decoding library doesn't include un-needed
dependencies. So, move out GstVaapiVideoConverterGLX to plugins instead.
Besides, even if the vaapisink element is not used, we are bound to have
a correctly populated GstSurfaceBuffer from vaapidecode.

Also clean-up the file along the way.
2013-03-21 18:16:14 +01:00
Gwenole Beauchesne
2000d5d6e1 vc1: fix use of possibly uninitialized variable.
In decode_codec_data(), force initialization of format to zero so that
we can catch up cases where codec-data has neither "format" nor "wmvversion"
fields, thus making it possible to gracefully fail in this case.
2013-03-21 14:38:06 +01:00
Gwenole Beauchesne
2c6e235e4d jpeg: propagate buffer data as a const guchar * pointer (cosmetics). 2013-03-21 14:38:06 +01:00
Gwenole Beauchesne
4009430bec decoder: sanitize codec-data decoding.
Add a new GstVaapiDecoder::decode_codec_data() hook to actually decode
codec-data in the decoder sub-class. Provide a common shared helper
function to do the actual work and delegating further to the sub-class.
2013-03-21 14:38:06 +01:00
Gwenole Beauchesne
ba8a7ab6cd decoder: get rid of GstVaapiDecoderUnit::buffer field.
Drop GstVaapiDecoderUnit buffer field (GstBuffer) since it's totally
useless nowadays as creating sub-buffers doesn't bring any value. It
actually means more memory allocations. We can't do without that in
JPEG and MPEG-4:2 decoders.
2013-03-21 13:44:59 +01:00
Gwenole Beauchesne
57ed7e3f8b decoder: sanitize uses of codec frame input buffer (cosmetics).
Alias GST_VAAPI_DECODER_CODEC_FRAME(decoder)->input_buffer to a simple
"buffer" variable.
2013-03-21 13:28:05 +01:00
Gwenole Beauchesne
2dcc9f19da plugins: use modern GstElement metadata information.
Use gst_element_class_set_static_metadata() from GStreamer 1.0, which
basically is the same as gst_element_class_set_details_simple() in
GStreamer 0.10 context.
2013-03-20 18:43:35 +01:00
Gwenole Beauchesne
e539092f21 tests: modernize GstTypeFind functions.
Use the GstTypeFind hooks from GStreamer 1.0. They look safer and
exactly correspond to the expected behaviour.
2013-03-20 18:35:01 +01:00
Gwenole Beauchesne
0ad846e68d subpicture: use gst_video_overlay_rectangle_get_pixels_unscaled_raw().
Use newer gst_video_overlay_rectangle_get_pixels_unscaled_raw() helper
function with GStreamer 0.10 compatible semantics, or that tries to
approach the current meaning. Basically, this is also just about moving
the helper to gstcompat.h.
2013-03-20 18:30:09 +01:00
Gwenole Beauchesne
c756766805 image: add gst_vaapi_image_format_from_structure() helper.
Add helper function to convert video formats from a GstStructure to a
plain GstVaapiImageFormat.
2013-03-20 18:30:09 +01:00
Gwenole Beauchesne
833ebf9cae sysdeps: split out GStreamer API compatibility glue to "gstcompat.h". 2013-03-20 18:30:09 +01:00
Gwenole Beauchesne
87624fd6c8 sysdeps: add more standard includes by default. 2013-03-20 18:30:09 +01:00
Gwenole Beauchesne
4dd6035dac configure: rename GST_MAJORMINOR to GST_API_VERSION. 2013-03-20 11:44:10 +01:00
Xiang, Haihao
bd3aa01de5 build: fix compiling of local GstVideoDecoder and codecparsers.
Generated source files were missing a dependency on the complete set of
generated header files. e.g. gstvideodecoder.c requires gstvideoutils.h
to build and almost every codec parser source depends on parserutils.h.

https://bugs.freedesktop.org/show_bug.cgi?id=59575

Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-02-25 10:46:08 +01:00
Gwenole Beauchesne
ddaaa42020 h264: set {luma,chroma}_log2_weight_denom to 0 if no pred_weight_table().
Force luma_log2_weight_denom and chroma_log2_weight_denom to zero if
there is no pred_weight_table() that was parsed.

This is a workaround for the VA intel-driver on Ivy Bridge.
2013-02-08 11:56:54 +01:00
Gwenole Beauchesne
0c3650e7e8 h264: use new profile definitions from codecparsers. 2013-02-07 15:42:55 +01:00
Gwenole Beauchesne
56bc1ce98c glibcompat: add replacement for g_async_queue_timeout_pop().
g_async_queue_timeout_pop() appeared in glib 2.31.18. Implement it as
g_async_queue_timed_pop() with a GTimeVal as the final time to wait for
new data to arrive in the queue.
2013-01-31 11:30:35 +01:00
Gwenole Beauchesne
20a81f5a70 glibcompat: add replacement for g_cond_wait(). 2013-01-31 11:25:18 +01:00
Gwenole Beauchesne
06725d651e mpeg2: fix decoding of 4K videos.
Account for slice_vertical_position_extension when vertical_size > 2800.
2013-01-30 19:19:47 +01:00
Gwenole Beauchesne
564ca5d221 mpeg2: fix decoding of sequence_end().
There shall be only one place to call decode_current_picture(), and this
is in the end_frame() hook. The EOS unit is processed after end_frame()
so this means we cannot have a valid picture to decode/output at this
point.
2013-01-30 19:19:47 +01:00
Gwenole Beauchesne
23b2386fd0 mpeg2: improve robustness when packets are missing.
Improve robustness when some expected packets where not received yet
or that were not correctly decoded. For example, don't try to decode
a picture if there was no valid sequence or picture headers.
2013-01-30 19:04:16 +01:00
Gwenole Beauchesne
4499f39274 decoder: handle decode-only frames in raw API mode.
Fix gst_vaapi_decoder_get_surface() to only return frames with a valid
surface proxy, i.e. with a valid VA surface. This means that any frame
marked as decode-only is simply skipped.
2013-01-30 19:04:16 +01:00
Gwenole Beauchesne
2305b0db46 decoder: allow frames to be dropped.
If the decoder was not able to decode a frame because insufficient
information was available, e.g. missing sequence or picture header,
then allow the frame to be gracefully dropped without generating
any error.

It is also possible that a frame is not meant to be displayed but
only used as a reference, so dropping that frame is also a valid
operation since GstVideoDecoder base class has extra references to
that GstVideoCodecFrame that needs to be released.
2013-01-30 16:38:48 +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
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
efd90114bf vc1: handle frames with multiple slices. 2013-01-23 17:02:45 +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
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
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
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
Gwenole Beauchesne
cc347cb41e decoder: make decode_step() return once the frame is decoded.
Make sure we always have a free surface left to use for decoding the
current frame. This means that decode_step() has to return once a frame
gets decoded. If the current adapter contains more buffers with valid
frames, they will get parsed and decoded on subsequent iterations.
2013-01-17 18:39:22 +01:00
Gwenole Beauchesne
059e032103 docs: expose new interfaces. 2013-01-14 12:58:41 +01:00
Gwenole Beauchesne
9372f14f94 dpb: cosmetics (clean-ups). 2013-01-14 10:58:49 +01:00
Gwenole Beauchesne
e44d8ee6e3 dpb: port to GstVaapiMiniObject. 2013-01-14 10:46:50 +01:00
Gwenole Beauchesne
6f4e01258d dpb: drop GstVaapiDpb2 interface, keep only one class.
Keep only one DPB interface and rename gst_vaapi_dpb2_get_references()
to gst_vaapi_dpb_get_neighbours() so that to retrieve pictures in DPB
around the specified picture POC.
2013-01-14 10:21:53 +01:00
Sreerenj Balachandran
eafdd771ae dpb: rename GstVaapiDpbMpeg2 to GstVaapiDpb2.
Move GstVaapiDpbMpeg2 API to a more generic version that could also be
useful to other decoders that require 2 reference pictures, e.g. VC-1.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-14 10:11:21 +01:00
Holger Kaelberer
082a56599b overlay: fix build without advanced GstVideoOverlayFormatFlags.
Check for global-alpha support in GstVideoOverlayComposition API.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-11 15:47:46 +01:00
Gwenole Beauchesne
7e1a8eabfe overlay: fix ordering of composition layers.
Make sure to maintain the association order of composition layers when
GstVideoOverlayRectangle objects are kept around (cached).
2013-01-11 15:32:17 +01:00
Holger Kaelberer
2ecb955626 overlay: fix support for global-alpha.
Fix support for global-alpha subpictures. The previous changes brought
the ability to check for GstVideoOverlayRectangle changes by comparing
the underlying pixel buffer pointers. If sequence number and pixel data
did not change, then this is an indication that only the global-alpha
value changed. Now, try to update the underlying VA subpicture global-alpha
value.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-11 15:29:12 +01:00
Gwenole Beauchesne
e6390d6e5f overlay: detect render-rect changes.
Don't re-upload VA subpicture if only the render rectangle changed.
Rather deassociate the subpicture and re-associate it with the new
render rectangle.
2013-01-11 15:29:12 +01:00
Gwenole Beauchesne
e876d9a581 overlay: fix check for pixels buffer change.
A GstVideoOverlayRectangle is created whenever the underlying pixels data
change. However, when global-alpha is supported, it is possible to re-use
the same GstVideoOverlayRectangle but with a change to the global-alpha
value. This process causes a change of sequence number, so we can no longer
check for that.

Still, if sequence numbers did not change, then there was no change in
global-alpha either. So, we need a way to compare the underlying GstBuffer
pointers. There is no API to retrieve the original pixels buffer from
a GstVideoOverlayRectangle. So, we use the following heuristics:

1. Use gst_video_overlay_rectangle_get_pixels_unscaled_argb() with the same
   format flags from which the GstVideoOverlayRectangle was created. This
   will work if there was no prior consumer of the GstVideoOverlayRectangle
   with alternate (non-"native") format flags.

2. In overlay_rectangle_has_changed_pixels(), we have to use the same
   gst_video_overlay_rectangle_get_pixels_unscaled_argb() function but
   with flags that match the subpicture. This is needed to cope with
   platforms that don't support global-alpha in HW, so the gst-video
   layer takes care of that and fixes this up with a possibly new
   GstBuffer, and hence pixels data (or) in-place by caching the current
   global-alpha value applied. So we have to determine the rectangle
   was previously used, based on what previous flags were used to
   retrieve the ARGB pixels buffer.
2013-01-11 15:29:12 +01:00
Gwenole Beauchesne
a14d259060 overlay: optimize cache at the GstVideoOverlayRectangle level.
We previously assumed that an overlay composition changed if the number
of overlay rectangles in there actually changed, or that the rectangle
was updated, and thus its seqnum was also updated.

Now, we can cope with cases where the GstVideoOverlayComposition grew
by one or a few more overlay rectangles, and the initial overlay rectangles
are kept as is.
2013-01-11 15:29:11 +01:00
Gwenole Beauchesne
ad6cdc0b52 overlay: simplify caching of GstVideoOverlayComposition objects.
Create the GPtrArray once in the _init() function and destroy it only
in the _finalize() function. Then use overlay_clear() to remove all
subpicture associations for intermediate updates, don't recreate the
GPtrArray.

Make GstVaapiOverlayRectangle a reference counted object. Also make
sure that overlay_rectangle_new() actually creates and associates the
VA subpicture.
2013-01-11 15:28:25 +01:00
Holger Kaelberer
2d2334afed overlay: add support for global-alpha.
Handle global-alpha from GstVideoOverlayComposition API. Likewise,
the same code path could also work for premultiplied-alpha but this
was not tested.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-11 14:23:08 +01:00
Holger Kaelberer
1cd4a8fc04 subpicture: add support for global-alpha.
Add the necessary helpers in GstVaapiDisplay to determine whether subpictures
with global alpha are supported or not. Also add accessors in GstVaapiSubpicture
to address this feature.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-11 14:23:06 +01:00
Gwenole Beauchesne
1307a5b4ef subpicture: add premultiplied-alpha and global-alpha feature flags.
Add premultiplied-alpha and global-alpha feature flags, along with converters
between VA-API and gstreamer-vaapi definitions. Another round of helpers is
also necessary for GstVideoOverlayComposition API.
2013-01-11 14:17:30 +01:00
Gwenole Beauchesne
fc1f9a64e4 display: allow image/subpicture formats with additional flags.
Introduce new GstVaapiFormatInfo to store the actual GstVaapiImageFormat
and any additional flags needed. Currently, all flags are set to zero.
2013-01-11 14:17:30 +01:00
Gwenole Beauchesne
d4a8e39656 libs: fix build of submodule wrappers.
Make sure to build codecparsers/ and videoutils/ sources against the
newly generated headers when out-of-source builds are used.
2013-01-11 14:16:16 +01:00
Gwenole Beauchesne
591b637cfc decoder: fix mini object implementation on 64-bit systems.
Use GPOINTER_TO_SIZE() instead of GPOINTER_TO_UINT() while manipulating
pointers. The latter is meant to be 32-bit only, not uintptr_t like size.
Only a gsize can hold all bits of a pointer.

Thanks to Ouping Zhang for spotting this error.
2013-01-10 10:14:42 +01:00
Gwenole Beauchesne
0ecb3a627b mpeg2: optimize scan for the end of the frame.
Heuristic: if the second start-code is available, check whether that
one marks the start of a new frame because e.g. this is a sequence
or picture header. This doesn't save much, since we already cache the
results.
2013-01-09 16:05:39 +01:00
Gwenole Beauchesne
3bc6078f32 mpeg2: optimize scan for start codes.
Accelerate scan for start codes by skipping up to 3 bytes per iteration.
A start code prefix is defined by the following bytes: 00 00 01. Thus,
for any group of 3 bytes (xx yy zz), we have the following possible cases:

  1. If zz != 1, this cannot be a start code, then skip 3 bytes;
  2. If yy != 0, this cannot be a start code, then skip 2 bytes;
  3. If xx != 0 or zz != 1, this cannot be a start code, then skip 1 byte;
  4. xx == 00, yy == 00, zz == 1, we have match!

This algorithm requires to peek bytes from the adapter. This increases the
amount of bytes copied to a temporary buffer, but this process is much faster
than scanning for all the bytes and using shift/masks. So, overall, this is
a win.
2013-01-09 16:05:18 +01:00
Gwenole Beauchesne
0180ef635c mpeg2: drop useless gst_adapter_peek().
Drop useless gst_adapter_peek() since the returned buffer was not used
and this could incur superfluous memcpy().
2013-01-08 16:41:44 +01:00
Gwenole Beauchesne
4a69e395cd mpeg2: cosmetics: move parse_slice() down. 2013-01-07 16:12:42 +01:00
Gwenole Beauchesne
6dd8eab023 mpeg2: avoid too many allocations of parser info objects.
Move parsing back to decoding step, but keep functions separate for now.
This is needed for future optimizations that may introduce some meta data
for parsed info attached to codec frames.
2013-01-07 16:12:42 +01:00
Gwenole Beauchesne
8c403c2d98 decoder: decoder units are no longer dynamically allocated objects. 2013-01-07 14:11:39 +01:00
Gwenole Beauchesne
a486d1af66 decoder: optimize pre-allocation of decoder units.
Optimize pre-allocation of decoder units, thus avoiding un-necessary
memory reallocations. The heuristic used is that we could have around
one slice unit per macroblock line.
2013-01-07 14:11:39 +01:00
Gwenole Beauchesne
4fd99cc989 decoder: use an array of units instead of a single-linked list.
Use a GArray to hold decoder units in a frame, instead of a single-linked
list. This makes 'append' calls faster, but not that much. At least, this
makes things clearer.
2013-01-07 14:10:13 +01:00
Gwenole Beauchesne
2c449e42ca decoder: refactor decoder unit API.
Allocate decoder unit earlier in the main parse() function and don't
delegate this task to derived classes. The ultimate purpose is to get
rid of dynamic allocation of decoder units.
2013-01-07 14:10:13 +01:00
Gwenole Beauchesne
78e9a78de8 mpeg2: introduce parser info instead of MPEG-2 specific decoder unit.
Use a new GstVaapiParserInfoMpeg2 data structure instead of deriving
from GstVaapiDecoderUnit for MPEG-2 specific parser information.
2013-01-07 14:10:09 +01:00
Gwenole Beauchesne
8d2b7241fc h264: introduce parser info instead of H.264 specific decoder unit.
Use a new GstVaapiParserInfoH264 data structure instead of deriving
from GstVaapiDecoderUnit for H.264 specific parser information.
2013-01-07 10:48:57 +01:00
Sreerenj Balachandran
0963afce0b h264: set default values for some header fields.
The SPS, PPS and slice headers are not fully zero-initialized in the
codecparsers/ library. Rather, the standard upstream behaviour is to
initialize only certain syntax elements with some inferred values if
they are not present in the bitstream.

At the gstreamer-vaapi decoder level, we need to further initialize
certain syntax elements with some sensible default values so that to
not complicate VA drivers that just pass those verbatim to the HW,
and also avoid an memset() of the whole decoder unit.

Signed-off-by: Sreerenj Balachandran <sreerenj.balachandran@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2013-01-06 19:20:15 +01:00
Gwenole Beauchesne
d6bbc652b4 videobuffer: wrap video meta into a surface buffer.
Make GstVaapiVideoBuffer a simple wrapper for video meta. This buffer is
no longer necessary but for compatibility with GStreamer 0.10 APIs or users
expecting a GstSurfaceBuffer like Clutter.
2013-01-05 18:02:31 +01:00
Gwenole Beauchesne
b1636c3585 videobuffer: add video meta information.
Add new GstVaapiVideoMeta object that holds all information needed to
convey gst-vaapi specific data as a GstBuffer.
2013-01-05 18:02:31 +01:00
Gwenole Beauchesne
492cafdbc1 decoder: always use the calculated presentation timestamp.
Use PTS value computed by the decoder, which could also be derived from
the GstVideoCodecFrame PTS. This makes it possible to fix up the PTS if
the original one was miscomputed or only represented a DTS instead.
2013-01-03 13:05:47 +01:00
Gwenole Beauchesne
3f60f136cc h264: don't create sub-buffer for slice data. 2013-01-03 11:23:40 +01:00
Gwenole Beauchesne
9bba1e5fe3 decoder: create new context when encoded resolution changes.
Create a new VA context if the encoded surface size changes because we
need to keep the underlying surface pool until the last one was released.
Otherwise, either of the following cases could have happened: (i) release
a VA surface to an inexistent pool, or (ii) release VA surface to an
existing surface pool, but with different size.
2013-01-03 11:16:44 +01:00
Gwenole Beauchesne
eda01ab027 mpeg2: don't create sub-buffer for slice data.
Avoid creating a GstBuffer for slice data. Rather, directly use the codec
frame input buffer data. This is possible because the codec frame is valid
until end_frame() where we submit the VA buffers for decoding. Anyway, the
slice data buffer is copied into the VA buffer when it is created.
2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
4556b1fd47 mpeg2: minor clean-ups.
Drop explicit initialization of most fields that are implicitly set to
zero. Remove some useless checks for NULL pointers.
2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
7ca43932e5 mpeg2: optimize scan for the second start code.
Optimize scan for the second start code, on the next parse() call so that
to avoid scanning again earlier bytes where we didn't find any start code.
2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
9458bbdc16 mpeg2: use sequence_display_extension() to compute PAR.
Also compute pixel-aspect-ratio from sequence_display_extension(),
should it exist in the bitstream.
2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
65ede48b7b mpeg2: handle sequence_display_extension(). 2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
748a8dbdc6 mpeg2: 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-03 09:08:19 +01:00
Gwenole Beauchesne
4a39efa9f6 mpeg2: parse slice() header earlier.
Parse slice() header and first macroblock position earlier in _parse()
function instead of waiting for the _decode() stage. This doesn't change
anything but readability.
2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
549b5a9389 mpeg2: add codec specific decoder unit.
Introduce new GstVaapiDecoderUnitMpeg2 object, which holds the standard
GstMpegVideoPacket and additional parsed header info. Besides, we now
parse as early as in the _parse() function so that to avoid un-necessary
creation of sub-buffers in _decode() for video packets that are not slices.
2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
63a7e42484 decoder: introduce lists of units to decode before/after frame.
Theory of operations: all units marked as "slice" are moved to the "units"
list. Since this list only contains slice data units, the prev_slice pointer
was removed. Besides, we now maintain two extra lists of units to be decoded
before or after slice data units.

In particular, all units in the "pre_units" list will be decoded before
GstVaapiDecoder::start_frame() is called and units in the "post_units"
list will be decoded after GstVaapiDecoder::end_frame() is called.
2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
c727e5b6d6 decoder: drop useless checks for codec objects.
Codec objects are used internally only and they are bound to be created
with a valid GstVaapiDecoder object.
2013-01-03 09:08:19 +01:00
Gwenole Beauchesne
9e643a6147 Add videoutils submodule for GstVideoDecoder APIs. 2012-12-21 16:01:16 +01:00
Gwenole Beauchesne
f5294b813a Bump library major version.
Increase library major so that to cope with API/ABI incompatible changes
since 0.4.x series and avoid user issues.
2012-12-18 15:31:52 +01:00
Gwenole Beauchesne
9dcf082002 surfaceproxy: minor clean-ups. 2012-12-18 15:31:52 +01:00
Gwenole Beauchesne
51d028a628 surfaceproxy: drop accessors to obsolete attributes.
Make GstVaapiSurfaceProxy only a thin wrapper around a VA context and a
VA surface. i.e. drop any other attribute like timestamp, duration,
interlaced or top-field-first.
2012-12-18 15:31:52 +01:00
Gwenole Beauchesne
8c2d9bcd24 decoder: maintain decoded frames as GstVideoCodecFrame objects.
Maintain decoded surfaces as GstVideoCodecFrame objects instead of
GstVaapiSurfaceProxy objects. The latter will tend to be reduced to
the strict minimum: a context and a surface.
2012-12-18 15:31:52 +01:00
Gwenole Beauchesne
09c9e20379 decoder: add gst_vaapi_decoder_get_frame() API.
Add new gst_vaapi_decoder_get_frame() function meant to be used with
gst_vaapi_decoder_decode(). The purpose is to return the next decoded
frame as a GstVideoCodecFrame and the associated GstVaapiSurfaceProxy
as the user-data object.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
098eb2624e h264: optimize initialization process of decoder units.
Decoder units were zero-initialized, including the SPS/PPS/slice headers.
The latter don't require zero-initialization since the codecparsers/ lib
will do so for key variables already. This is not a great value per se but
at least it makes it possible to check whether the default initialization
decisions made in the codecparsers/ lib were right or not.

This can be reverted if this exposes too many issues.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
0b2e399235 h264: minor clean-ups.
Drop explicit initialization of most fields that are implicitly set to
zero. Drop helper macros for casting to GstVaapiPictureH264 or
GstVaapiFrameStore. Also remove some useless checks for NULL pointers.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
4992e7c60f h264: drop GstVaapiSliceH264 object.
Use standard GstVaapiSlice object from now on since we already have
parsed and recorded the slice headers (GstH264SliceHdr decode units).
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
f8a9e49fd8 h264: detect new pictures from decode-units.
Update is_new_picture() to cope with GstVaapiDecoderUnitH264, instead
of assuming frame boundaries when first_mb_in_slice is zero.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
d9ec93fe46 h264: 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.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
f7f7393148 h264: optimize scan for the second start code.
Optimize scan for the second start code, on the next parse() call so that
to avoid scanning again earlier bytes where we didn't find any start code.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
63c455d28d h264: add codec specific decoder unit.
Introduce new GstVaapiDecoderUnitH264 object, which holds the standard
NAL unit header (GstH264NalUnit) and additional parsed header info.
Besides, we now parse headers as early as in the _parse() function so
that to avoid un-necessary creation of sub-buffers in _decode() for
NAL units that are not slices.

This is a performance win by ~+1.1% only.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
ddc74f8a20 jpeg: initial port to new GstVaapiDecoder API 2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
94982b5c05 vc1: initial port to new GstVaapiDecoder API 2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
7e6660fcae h264: initial port to new GstVaapiDecoder API 2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
8fbd05ca82 mpeg4: initial port to new GstVaapiDecoder API 2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
50090d6138 mpeg2: initial port to new GstVaapiDecoder API. 2012-12-18 15:31:51 +01:00
Sreerenj Balachandran
e7e5c74a6e decoder: use GstVideoCodecState.
Use standard GstVideoCodecState throughout GstVaapiDecoder and expose
it with a new gst_vaapi_decoder_get_codec_state() function. This makes
it possible to drop picture size (width, height) information, framerate
(fps_n, fps_d) information, pixel aspect ratio (par_n, par_d) information,
and interlace mode (is_interlaced field).

This is a new API with backwards compatibility maintained. In particular,
gst_vaapi_decoder_get_caps() is still available.

Signed-off-by: Sreerenj Balachandran <sreerenj.balachandran@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
14a6e0f629 decoder: update gst_vaapi_decoder_get_surface() semantics.
Align gst_vaapi_decoder_get_surface() semantics with the rest of the
API. That is, return a GstVaapiDecoderStatus and the decoded surface
as a handle to GstVaapiSurfaceProxy in parameter.

This is an API/ABI change.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
798e84bd93 decoder: use standard helper functions.
Use g_clear_object(), gst_buffer_replace() and gst_caps_replace()
whenever necessary.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
6bed9ebe0f decoder: expose new parse/decode API.
Introduce new decoding process whereby a GstVideoCodecFrame is created
first. Next, input stream buffers are accumulated into a GstAdapter,
that is then passed to the _parse() function. The GstVaapiDecoder object
accumulates all parsed units and when a complete frame or field is
detected, that GstVideoCodecFrame is passed to the _decode() function.

Ultimately, the caller receives a GstVaapiSurfaceProxy if decoding
process was successful.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
ea9703362c decoder: add {start,end}_frame() hooks.
The start_frame() hook is called prior to traversing all decode-units
for decoding. The unit argument represents the first slice in the frame.
Some codecs (e.g. H.264) need to wait for the first slice in order to
determine the actual VA context parameters.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
66cc8754fc decoder: add new GstVaapiDecoder API.
Split decoding process into two steps: (i) parse incoming bitstreams
into simple decoder-units until the frame or field is complete; and
(ii) decode the whole frame or field at once.

This is an ABI change.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
f5e6444b78 decoder: add new "decoder-frame" object.
Introduce a new GstVaapiDecoderFrame that is just a list of decoder units
(GstVaapiDecoderUnit objects) that constitute a frame. This object is just
an extension to GstVideoCodecFrame for VA decoder purposes. It is available
as the user-data member element.

This is a libgstvaapi internal object.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
49dbb9af50 decoder: add new "decoder-unit" object.
Introduce GstVaapiDecoderUnit which represents a fragment of the source
stream to be decoded. For instance, a decode-unit will be a NAL unit for
H.264 streams, an EBDU for VC-1 streams, and a video packet for MPEG-2
streams.

This is a libgstvaapi internal object.
2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
74533de9c6 Port GstVaapiFrameStore to GstVaapiMiniObject. 2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
f88374d642 Port codec objects to GstVaapiMiniObject. 2012-12-18 15:31:51 +01:00
Gwenole Beauchesne
1130a46837 surfaceproxy: port to GstVaapiMiniObject.
GstVaapiSurfaceProxy does not use any particular functionality from
GObject. Actually, it only needs a basic object type with reference
counting.

This is an API and ABI change.
2012-12-18 15:31:50 +01:00
Gwenole Beauchesne
44945ac9eb Add GstVaapiMiniObject.
Introduce a new reference counted object that is very lightweight and
also provides flags and user-data functionalities. Initialization and
finalization times are reduced by up to a factor 5x vs GstMiniObject
from GStreamer 0.10 stack.

This is a libgstvaapi internal object.
2012-12-18 15:31:50 +01:00
Gwenole Beauchesne
1bd5ab4db3 h264: initialize VA context before allocating the first slice.
Fix decode_slice() to ensure a VA context exists prior to creating a
new GstVaapiSliceH264, which invokes vaCreateBuffer() with some VA
context ID. i.e. the latter was not initialized, thus causing failures
on Cedar Trail for example.
2012-12-17 14:33:52 +01:00
Gwenole Beauchesne
48f4f0564e libs: fix compatibility with glib 2.28.
Always prefer non deprecated APIs by default and provide compatibility
glue for older glib versions when necessary.
2012-12-17 14:33:52 +01:00
Gwenole Beauchesne
97c3b2ddff libs: use glib >= 2.32 semantics for mutexes.
Use glib >= 2.32 semantics for GMutex and GRecMutex wrt. initialization
and termination. Basically, the new mutex objects can be used as static
mutex objects from the deprecated APIs, e.g. GStaticMutex and GStaticRecMutex.
2012-12-17 14:33:45 +01:00
Gwenole Beauchesne
1d669a3e12 libs: only export gst_vaapi_*() symbols.
This fixes symbol clashes between the gst-vaapi built-in codecparsers/
library and the system-provided one, mainly used by videoparses/. Now,
only symbols with the gst_vaapi_* prefix will be exported, if they are
not marked as "hidden" to libgstvaapi.
2012-12-17 14:12:15 +01:00
Gwenole Beauchesne
c38c0853eb image: fix GstVaapiImage map and unmap.
Fix gst_vaapi_image_map() to return TRUE and the GstVaapiImageRaw
structure correctly filled in if the image was already mapped.
Likewise, make gst_vaapi_image_unmap() return TRUE if the image
was already unmapped.
2012-11-20 14:38:19 +01:00
Wind Yuan
5fac9d4b55 videobuffer: fix memory leak for surface and image.
Fix reference leak of surface and image in GstVaapiVideoBuffer wrapper,
thus resulting on actual memory leak of GstVaapiImage when using them
for downloads/uploads from VA surfaces and more specifically surfaces
when the pipeline is shutdown. i.e. vaTerminate() was never called
because the resources were not unreferenced, and thus not deallocated
in the end.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-11-19 11:22:03 +01:00
Gwenole Beauchesne
cb0da4ed7a h264: fix picture size in macroblocks.
The picture size signalled by sps->{width,height} is the actual size with
cropping applied, not the original size derived from pic_width_in_mbs_minus1
and pic_height_in_map_units_minus1. VA driver expects that original size,
uncropped.

There is another issue pending: frame cropping information needs to be
taken care of.
2012-11-16 18:05:28 +01:00
Gwenole Beauchesne
9ab3ce2932 codecparsers: always build parserutils first.
Fix commit 18245b4 so that to link and build parserutils.[ch] first.
This is needed since that's the common dependency for actual codec
parsers (gstvc1parser.c for instance).
2012-11-16 16:18:52 +01:00
Gwenole Beauchesne
18245b484d codecparsers: always build the VC-1 parser library.
... this is useful to make sure pixel-aspect-ratio and framerate
information are correctly parsed since we have no means to detect
that at configure time.
2012-11-15 17:50:45 +01:00
Sreerenj Balachandran
9367c8ea58 mpeg2: fix PAR calculation from commit bd11bae.
Invoke gst_mpeg_video_finalise_mpeg2_sequence_header() to get the
correct PAR values. While doing so, require a newer version of the
bitstream parser library.

Note: it may be necessary to also parse the Sequence_Display_Extension()
header.

Signed-off-by: Sreerenj Balachandran <sreerenj.balachandran@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-11-15 16:23:27 +01:00
Gwenole Beauchesne
ca8b5035de Fix build with the GNU gold linker.
In particular, fix libgstvaapi-glx DSO dependencies to include libgstbase
and libgstvideo libs, e.g. for gst_video_buffer_get_overlay_composition().
2012-11-15 15:02:23 +01:00
Rob Bradford
b794f6cb92 wayland: port to 1.0 version of the protocol.
This patch updates to relect the 1.0 version of the protocol. The main
changes are the switch to wl_registry for global object notifications
and the way that the event queue and file descriptor is processed.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-11-15 14:31:33 +01:00
Gwenole Beauchesne
1e506ad6ee h264: fix incorrect integration of previous commit (4d31e1e).
git am got confused somehow, though the end result doesn't change at
all since we require both SPS and PPS to be parsed prior to decoding
the first slice.
2012-11-14 19:23:32 +01:00
Gwenole Beauchesne
4d31e1e58a h264: start decoding slices after first SPS/PPS activation.
Only start decoding slices when at least one SPS and PPS got activated.
This fixes cases when a source represents a substream of another stream
and no SPS and PPS was inserted before the first slice of the generated
substream.
2012-11-14 18:55:05 +01:00
Gwenole Beauchesne
1fc397affd h264: fix VAPictureParameterBufferH264.ReferenceFrames[] construction.
... for interlaced streams. The short_ref[] and long_ref[] arrays may
contain up to 32 fields but VA ReferenceFrames[] array expects up to
16 reference frames, thus including both fields.
2012-11-14 17:53:57 +01:00
Gwenole Beauchesne
f196605fc8 h264: fix interlaced stream decoding with MMCO.
Fix decoding of interlaced streams when adaptive_ref_pic_marking_mode_flag
is equal to 1, i.e. when memory management control operations are used. In
particular, when field_pic_flag is set to 0, the new reference flags shall
be applied to both fields.
2012-11-14 17:53:57 +01:00
Gwenole Beauchesne
2c13b17cdb h264: add initial support for interlaced streams.
Decoded frames are only output when they are complete, i.e. when both
fields are decoded. This also means that the "interlaced" caps is not
propagated to vaapipostproc or vaapisink elements. Another limitation
is that interlaced bitstreams with MMCO are unlikely to work.
2012-11-14 17:53:55 +01:00
Gwenole Beauchesne
c59d935505 h264: split remove_reference_at() into finer units.
Split remove_reference_at() into a function that actually removes the
specified entry from the short-term or long-term reference picture array,
and a function that sets reference flags to the desired value, possibly
zero. The latters marks the picture as "unused for reference".
2012-11-14 17:39:19 +01:00
Gwenole Beauchesne
e11f815b0d decoder: fix gst_vaapi_picture_new_field() object type.
Fix gst_vaapi_picture_new_field() to preserve the original picture type.
e.g. gst_vaapi_picture_new_field() with a GstVaapiPictureH264 argument
shall generate a GstVaapiPictureH264 object.
2012-11-14 17:39:19 +01:00
Gwenole Beauchesne
e530c57741 h264: add picture structure for reference picture marking process.
Introduce new `structure' field to the H.264 specific picture structure
so that to simplify the reference picture marking process. That local
picture structure is derived from the original picture structure, as
defined by the syntax elements field_pic_flag and bottom_field_flag.
2012-11-14 17:39:19 +01:00
Gwenole Beauchesne
bbbf3741ff h264: introduce new frame store structure.
The frame store represents a Decoded Picture Buffer entry, which can
hold up to two fields. So far, the frame store is only used to hold
full frames.
2012-11-14 17:39:19 +01:00
Gwenole Beauchesne
afddf11e22 h264: minor clean-ups.
Move DPB flush up if the current picture to decode is an IDR. Besides,
don't bother to check for IDR pictures in dpb_add() function since an
explicit DPB flush was already performed in this case.
2012-10-31 16:37:14 +01:00
Gwenole Beauchesne
d180a3a9f6 h264: simplify reference picture marking process.
... to build the short_ref[] and long_ref[] lists from the DPB, instead
of maintaining them separately. This avoids refs/unrefs while making it
possible to generate the list based on the actual picture structure.

This also ensures that the list of generated ReferenceFrames[] actually
matches what reference frames are available in the DPB. i.e. short_ref[]
and long_ref[] entries are implied from the DPB, so there is no risk of
having "dangling" references.
2012-10-31 15:05:54 +01:00
Gwenole Beauchesne
3480fcc8d7 h264: introduce per-field POC in GstVaapiPictureH264.
Use the POC member available in the GstVaapiPicture base class and
get rid of the dependency on the local VAPictureH264 TopFieldOrderCnt
and BottomFieldOrderCnt. Rather, use a simple field_poc[] array
initialized to INT_MAX, so that to simplify picture POC calculation
for non frame pictures.
2012-10-31 15:05:54 +01:00
Gwenole Beauchesne
3c721e1123 h264: introduce GST_VAAPI_PICTURE_{SHORT,LONG}_TERM_REFERENCE flags.
Further get rid of GstVaapiPictureH264-local VAPictureH264.flags for
reference bits, thus simplifying the reference picture marking process
to only track a single set of reference flags. Also introduce a new
long_term_frame_idx member.
2012-10-31 15:05:54 +01:00
Gwenole Beauchesne
af22813f59 h264: introduce GST_VAAPI_PICTURE_FLAG_IDR flag. 2012-10-31 15:05:54 +01:00
Gwenole Beauchesne
b35ccab294 h264: fill in GstVaapiPicture structure.
... and get rid of local VAPictureH264.flags fields in GstVaapiPictureH264.
2012-10-31 15:05:54 +01:00
Gwenole Beauchesne
49774b3c58 h264: add vaapi_fill_picture() helper.
Add vaapi_fill_picture() helper function to convert GstVaapiPictureH264
to VAPictureH264 structure. This is preparatory work to get rid of the
local VAPictureH264 member in GstVaapiPictureH264.
2012-10-31 15:05:54 +01:00
Gwenole Beauchesne
e30a518267 h264: fix activation order of picture and sequence parameters.
Delay ensure_context() until we actually need a VA context for allocating
new VA surfaces, and then GstVaapiPictures, but also when a real activation
of a new picture parameter set occurs, thus also implying an activation
of the related sequence parameter set.

The most important thing was to drop the global pps and sps pointers since
they may not have matched the currently activated picture parameter or
sequence parameter sets at the specified decode point.

Anoter positive side-effect is that this cleans up all occurrences of
decode_current_picture() to only keep those useful in decode_picture(),
before a new picture is allocated, or in decode_sequence_end() when
an end-of-stream or end-of-sequence condition occurred.
2012-10-26 16:30:33 +02:00
Gwenole Beauchesne
015879cafe h264: fix scaling list generation.
... aka fix regression from efaab79. In particular, ScalingList8x8[]
array was partially copied to the VAIQMatrixBufferH264. While we are
at it, also improve bounds checking and avoid copying 8x8 scaling
lists if transform_8x8_mode_flag is set to 0.
2012-10-26 14:41:36 +02:00
Gwenole Beauchesne
6398bc7d3c h264: fix detection of picture boundaries.
Strictly follow the standard (7.4.1.2.4) to detect the first VCL NAL
unit of a primary coded picture.
2012-10-24 18:23:09 +02:00
Gwenole Beauchesne
efaab79e89 h264: optimize handling of scaling lists.
Don't copy scaling lists twice to an intermediate state. Rather, directly
use the scaling lists from GstH264PPS since they would match those provided
by SPS header, if necessary. i.e. if PPS-specific scaling lists are not
available in the bitstream.
2012-10-24 18:01:14 +02:00
Gwenole Beauchesne
97979ee6de h264: simplify code when MMCO is 5.
Remove exit_picture() and exit_picture_poc() since PicOrderCnt(CurrPic)
is now updated accordingly to the standard. Besides, MMCO = 5 specific
operations are moved up to exec_ref_pic_marking_adaptive_mmco_5().
2012-10-23 10:37:47 +02:00
Gwenole Beauchesne
d9b5e47585 h264: fix MMCO-based reference picture marking process.
Fix adaptive memory control decoded reference picture marking process
implementation for operations 2 to 6, thus also fixing support for
long-term reference pictures.
2012-10-22 17:26:00 +02:00
Gwenole Beauchesne
04bbd8cc11 h264: move MMCO handlers out of the loop (cosmetics).
This change only splits each individual MMCO handler into several functions
dedicated for each operation. This is needed to perform further work later
on.
2012-10-22 17:21:32 +02:00
Gwenole Beauchesne
2e8949d77b h264: add flag to compile with strict DPB ordering mode.
Allow build with strict DPB ordering mode whereby evicted entries
are replaced by the next entries, in order instead of optimizing
it away with the last entry in the DPB.

This is only useful for debugging purpose, against a reference SW
decoder for example.
2012-10-16 16:52:04 +02:00
Gwenole Beauchesne
26b7c46eda h264: drop extra code covered by built-in codecparsers.
GstH264SliceHdr.n_emulation_prevention_bytes is bound to exist now that
a newer version of codecparsers/ are used if the system provided one is
now recent enough to have those required extensions.
2012-10-16 16:46:17 +02:00
Gwenole Beauchesne
d42d838388 codecparsers: fix generation of symlinks.
Try to improve dependencies while generating symlinks to externally
maintained copy of codecparsers (derived from upstream git master
tree).
2012-10-16 16:43:43 +02:00
Gwenole Beauchesne
193b14c0f2 vc1: use framerate information from bitstream parser. 2012-10-11 15:04:12 +02:00
Simon Farnsworth
b07eb2056b vc1: use pixel-aspect-ratio from bitstream parser.
Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-10-11 15:00:44 +02:00
Simon Farnsworth
bd11baedc5 mpeg2: use pixel-aspec-ratio information from bitstream parser.
Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-10-11 14:58:38 +02:00
Gwenole Beauchesne
022e99e127 codecparsers: h264: use submodule sources.
Use newer sources from the codecparsers/ submodule for
- GstH264SliceHdr.n_emulation_prevention_bytes: EPBs;
- GstH264VUIParams.{par_n,par_d}: pixel-aspect-ratio.
2012-10-11 14:19:39 +02:00
Gwenole Beauchesne
cee782a177 codecparsers: jpeg: use submodule sources. 2012-10-11 14:19:38 +02:00
Simon Farnsworth
fa87396905 h264: use pixel-aspect-ratio from SPS header.
Propagate pixel-aspect-ratio determined by the GStreamer codecparser
from the sequence headers.

Signed-off-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-10-10 11:29:00 +02:00
Gwenole Beauchesne
3f430b32a4 h264: add decode_nalu() helper function.
Split decode_buffer() into the core infrastructure that determines
the NAL units contained in the adapter and the actual function that
decodes the NAL unit.
2012-10-10 10:35:20 +02:00
Gwenole Beauchesne
6f2e885f11 h264: fix end-of-stream conditions (flush).
Decode pending data in the adapter prior to processing the actual
code for end-of-stream.
2012-10-10 10:31:39 +02:00
Gwenole Beauchesne
388e881ba9 mpeg2: add decode_packet() helper function.
Split decode_buffer() into the core infrastructure that determines
the packets contained in the adapter and the actual function that
decodes the packet data.
2012-10-10 09:45:03 +02:00
Gwenole Beauchesne
dc03ca9100 mpeg2: fix end-of-stream conditions (flush).
Decode pending data in the adapter prior to processing the actual
code for end-of-stream. Initial code from Feng Yuan.
2012-10-09 18:08:50 +02:00
Gwenole Beauchesne
91da4fcb18 mpeg2: fix memory leak of empty packets.
Fix memory leakage of empty packets, i.e. packets that only contain
the start code prefix. In particular, free empty user-data packets.

Besides, the codec parser will already fail gracefully if the packet
to parse does not have the minimum required size. So, we can also
completely drop the block of code that used to handle packets of size 4
(including the start code).
2012-10-09 18:05:48 +02:00
Gwenole Beauchesne
8f7d19f010 mpeg2: fix return value for "no-data" conditions.
Fix return value when the second scan for start code fails. This means
there is not enough data to determine the full extents of the current
packet and the function shall return GST_VAAPI_DECODER_STATUS_ERROR_NO_DATA
in this case, instead of GST_VAAPI_DECODER_STATUS_SUCCESS.
2012-10-09 18:05:47 +02:00
Gwenole Beauchesne
86981eea41 decoder: refine semantics of gst_vaapi_decoder_put_buffer().
Improve the semantics for gst_vaapi_decoder_put_buffer() when an empty
buffer is passed on. An empty buffer is a buffer with a NULL data pointer
or with a size equals to zero. In this case, that buffer is simply
skipped and the function returns TRUE. A NULL buffer argument still
marks the end-of-stream.
2012-10-09 15:04:36 +02:00
Gwenole Beauchesne
d7fccc351a decoder: drop unused functions. 2012-10-09 14:40:00 +02:00
Gwenole Beauchesne
86b70977f8 wayland: cosmetics (remove tabs). 2012-10-05 13:38:48 +02:00
Rob Bradford
0cde1f5289 wayland: add support for windowed mode.
Rather than always making the surface fullscreen instead implement the
set_fullscreen vfunc on GstVaapiWindow and then set the shell surface
fullscreen on not depending on that.

Reviewed-by: Joe Konno <joe.konno@intel.com>
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-10-05 13:38:46 +02:00
Gwenole Beauchesne
a6a1ea09a3 utils: drop unused GLX helpers.
Remove helpers for GL_ARB_fragment_program and GL_ARB_multitexture
extensions since they are not used throughout gstreamer-vaapi.
2012-09-27 11:08:58 +02:00
Gwenole Beauchesne
5db2e93d3c utils: fix build with <GL/glext.h> version >= 85.
Mesa recently updated the <GL/glext.h> header version to Khronos version 85.
This caused the PFNGLMULTITEXCOORD2FPROC definition to be moved out of the
GL_VERSION_1_3_DEPRECATED block. However, since <GL/gl.h> also defines
GL_VERSION_1_3 to 1, the definitions in <GL/glext.h> are then not enabled,
thus leaving PFNGLMULTITEXCOORD2FPROC undefined as well.

Provide a PFNGLMULTITEXCOORD2FPROC replacement as an interim solution for
newer versions of the <GL/glext.h> header.
2012-09-27 11:04:24 +02:00
Gwenole Beauchesne
1c5c5ea9b8 h264: review and report errors accordingly.
Use GST_ERROR() to report real errors instead of hiding them into
GST_DEBUG().
2012-09-21 16:43:38 +02:00
Gwenole Beauchesne
dde9232e10 h264: exclusively use GstAdapter, drop sub-buffer hack.
Maintaining the sub-buffer is rather suboptimal especially since we
were also maintaining a GstAdapter. Now, we only use the GstAdapter
thus requiring minor extra parsing when receiving avcC buffers.
2012-09-20 18:04:19 +02:00
Kristian Høgsberg
38ed8008b1 wayland: set opaque region for YUV surface.
This allows the compositor to optimize redraws and cull away changes
obscured by the video surface.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-09-17 10:06:13 +02:00
Gwenole Beauchesne
f65a413500 glibcompat: add replacement for g_cond_wait_until(). 2012-09-12 13:42:49 +02:00
Gwenole Beauchesne
c4ccc0a74b codecparsers: jpeg: add missing includes. 2012-09-12 10:40:06 +02:00
Gwenole Beauchesne
5549dbc3c0 vaapidecode: don't reset decoder if codec type is the same.
Reset, i.e. destroy then create, the decoder in _setcaps() handler only
if the underlying codec type actually changed. This makes it possible
to be more tolerant with certain MPEG-2 streams that get parsed to
form caps that are compatible with the previous state but minor changes
to "codec-data".
2012-09-11 17:08:47 +02:00
Gwenole Beauchesne
6c19849cd2 decoder: propagate buffer duration downstream. 2012-09-11 17:08:47 +02:00
Gwenole Beauchesne
e4d27fba6b surfaceproxy: add "duration" property. 2012-09-11 17:08:47 +02:00
Gwenole Beauchesne
a10b3d3032 decoder: cope with new GstVaapiContextInfo based API.
Update decoders to report the maximum number of reference frames to use.
2012-09-10 18:27:40 +02:00
Gwenole Beauchesne
893e45ecb5 context: JPEG codec does not need any reference frame. 2012-09-10 18:17:10 +02:00
Gwenole Beauchesne
4ca1f3f47c context: allow number of reference frames to be set.
Make it possible to specify the maximum number of references to use within
a single VA context. This helps reducing GPU memory allocations to the useful
number of references to be used.
2012-09-10 18:15:02 +02:00
Gwenole Beauchesne
cf75d048a1 mpeg4: fix debug info for unsupported profile. 2012-09-07 16:23:43 +02:00
Gwenole Beauchesne
61cc02f54b libs: fix build in strict ISO C mode. 2012-09-07 16:23:42 +02:00
Gwenole Beauchesne
cdc6329182 decoder: drop extraneous return for void function. 2012-09-07 11:58:53 +02:00
Gwenole Beauchesne
c6d64527b5 image: don't use (void *) pointer arithmetic. 2012-09-07 11:58:35 +02:00
Philip Lorenz
79b45a43d1 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>
2012-09-07 11:54:09 +02:00
Gwenole Beauchesne
09724e12de display: fix display aspect ratio when display is rotated. 2012-09-06 13:39:50 +02:00
Gwenole Beauchesne
30a8c566b7 display: fix physical display size when display is rotated. 2012-09-06 13:39:50 +02:00
Gwenole Beauchesne
2a7cefab1a display: fix GstVaapiRotation enumeration of values. 2012-08-30 16:30:14 +02:00
Gwenole Beauchesne
4a1127dd7c vaapisink: drop obsolete GstVaapiVideoSink interface.
This interface was deprecated since 0.3.x series when the GstVideoContext
interface was added to the main GStreamer APIs.
2012-08-29 13:20:17 +02:00
Gwenole Beauchesne
9b11f069c9 display: partially revert 8ebe4d6.
Don't try to fix up the initial values, this could make things worse.
Simply assume the driver does not support the capability in this case.
2012-08-29 10:13:58 +02:00
Gwenole Beauchesne
8ebe4d63d5 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().
2012-08-28 17:42:19 +02:00
Gwenole Beauchesne
fafcf0e13c display: add color balance properties.
Add support for hue, saturation, brightness and contrast attributes.
2012-08-28 17:42:13 +02:00
Gwenole Beauchesne
4dad571526 display: initialize default attribute values.
Ensure the display attribute is actually supported by trying to retrieve
its current value during GstVaapiDisplay creation.
2012-08-28 16:31:58 +02:00
Gwenole Beauchesne
112e2b1fe7 display: raise "notify" for property changes. 2012-08-28 16:31:56 +02:00
Gwenole Beauchesne
9c714cf7a0 display: expose display attributes as GObject properties.
Expose VA display "render-mode" and "rotation" attributes as standard
GObject properties.
2012-08-28 16:28:49 +02:00
Gwenole Beauchesne
fe4ad408dc display: install properties in batch.
Use g_object_class_install_properties() to install GstVaapiDisplay properties.
It is useful to maintain properties as GParamSpec so that to be able to raise
"notify" signals by id instead of by name in the future.
2012-08-28 16:24:15 +02:00
Gwenole Beauchesne
1069ce433f display: fix gst_vaapi_display_has_property().
Append the "render-mode" and "rotation" properties, should they be supported
by the underlying VA driver.
2012-08-27 19:00:37 +02:00
Wind Yuan
c899947e17 display: add support for rotation modes.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-08-27 18:41:22 +02:00
Gwenole Beauchesne
a192f40ed9 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.
2012-08-27 17:52:32 +02:00
Gwenole Beauchesne
a503aaf9b9 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.
2012-08-27 17:52:32 +02:00
Sreerenj Balachandran
f2741a88cc 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>
2012-08-27 11:03:16 +02:00
Gwenole Beauchesne
1fb8f4791f 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.
2012-08-27 10:36:51 +02:00
Javier Jardón
5157a01942 decoder: use g_object_notify_by_pspec().
Use g_object_notify_by_pspec() instead of g_object_notify() so that to
avoid a property name lookup. i.e. this makes notifications faster to
the `vaapidecode' element.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-08-27 09:56:47 +02:00
Gwenole Beauchesne
a10ee527c7 wayland: handle de-interlacing flags.
VA/Wayland API was updated to allow flags for bob deinterlacing.
More elaborated filters will require a complete VA/VPP pipeline.
2012-08-06 19:21:03 +02:00
Gwenole Beauchesne
0b3d75f14b jpeg: fix default quantization tables.
Two elements in the luminance quantization table were wrong. So,
gst_jpeg_get_default_quantization_tables() now reconstructs tables
in zig-zag order from the standard ones (Tables K.1 and K.2).
2012-08-02 18:27:48 +02:00
Gwenole Beauchesne
f88323857d jpeg: compute default Huffman tables.
... instead of having them pre-calculated. This saves around 1.5 KB
of data in the DSO but requires gst_jpeg_get_default_huffman_tables()
to do more work. Though, the client application may have to call that
function at most once, only.
2012-08-02 15:17:57 +02:00
Gwenole Beauchesne
71e4936e5e display: drop VAProfileNone entries from debug messages. 2012-08-01 18:30:27 +02:00
Yan Yin
8bd3070c51 display: query for supported display attributes.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-08-01 18:27:38 +02:00
Yan Yin
a72d10ca0e utils: add string_of_VADisplayAttributeType() helper.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-08-01 18:27:37 +02:00
Gwenole Beauchesne
657f0a4a6f Add initial support for VA/DRM. 2012-08-01 16:40:17 +02:00
Gwenole Beauchesne
7070961202 Fix build without X11 (again).
Don't try to build libgstvaapi-x11.so.* if X11 was disabled. Also shuffle
files list wrt. x11, glx and wayland backends.
2012-07-31 17:58:43 +02:00
Gwenole Beauchesne
7c1b9b48e4 jpeg: update to the latest VA-API changes (0.32.1+). 2012-07-31 11:51:57 +02:00
Gwenole Beauchesne
4401ada22a wayland: implement display ::get_size*() hooks. 2012-07-27 14:35:48 +02:00
Kristian Høgsberg
22b2c2cb4f wayland: use scale fullscreen method.
This makes the compositor scale the surface to fit and preserves aspect
ratio.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-07-26 16:12:56 +02:00
Kristian Høgsberg
44d6f7631b wayland: respond to ping/pong protocol so we're not deemed unresponsive.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-07-26 16:12:56 +02:00
Gwenole Beauchesne
af3b6dc2b8 wayland: fix double disconnect of display. 2012-07-25 15:31:42 +02:00
Gwenole Beauchesne
5be6de20cb wayland: mangle display name for cache lookups. 2012-07-25 15:31:42 +02:00
Gwenole Beauchesne
0bf1e761f9 Fix build without X11. 2012-07-25 15:31:42 +02:00
Gwenole Beauchesne
9e00c87367 plugins: add support for Wayland. 2012-07-25 15:31:42 +02:00
Sreerenj Balachandran
621bb12be6 Add initial support for VA/Wayland.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-07-25 15:31:42 +02:00
Gwenole Beauchesne
4e53b5fe4e display: fix destruction of mutex. 2012-07-25 14:37:11 +02:00
Gwenole Beauchesne
437bc925f6 display: add display types.
Move display types from gstvaapipluginutil.* to gstvaapidisplay.* so that
we could simplify characterization of a GstVaapiDisplay. Also rename "auto"
type to "any", and add a "display-type" attribute.
2012-07-25 14:37:11 +02:00
Gwenole Beauchesne
411b970f8a display: use prefixed display names for cache lookups.
This improves display name comparisons by always allocating a valid display
name. This also helps to disambiguate lookups by name in the global display
cache, should a new backend be implemented.
2012-07-25 14:27:05 +02:00
Gwenole Beauchesne
8ef490a3de videobuffer: drop deprecated functions.
Move video buffer creation routines to plugin elements. That exclusively
uses *_typed_new*() variants.
2012-07-24 16:13:31 +02:00
Gwenole Beauchesne
809a85433d videobuffer: mark video buffer creation routines as deprecated.
The vdeo buffer creation routines shall actually be internal to gstreamer-vaapi
plugin elements. So deprecate any explicit creation routines that are not the
new *_typed_new*() variants.
2012-07-24 15:57:57 +02:00
Gwenole Beauchesne
e12ef8e6a2 videobuffer: factor out base and GLX implementations.
Introduce new typed constructors internal to gstreamer-vaapi plugin elements.
This avoids duplication of code, and makes it possible to further implement
generic video buffer creation routines that automatically map to base or GLX
variants.
2012-07-24 15:57:57 +02:00
Gwenole Beauchesne
e52def4737 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.
2012-07-24 15:57:57 +02:00
Gwenole Beauchesne
7a0382130f configure: drop check for --enable-vaapi-glx.
This flag is obsolete. It was meant to explicitly enable/disable VA/GLX API
support, or fallback to TFP+FBO if this API is not found. Now, we check for
the VA/GLX API by default if --enable-glx is set. If this API is not found,
we now default to use TFP+FBO.

Note: TFP+FBO, i.e. using vaPutSurface() is now also a deprecated usage and
will be removed in the future. If GLX rendering is requested, then the VA/GLX
API shall be used as it covers most usages. e.g. AMD driver can't render to
an X pixmap yet.
2012-07-24 15:57:57 +02:00
Gwenole Beauchesne
b6c97e31ee configure: improve checks for GLX. 2012-07-20 14:44:27 +02:00
Gwenole Beauchesne
9491a35731 Drop support for obsolete VA-API versions < 0.30.4. 2012-07-20 14:11:42 +02:00
Gwenole Beauchesne
bcae632c32 vaapisink: drop checks for new APIs used by default.
GStreamer -base plugins >= 0.10.31 are now required, so the checks for
new APIs like GstXOverlay::set_window_handle() and ::set_render_rectangle()
are no longer necessary.
2012-07-20 14:11:42 +02:00
Gwenole Beauchesne
d8b0c8ec38 Use standard G_GNUC_INTERNAL keyword instead of attribute_hidden. 2012-07-19 18:01:12 +02:00
Gwenole Beauchesne
562d98ec56 Drop obsolete GstVaapiTSB.
It has been replaced with a GstAdapter and gst_adapter_prev_pts().
2012-07-19 17:58:21 +02:00
Gwenole Beauchesne
9d440fafb3 Drop all references to USE_CODEC_PARSERS. 2012-07-19 17:30:36 +02:00
Gwenole Beauchesne
7f47ac3bea Drop FFmpeg-based decoders.
GStreamer codecparsers-based decoders are the only supported decoders now.
Though, FFmpeg decoders are still available in gstreamer-vaapi 0.3.x series.
2012-07-19 17:30:36 +02:00
Javier Jardón
dba174906a 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>
2012-07-19 15:19:17 +02:00
Javier Jardón
30024b3f8e 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>
2012-07-19 15:19:17 +02:00
Javier Jardón
c415868f26 libs: use generic g_cclosure_marshal_VOID__VOID().
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-07-19 15:19:16 +02:00
Gwenole Beauchesne
27c8269b43 glibcompat: drop explicit check for g_list_free_full(). 2012-07-19 14:29:33 +02:00
Gwenole Beauchesne
fbb9a5e1c0 jpeg: fix make dist. 2012-07-19 13:57:05 +02:00
Gwenole Beauchesne
1139908487 jpeg: update to match latest parser API. 2012-07-17 18:02:16 +02:00
Gwenole Beauchesne
8f93bbc937 codecparsers: jpeg: tweak parser API.
... to allow for more consistent parsing API among various codec parsers.
In particular, drop use of GList.
2012-07-17 18:02:16 +02:00
Gwenole Beauchesne
06be1afea6 jpeg: fix build with VA-API < 0.32.0. 2012-06-26 15:18:53 +02:00
Gwenole Beauchesne
a9bd8400db Fix build with recent GStreamer stack. 2012-06-26 10:57:34 +02:00
Gwenole Beauchesne
4e1a354340 jpeg: update to current VA/JPEG decoding API. 2012-06-26 10:57:34 +02:00
Gwenole Beauchesne
326a229636 codecparsers: jpeg: track valid quantization and Huffman tables.
Add valid flag to GstJpegQuantTable and GstJpegHuffmanTable so that
to determine whether a table actually changed since the last user
synchronization point. That way, this makes it possible for some
hardware accelerated decoding solution to upload only those tables
that changed.
2012-06-21 16:06:47 +02:00
Wind Yuan
e61f4c4445 codecparsers: jpeg: use U_READ_UINT*() wherever possible.
Use GstByteReader *_unchecked() variants as much as possible.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-06-21 15:30:54 +02:00
Wind Yuan
90e6532fd3 jpeg: add new GstJpegHuffmanTables structure.
Add new GstJpegHuffmanTables helper structure to hold all possible
AC/DC Huffman tables available to all components.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-06-21 15:30:54 +02:00
Wind Yuan
4c5cc7eff9 jpeg: make gst_jpeg_parse() support multiple scans.
gst_jpeg_parse() now gathers all scans available in the supplied
buffer. A scan comprises of the scan header and any entropy-coded
segments or restart marker following it. The size and offset to
the associated data (ECS + RST segments) are append to a new
GstJpegScanOffsetSize structure.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-06-21 15:30:53 +02:00
Wind Yuan
53cbdcc1e6 jpeg: update to match latest parser API.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-05-15 18:25:03 +02:00
Gwenole Beauchesne
0cf06cdbcb jpeg: simplify and optimize parser API. 2012-05-15 16:08:44 +02:00
Wind Yuan
0fe727ba77 mpeg: fix picture used to determine backward_reference_vop_coding_type.
Complete fix brought by bf9f77b1af
but Gwenole did not apply all the bits.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-05-11 11:20:45 +02:00
Wind Yuan
c40c05dc45 mpeg4: map Simple_Scalable profile to Advanced_Simple profile.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-05-10 11:52:06 +02:00
Wind Yuan
96437a7a16 mpeg4: handle skipped frames (vop_hdr->coded = 0).
Gracefully skip non VOP coded frames.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-05-10 11:52:06 +02:00
Wind Yuan
1632b40982 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>
2012-05-10 11:38:06 +02:00
Gwenole Beauchesne
449606efc5 Fix build without JPEG decoder. 2012-04-16 10:02:29 +02:00
Wind Yuan
bf9f77b1af mpeg4: fix VOP coding type of backward reference pictures.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-04-12 11:48:24 +02:00
Wind Yuan
60b5c2da97 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>
2012-04-12 11:44:16 +02:00
Gwenole Beauchesne
687b482895 dpb: mpeg2: cosmetics.
Define MAX_MPEG2_REFERENCES to 2 and avoid magic numbers all around.
2012-04-12 11:00:22 +02:00
Wind Yuan
75e8a7d6f8 Add initial JPEG decoder.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-04-11 19:38:12 +02:00
Wind Yuan
c350a0809d codecparsers: add JPEG parser.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-04-11 19:38:12 +02:00
Gwenole Beauchesne
49b1dca2d3 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.
2012-04-02 18:42:12 +02:00
Gwenole Beauchesne
2d36f6199e 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/>.
2012-04-02 18:09:21 +02:00
Gwenole Beauchesne
9c8b85b3c7 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.
2012-04-02 16:12:32 +02:00
Gwenole Beauchesne
d9c57a236d Fix a few documentation issues. 2012-04-02 13:06:15 +02:00
Gwenole Beauchesne
5975def8ab 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.
2012-04-02 11:36:56 +02:00
Gwenole Beauchesne
99932049e4 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.
2012-04-02 11:36:56 +02:00
Wind Yuan
b33dd69300 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>
2012-03-30 17:23:38 +02:00
Gwenole Beauchesne
75538bbc9b 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.
2012-03-30 17:08:37 +02:00
Gwenole Beauchesne
d51bb87482 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.
2012-03-30 17:08:37 +02:00
Gwenole Beauchesne
6eeb20a953 mpeg2: ignore empty user-data packets.
Fix tcela-8.bits conformance test.
2012-03-30 17:08:37 +02:00
Gwenole Beauchesne
7af40475d5 mpeg2: review and report errors accordingly.
Use GST_ERROR() to report real errors instead of hiding them into
GST_DEBUG().
2012-03-29 11:13:20 +02:00
Gwenole Beauchesne
b003a2bab2 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.
2012-03-28 19:41:28 +02:00
Gwenole Beauchesne
7a9410f826 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.
2012-03-28 19:40:27 +02:00
Gwenole Beauchesne
ac4fc0d36c 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.
2012-03-28 19:36:52 +02:00
Gwenole Beauchesne
b56ac16224 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.
2012-03-28 19:25:49 +02:00
Gwenole Beauchesne
195a61fa02 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.
2012-03-28 18:58:27 +02:00
Gwenole Beauchesne
c27385aa8d 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.
2012-03-28 18:24:39 +02:00
Gwenole Beauchesne
e8756ae427 decoder: add OUTPUT flag to pictures.
Allow pictures to be marked as output gst_vaapi_picture_output().
2012-03-28 17:59:19 +02:00
Gwenole Beauchesne
a7ec623279 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.
2012-03-28 17:59:19 +02:00
Gwenole Beauchesne
b98d334dce 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.
2012-03-28 17:59:19 +02:00
Gwenole Beauchesne
a5144358d1 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.
2012-03-26 12:01:36 +02:00
Gwenole Beauchesne
3b67533d3d compat: add compatibility glue with VA-API 0.34+ (WIP). 2012-03-23 17:13:58 +01:00
Gwenole Beauchesne
7277f0e220 h264: skip all Filler Data NALs. 2012-03-23 17:11:18 +01:00
Wind Yuan
81ab8dad37 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>
2012-03-22 14:44:42 +01:00
Wind Yuan
baa80d9753 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>
2012-03-22 13:45:47 +01:00
Wind Yuan
fc3edde05c 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>
2012-03-21 17:38:22 +01:00
Holger Kaelberer
2ebfa66ade ffmpeg: add support for interlaced streams.
Evaluate interlaced stream properties.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-03-19 18:43:06 +01:00
Holger Kaelberer
82f11ffb30 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>
2012-03-19 18:43:06 +01:00
Holger Kaelberer
8593fb619c surfaceproxy: add TFF property.
Add TFF (top-field-first) property to GstVaapiSurfaceProxy.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-03-19 18:43:06 +01:00
Gwenole Beauchesne
d6ab5e1210 mpeg2: fix is_first_field calculation.
Reset is_first_field for frame pictures. Factor out locations where
the flag is updated.
2012-03-16 13:56:48 +01:00
Gwenole Beauchesne
10dfc67cca mpeg2: catch incorrect picture_structure from bitstreams.
Assume "frame" picture structure if the syntax element was zero or if
progressive_frame is set.
2012-03-16 13:56:26 +01:00
Gwenole Beauchesne
8bbe22f831 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.
2012-03-16 13:55:28 +01:00
Gwenole Beauchesne
63e29adbf5 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.
2012-03-02 13:41:16 +01:00
Wind Yuan
c979d51da6 h264: skip all Access Unit (AU) NALs.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-03-01 10:35:58 +01:00
Wind Yuan
6b56c84c9b 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>
2012-03-01 10:35:58 +01:00
Sreerenj Balachandran
033a675bcc 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>
2012-02-24 11:09:05 +01:00
Gwenole Beauchesne
f1883b4a4e mpeg2: fix slice_vertical_position calculation.
Make sure to adjust slice_vertical_position if picture structure
is a top or bottom field.
2012-02-23 16:41:11 +01:00
Gwenole Beauchesne
124cd8a3d3 decoder: add picture structure flags. 2012-02-23 16:39:51 +01:00
Gwenole Beauchesne
3bc68b5b32 mpeg2: fix decoding at end-of-sequence. 2012-02-23 16:15:23 +01:00
Gwenole Beauchesne
60e515e0b7 mpeg2: fix slice_horizontal_position calculation. 2012-02-23 16:15:22 +01:00
Gwenole Beauchesne
b36d2c810e mpeg2: drop useless mb_y and mb_height members. 2012-02-23 16:14:02 +01:00
Gwenole Beauchesne
d47031b8ce mpeg2: fix decoding of multiple slices with same slice_vertical_position.
6.3.15 says that "some slices may have the same slice_vertical_position,
since slices may start and finish anywhere". So, we can't submit the current
picture to the HW right away since subsequent slices would be missing.
2012-02-23 11:19:48 +01:00
Gwenole Beauchesne
de7432f712 image: fix source stride in picture copy. 2012-02-15 14:08:44 +01:00
Gwenole Beauchesne
ab94048ea0 decoder: fix double buffer free with some VA drivers.
vaRenderPicture() implicitly disposes VA buffers. Some VA drivers would
push the VA buffer object into a list of free buffers to be re-used. However,
reference pictures (and data) that was kept would explicitly release the VA
buffer object later on, thus possibly destroying a valid (re-used) object.

Besides, some other VA drivers don't support correctly the vaRenderPicture()
semantics for VA buffers disposal and would leak memory if there is no explicit
vaDestroyBuffer(). The temporary workaround is to explcitily destroy VA buffers
right after vaRenderPicture(). All VA drivers need to be aligned.
2012-02-13 10:10:35 +01:00
Gwenole Beauchesne
82dbd6f5be h264: complete any current picture decoder before SPS / PPS change.
This ensures the VA context is clear when the encoded resolution
changes. i.e. make sure older picture is decoded with the older
VA context before it changes.
2012-02-08 18:08:49 +01:00
Gwenole Beauchesne
6c5054e840 h264: create VA context earlier when SPS is parsed. 2012-02-08 18:07:14 +01:00
Gwenole Beauchesne
26c105a6ca h264: don't allocate too big data structures on stack. 2012-02-08 17:57:29 +01:00
Gwenole Beauchesne
830efb3fbd glib: map deprecated API to glib >= 2.32 equivalents.
GStaticMutex and GStaticRecMutex are now replaced with GMutex and
GRecMutex, which no longer require any prior call to g_thread_init().
2012-02-07 11:07:15 +01:00
Gwenole Beauchesne
a698766a8b glib: fix includes. 2012-02-07 10:06:15 +01:00
Gwenole Beauchesne
5cc357f88a cosmetics: fix warnings (drop unused variables). 2012-02-07 10:06:15 +01:00
Gwenole Beauchesne
d75d70d395 mpeg2: fix crash when there is no free surface to decode into. 2012-02-06 15:54:42 +01:00
Zhao Halley
d46e8d9961 display: skip profiles which have no entrypoints.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-02-06 12:54:20 +01:00
Gwenole Beauchesne
fe791efc28 decoder: allocate proxy surface earlier.
This simplifies gst_vaapi_picture_output() to only update the presentation
timestamp and submit the proxy to the decoder for output.
2012-01-31 11:34:17 +01:00
Gwenole Beauchesne
399875ee86 decoder: fix memory leak of VA objects on exit.
On sequence end, if the last decoded picture is not output for rendering,
then the proxy surface is not created. In this case, the original surface
must be released explicitly to the context.
2012-01-31 11:29:06 +01:00
Gwenole Beauchesne
11d09495ea mpeg2: use GstAdapter to track input sequence.
This fixes possible memory leaks and improves performance by removing
some extra copies.
2012-01-31 11:02:04 +01:00
Gwenole Beauchesne
b54bf3175c Add glib compatibility glue for older versions. 2012-01-30 19:53:13 +01:00
Gwenole Beauchesne
0fb1147d9c Add header for system-dependent definitions. 2012-01-30 19:52:10 +01:00
Gwenole Beauchesne
a79c7f9fa6 decoder: optimize slice data buffers initialization.
VA drivers may have a faster means to transfer user buffers to GPU
buffers than using memcpy(). In particular, on Intel Gen graphics, we
can use pwrite(). This provides for faster upload of bitstream and can
help higher bitrates.

vaapi_create_buffer() helper function was also updated to allow for
un-mapped buffers and pre-initialized data for buffers.
2012-01-30 10:32:14 +01:00
Gwenole Beauchesne
5cd0242bbb h264: simplify RefPicList reconstruction. 2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
d656b958a3 h264: flush DPB when the end of the sequence is reached. 2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
e52ca4a2c8 h264: handle Decoded Picture Buffer (DPB). 2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
425060a7a8 h264: fix pred_weight_table() reconstruction.
Only the explicit pred_weight_table(), possibly with the inferred default
values, shall be required. e.g. don't fill in the table if weighted_pred_flag
is not set for P/SP slices.
2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
8c37221fa5 h264: execute reference picture marking process (MMCO). 2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
61753fd55a h264: fix presentation timestamps. 2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
16ccf82363 h264: execute reference picture marking process (sliding window). 2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
5a795b439c h264: handle avcC format for decoding buffers. 2012-01-29 15:27:59 +01:00
Sreerenj Balachandran
6d61965531 h264: handle codec-data.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
c071f80f40 Add initial H.264 decoder. 2012-01-29 15:27:59 +01:00
Gwenole Beauchesne
4a46b5d6c4 decoder: retain proxy surface until the GstVaapiPicture is destroyed.
Keep a valid reference to the proxy in GstVaapiPicture so that frames
marked as "used for reference" could be kept during the lifetime of the
picture. i.e. don't release them too soon as they could be re-used right
away.
2012-01-27 15:56:32 +01:00
Gwenole Beauchesne
2897618b85 decoder: properly reference count pictures.
This fixes cases where a GstVaapiPicture would be destroyed whereas
there is still a valid instance of it in either prev, current or
next picture.
2012-01-27 13:28:12 +01:00
Gwenole Beauchesne
7b19745141 decoder: simplify output of decoded frames.
Drop obsolete gst_vaapi_decoder_push_surface() that was no longer used.
Change gst_vaapi_decoder_push_surface_proxy() semantics to assume PTS
is already set correctly and reference count increased, if necessary.
2012-01-27 13:28:12 +01:00
Gwenole Beauchesne
e5d12e8853 decoder: rework the internal VA objects API.
The new API simplifies a lot reference counting and makes it more
flexible for future additions/changes. The GstVaapiCodecInfo is
also gone. Rather, new helper macros are provided to allocate
picture, slice and quantization matrix parameter buffers.
2012-01-27 13:28:11 +01:00
Gwenole Beauchesne
dbba1f6107 decoder: allow slices to be attached to pictures later. 2012-01-24 10:21:45 +01:00
Gwenole Beauchesne
74d3680381 decoder: add ref_count to GstVaapiPicture. 2012-01-24 10:15:52 +01:00
Zhao Halley
b963ccb929 profile: match video/x-h263 as H.263 Baseline profile.
HACK: qtdemux does not report profiles for H.263. So, assume plain
"video/x-h263" is H.263 Baseline profile.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-01-24 10:15:00 +01:00
Gwenole Beauchesne
c42ba571a8 display: report H.263 Baseline profile.
HACK: expose GST_VAAPI_PROFILE_H263_BASELINE for decoding if MPEG-4:2 Simple
profile (VAProfileMPEG4Simple) is supported.
2012-01-24 10:11:59 +01:00
Gwenole Beauchesne
29623239b9 Add template for workarounds. 2012-01-24 10:11:59 +01:00
Gwenole Beauchesne
0f511e1e0b surface: don't expose gst_vaapi_surface_get_parent_context().
gst_vaapi_surface_get_parent_context() was not meant to be exposed globally.
It's just an internal helper function. However, it's still possible to get
the parent context through the "parent-context" property.
2012-01-18 10:42:38 +01:00
Gwenole Beauchesne
92f11799d1 legal: fix year for some copyright notices. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
1594d99d55 legal: add Intel copyright on modified files. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
14cc1cf061 legal: fix copyright notices to include "Copyright" term. 2012-01-16 11:40:51 +01:00
Zhao Halley
c0d8f2fb1f mpeg4: replace GstVaapiTSB with GstAdapter (gst-plugins-base >= 0.10.24).
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-01-16 11:40:51 +01:00
Zhao Halley
6502783474 Add initial MPEG-4 decoder.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-01-16 11:40:51 +01:00
Sreerenj Balachandran
c3455e341e vc1: replace GstVaapiTSB with GstAdapter (gst-plugins-base >= 0.10.24).
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
6ae97634cf vc1: fix codec-data decoding for WMV3 format. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
7b1d784197 vc1: fix presentation timestamps. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
b5ab2e56a9 vc1: fix MV mode packing. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
a7ccbde2af vc1: handle codec-data. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
032486912f vc1: handle encapsulated bitstreams. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
5aea02a66f vc1: fix bitplanes decoding. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
e686c440c7 vc1: fix BFRACTION reconstruction. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
a6a1653d92 vc1: fix framerate calculation. 2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
b865d4a740 Add initial VC-1 decoder. 2012-01-16 11:40:51 +01:00
Zhao Halley
27fa5903ef mpeg2: fix first field detection.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-01-16 11:40:51 +01:00
Gwenole Beauchesne
a591dc3b72 mpeg2: fix quantisation matrix construction. 2012-01-16 11:40:50 +01:00
Sreerenj Balachandran
697a2804e1 mpeg2: replace GstVaapiTSB API with GstAdapter (gst-plugins-base >= 0.10.24).
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
ab8f602957 mpeg2: fix packets spanning over two buffers. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
ce413eb83d mpeg2: ignore system start codes (PES headers). 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
c5902b7a84 mpeg2: handle closed_gop. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
49b4702fb6 Add initial MPEG-2 decoder. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
8f0eda8964 Allow conditional build of GStreamer/FFmpeg bitstream parsers. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
3360f7f3e3 Add VA decoder helpers. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
a93c1c076b decoder: add new error codes.
GST_VAAPI_DECODER_STATUS_ERROR_UNSUPPORTED_PROFILE: for unsupported profile
GST_VAAPI_DECODER_STATUS_ERROR_UNSUPPORTED_CHROMA_FORMAT: for unsupported chroma format
2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
9764e35acb Add timestamp buffer store helper utils. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
e0913aaf0e Add VA buffer helpers. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
9b9c049a67 utils: slight improvements to gl_bind_texture(). 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
30ef6802d6 utils: pretty-print output of gl_get_error_string(). 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
a3c9365f15 utils: rewrite gl_perspective() as per OpenGL FAQ 9.085. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
ba810c2ed6 utils: simplify string of VAProfile/VAEntrypoint. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
4340372996 utils: drop string_of_FOURCC() in favor of standard GST_FOURCC_* helpers. 2012-01-16 11:40:50 +01:00
Gwenole Beauchesne
674ea91faa display: always free VA display cache if it is empty. 2012-01-12 16:09:08 +01:00
Gwenole Beauchesne
9516f00f8e display: use VA display cache for X11 and GLX winsys. 2012-01-12 16:09:08 +01:00
Gwenole Beauchesne
773272475f display: implement a VA display cache. 2012-01-12 16:09:08 +01:00
Gwenole Beauchesne
420402d593 window: always check geometry when the window is mapped. 2012-01-11 09:38:56 +01:00
Zhao Halley
c40c05e5a4 Add missing profiles from VA-API 0.32.0.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2012-01-06 17:58:12 +01:00
Gwenole Beauchesne
3e1d235c1a decoder: fix possible leak of VA surfaces.
Under some circumstances, we could have leaked a surface, thus not
releasing it to the pool of available surfaces in the VA context.
The strategy is now to use a proxy earlier and automatically ref/unref
whenever necessary. In particular, during the lifetime needed for FFmpeg.
2012-01-05 17:35:43 +01:00
Gwenole Beauchesne
4e72aa587c surfaceproxy: add helper to retrieve the VA surface ID. 2012-01-05 17:35:43 +01:00
Gwenole Beauchesne
40f44ab60e surfaceproxy: simplify destruction.
Also make sure to always make sure to release the surface back to the
pool of surfaces in the associated VA context, if any.
2012-01-05 17:35:37 +01:00
Gwenole Beauchesne
0afd2e5c42 context: avoid self reference loops with surfaces. 2012-01-05 14:50:26 +01:00
Gwenole Beauchesne
7f8eaa6cbf image: add helpers to extract pixels to user buffers. 2012-01-05 10:29:48 +01:00
Gwenole Beauchesne
13f00c67e6 image: simplify initialization of raw images from video buffers. 2012-01-04 11:34:34 +01:00
Gwenole Beauchesne
ad390f3569 image: fix update from NV12 buffers. 2012-01-04 11:32:21 +01:00
Gwenole Beauchesne
ac7c4cfe78 surface: apply composition to the parent context, if requested. 2011-12-14 14:40:37 +01:00
Gwenole Beauchesne
17538a340e context: make it possible to apply composition globally. 2011-12-14 14:35:13 +01:00
Gwenole Beauchesne
0634dc768d surface: fix associate subpicture to not report deassociation errors. 2011-12-14 14:13:58 +01:00
Gwenole Beauchesne
bf63fe671f surface: fix typo in debug message. 2011-12-14 13:46:26 +01:00
Gwenole Beauchesne
3227168487 subpicture: add helper to create subpicture from GstVideoOverlayRectangle. 2011-12-14 13:16:21 +01:00
Gwenole Beauchesne
317c4e639e surface: record parent context. 2011-12-13 16:53:15 +01:00
Gwenole Beauchesne
9c8c33857f Fix warnings. 2011-12-13 15:59:02 +01:00
Gwenole Beauchesne
a4244820af Rename gst_vaapi_surface_update_composition() to
gst_vaapi_surface_set_subpictures_from_composition().
2011-12-13 15:51:58 +01:00
Nicolas Dufresne
f6fb267903 converter: add support for GstVideoOverlayComposition planes.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2011-12-12 18:38:51 +01:00
Gwenole Beauchesne
b014567502 surface: use unscaled overlay rectangle for blending. 2011-12-12 18:38:46 +01:00
Gwenole Beauchesne
010f94b85d surface: fix VA image leak when an error occurred. 2011-12-12 18:37:13 +01:00
Nicolas Dufresne
c997607c6f surface: add helper to handle GstVideoOverlayComposition.
This helper resets the subpictures to reflect the current composition
layers provided with the buffers.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2011-12-12 18:34:57 +01:00
Gwenole Beauchesne
55738da35b image: add gst_vaapi_image_format_from_video() helper. 2011-12-12 18:32:29 +01:00
Gwenole Beauchesne
efcdec08fb image: allow updates from GstVaapiImageRaw. 2011-12-12 18:32:29 +01:00
Gwenole Beauchesne
9337fb9a74 image: allow partial updates. 2011-12-12 18:32:29 +01:00
Gwenole Beauchesne
6352c7d5fa subpicture: fix doc for gst_vaapi_subpicture_set_image(). 2011-12-12 18:32:29 +01:00
Gwenole Beauchesne
697b96c30c display: fix has_image_format() to check against subpicture formats. 2011-12-12 15:09:37 +01:00
Gwenole Beauchesne
e0fc705de3 Drop unused copy of GstBaseVideoDecoder. 2011-12-12 10:04:32 +01:00
Gwenole Beauchesne
e3c6a78da6 decoder: drop unused headers. 2011-12-08 15:16:14 +01:00
Nicolas Dufresne
c5b18c27d5 videobuffer: add GLX buffer support.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2011-12-08 15:13:35 +01:00
Nicolas Dufresne
a6717334f9 Port to GstSurfaceBuffer interface.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2011-12-08 14:58:58 +01:00
Nicolas Dufresne
075374cda3 Change caps to use new video/x-surface generic type.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2011-12-08 14:58:58 +01:00
Nicolas Dufresne
99c5d18f41 Port to GstVideoContext interface.
This new interface allows for upstream and downstream display sharing
that works in both static and dynamic pipelines.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2011-12-08 14:58:58 +01:00
Gwenole Beauchesne
f35a7f8fb0 Add new GStreamer version check utilities. 2011-12-07 19:05:50 +01:00
Nicolas Dufresne
e5abbe0440 display: destroy display on creation failure.
This allows element to detect that the display creation has actually
failed.

Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2011-12-07 17:20:55 +01:00
Nicolas Dufresne
8a1dc4978f display: don't crash when config is empty.
Signed-off-by: Gwenole Beauchesne <gwenole.beauchesne@intel.com>
2011-12-07 17:19:42 +01:00
Gwenole Beauchesne
3b9a165037 decoder: fix use of invalid data at the end-of-stream. 2011-10-19 17:33:36 +02:00
Gwenole Beauchesne
bd74adeffa Cosmetics (sort source files). 2011-09-14 11:40:02 +02:00
Gwenole Beauchesne
857a024c62 Fix gst_vaapi_image_new_with_image(). 2011-09-08 14:51:30 +02:00
Gwenole Beauchesne
e00ec1f576 Add gst_vaapi_video_buffer_new_from_buffer().
Add helper function to bind a foreign buffer into a GstVaapiVideoBuffer.
Any image, surface or surface proxy will be inherited from the source buffer
if it is a GstVaapiVideoBuffer.
2011-09-06 18:37:11 +02:00
Gwenole Beauchesne
00bb1ca6b4 Add Intel copyright information. 2011-08-01 14:15:39 +02:00
Gwenole Beauchesne
a9a9d72e96 Fix build with newer FFmpeg versions. 2011-07-22 15:56:22 +02:00
Gwenole Beauchesne
2f91c9e8c1 Report caps update only once per video resolution change. 2011-07-22 15:42:26 +02:00
Gwenole Beauchesne
ab6efa04ca Add canonical form (type name) of VA surface caps. 2011-07-22 15:42:26 +02:00
Gwenole Beauchesne
1701ce3107 Update copyright notice. 2011-06-14 13:54:07 +02:00
Gwenole Beauchesne
b614ec9c9b Fix licensing terms. 2011-06-14 13:54:03 +02:00
gb
8ee1ffa857 Drop the GLX 1.3 requirement. 2010-09-20 12:55:47 +02:00
gb
982a06b1c7 Call the GLX/Pixmap related functions through the vtable. 2010-09-20 12:55:47 +02:00
gb
fcb65d60f5 Drop dependency on libavformat. 2010-09-20 12:55:47 +02:00
gb
781a7edd57 Add gst_base_video_decoder_update_src_caps().
Don't forcibly set "interlaced" field if upstream
elements did not have any.
2010-09-20 12:55:47 +02:00
gb
e708f89b67 Drop superfluous functions. 2010-09-20 12:55:47 +02:00
gb
b5b650c6ee Really drop any dependency on libgstvideo. i.e. inline the helpers. 2010-09-20 12:55:47 +02:00
gb
7bd568f293 Further drop dependency on libgstvideo. 2010-09-20 12:55:47 +02:00
gb
ca3005055c Add GstBaseVideoDecoder from gst-plugins-bad git. 2010-09-20 12:55:47 +02:00
gb
d1332bc2e1 Fix GLX version check. 2010-09-20 12:55:47 +02:00
gb
6735dc6b68 Fix decoding of some H.264 streams. e.g. Ice Age 2 trailer. 2010-09-20 12:55:47 +02:00
gb
ade43e8016 Fix build with older VA-API 0.29-sds. 2010-09-20 12:55:47 +02:00
gb
fa6385cd39 Fix decoder caps to report codec aliases. 2010-09-20 12:55:46 +02:00
gb
86d0b2ade9 Regularly update and expose decoder caps. 2010-09-20 12:55:46 +02:00
gb
a777a98f2f Add mechanism to reinsert buffer leftovers into the queue. 2010-09-20 12:55:46 +02:00
gb
9a3b4a7844 Fix memory leak of encoded buffers. 2010-09-20 12:55:46 +02:00
gb
5e8e268e26 Check for out-of-free-surfaces condition. 2010-09-20 12:55:46 +02:00
gb
0047bb1553 Change GST_VAAPI_DECODER_STATUS_ERROR_UNKNOWN value to something more generic (-1). 2010-09-20 12:55:46 +02:00
gb
0fb0c49dbb Improve previous fix. 2010-09-20 12:55:46 +02:00
gb
d5df97625e Fix a crash in the FFmpeg decoder on close. 2010-09-20 12:55:46 +02:00
gb
0e0426582e Fix OpenGL texture internal format (Clutter). 2010-09-20 12:55:46 +02:00
gb
91c4c2c6b5 Fix comment. 2010-09-20 12:55:45 +02:00
gb
453164d0c5 Add gst_vaapi_display_lookup_downstream() helper. 2010-09-20 12:55:45 +02:00
gb
39dbd70c8f Expose VA display through GstVaapiVideoBuffer. 2010-09-20 12:55:45 +02:00
gb
6f5e593abd Expose video pool display. 2010-09-20 12:55:45 +02:00
gb
bceab0254c Stop iteration if there is no more element to examine. 2010-09-20 12:55:44 +02:00
gb
80e5b1ba17 Factor out VA surface caps. 2010-09-20 12:55:44 +02:00
gb
e739b7a289 Fix docs. 2010-09-20 12:55:44 +02:00
gb
01af005ec2 Really link all helper libraries with libtool -no-undefined. 2010-09-20 12:55:44 +02:00
gb
eec67a5972 Link helper libraries with libtool -no-undefined. 2010-09-20 12:55:44 +02:00
gb
85466028ad Fix build with older VA-API 0.29. 2010-09-20 12:55:44 +02:00
gb
79c34f823b Fix doc. 2010-09-20 12:55:44 +02:00
gb
f6314162e0 Rename gst_vaapi_decoder_ffmpeg_new_from_caps() to plain gst_vaapi_decoder_ffmpeg_new(). 2010-09-20 12:55:44 +02:00
gb
edae9f068c Extract framerate information from caps. 2010-09-20 12:55:44 +02:00
gb
2d5434cb0b Move caps initialization to parent class. 2010-09-20 12:55:43 +02:00
gb
5851086b92 Simplify. 2010-09-20 12:55:43 +02:00
gb
fe35801572 Fix doc. 2010-09-20 12:55:43 +02:00
gb
09552b1559 More simplifications. 2010-09-20 12:55:43 +02:00
gb
73766f9466 Simplify GstVaapiDecoder API. 2010-09-20 12:55:43 +02:00
gb
5128ed9951 Drop obsolete defs. 2010-09-20 12:55:43 +02:00
gb
bcf57bb4f9 Drop obsolete decls. 2010-09-20 12:55:43 +02:00
gb
e39709453e Add more aliases for MPEG-4 decoding. 2010-09-20 12:55:43 +02:00
gb
1a341a1c02 Use avctx->coded_{width,height} info to create the VA context. 2010-09-20 12:55:43 +02:00
gb
24d918b7a3 Try to improve heuristics to use an AVCodecContextParser. 2010-09-20 12:55:43 +02:00
gb
dbe1d622ef Fix VC-1 decoding, it does not require any specific parser. 2010-09-20 12:55:43 +02:00
gb
ffb74abe0f Fix VC-1 detection with older gstreamer libs (no "fourcc" field, but a "format" one). 2010-09-20 12:55:43 +02:00
gb
4285c2cc02 Use size information from the demuxer, whenever available. i.e. fix WMV3 decoding. 2010-09-20 12:55:43 +02:00
gb
477e3b8530 Add gst_vaapi_decoder_ffmpeg_new_from_caps() helper. 2010-09-20 12:55:42 +02:00
gb
fa7505c0c5 Improve WMV3 detection yet further. 2010-09-20 12:55:42 +02:00
gb
64479eb8f2 Fix detection of plain old WMV3 contents. 2010-09-20 12:55:42 +02:00
gb
587b39cdd5 Fix VC-1 detection. 2010-09-20 12:55:42 +02:00
gb
34764d2c2c Fix build with older gstreamer libs where gst_buffer_unref() is not a plain function. 2010-09-20 12:55:42 +02:00
gb
021d2ab947 Drop obsolete (and wrong) code. 2010-09-20 12:55:42 +02:00
gb
26790878a1 Cosmetics (spelling). 2010-09-20 12:55:42 +02:00
gb
ecff33db03 Try to fix timestamps (step 1). Looks OK on H55. 2010-09-20 12:55:42 +02:00
gb
4754317e70 Relicense gst-libs/ code to LGPL v2.1+. 2010-09-20 12:55:42 +02:00
gb
8d9b365a5b Drop extraneous comma. 2010-09-20 12:55:42 +02:00
gb
e6b3cfeacd Drop variant=itu field to help codec detection. 2010-09-20 12:55:42 +02:00
gb
a4d201aaf9 Drop excessive threading that over-complicates synchronisation.
MPEG-2 & H.264 videos now play but there are other problems (timestamps).
2010-09-20 12:55:42 +02:00
gb
49f8bad478 Move VA context reset to AVCodecContext.get_context() as the
surface sizes can change.
2010-09-20 12:55:41 +02:00
gb
ee000a357b Fix gst_vaapi_display_has_{decoder,encoder}() to check for the entrypoint too. 2010-09-20 12:55:41 +02:00
gb
1b76d72b98 Add GST_VAAPI_ENTRYPOINT_SLICE_ENCODE. 2010-09-20 12:55:41 +02:00
gb
800faf9ea7 Document H.264 / AVC1 format case better. 2010-09-20 12:55:41 +02:00
gb
fcede672df Fix H.264 decoding with AVC1 format bitstreams. 2010-09-20 12:55:41 +02:00
gb
f1fc4b52c5 Export gst_vaapi_video_buffer_new(). 2010-09-20 12:55:41 +02:00
gb
8c17e2f99d Fix gst_vaapi_profile_get_caps() to include the "profile" field. 2010-09-20 12:55:41 +02:00
gb
5d1eb8ce89 Add gst_vaapi_decoder_pause(). 2010-09-20 12:55:41 +02:00
gb
2356ceb0d9 Use a GstTask with start/stop semantics for the decoder thread. 2010-09-20 12:55:41 +02:00
gb
5f5ed724dd Drop extraneous var. 2010-09-20 12:55:41 +02:00
gb
a1fddf8bcc Add support for GstVaapiSurfaceProxy to GstVaapiVideoBuffer. 2010-09-20 12:55:41 +02:00
gb
0596777703 Fix gst_vaapi_decoder_get_surface() status. 2010-09-20 12:55:41 +02:00
gb
bda32435c2 Try to set correct timestamps to the decoded surface proxy. 2010-09-20 12:55:41 +02:00
gb
a14711b935 Add timestamps to GstVaapiSurfaceProxy. 2010-09-20 12:55:41 +02:00
gb
7a3934d01d Fix GstVaapiDecoder::destroy(): GASyncQueue is not a GObject, likewise for GstBuffer. 2010-09-20 12:55:41 +02:00
gb
6a3b05dbca Fix destructor, av_parser_close() does destroy the struct already, unliker avcodec_close()... 2010-09-20 12:55:41 +02:00
gb
4350de601b Prefer profile from codec-data if any was found there. 2010-09-20 12:55:40 +02:00
gb
1f4e67503c Improve heuristics to find the best profile. Use the highest one if no
explicit match on "profile" field.
2010-09-20 12:55:40 +02:00
gb
1c48fa3a23 Make sure gst_vaapi_decoder_get_surface() gets unblocked on error. 2010-09-20 12:55:40 +02:00
gb
1def875b95 Fix VC-1 codec initialization, it really needs an extradata buffer. 2010-09-20 12:55:40 +02:00
gb
61ae27d84c Split decoder creation with actual resources allocation
and codec setup (probe). This fixes a memory leak (avctx, pctx)
on destroy and most interestingly makes it possible to
detect unsupported codecs.
2010-09-20 12:55:40 +02:00
gb
ff193a22b9 Move gst_vaapi_decoder_ffmpeg_create() call to object constructor. 2010-09-20 12:55:37 +02:00
gb
89c094d659 Add "codec-data" property for additional codec data.
e.g. VC-1 sequence headers for elementary streams.
2010-09-20 12:55:32 +02:00
gb
664542fe2e Cosmetics (weird indentation). 2010-09-20 12:55:32 +02:00
gb
42248445f2 Cosmetics (extraneous variable, debug message). 2010-09-20 12:55:32 +02:00
gb
cc28cdbd60 - Add PTS and framerate information.
- Simplify parsing with an AVCodeParserContext.
2010-09-20 12:55:32 +02:00
gb
29f1784dd7 Add more error codes. Fix documentation. 2010-09-20 12:55:32 +02:00
gb
eddf6b0d6c Fix gst_vaapi_profile_get_codec().
Improve gst_vaapi_profile_from_caps() for H.264 & caps with "codec-data".
2010-09-20 12:55:32 +02:00
gb
d7e4bca05b Handle user end-of-streams. Add gst_vaapi_decoder_{start,stop}() helpers. 2010-09-20 12:55:32 +02:00
gb
0d7164c96c Flush stream only if avcodec_decode_video() read something.
Otherwise, we might still have to seek into the stream.
i.e. keep the data longer.
2010-09-20 12:55:32 +02:00
gb
da3948bdeb Use a recursive mutex so that a single thread can lock
several times. This fixes decoding of MPEG-2 and H.264
because those created a GstVaapiContext later through
avcodec_decode_video() that was a protected call.
2010-09-20 12:55:32 +02:00
gb
a203d19a35 Add initial (multithreaded) decoder based on FFmpeg.
There are tons of bugs left:
- Decoder API not nice enough with error conditions
- FFmpeg parser is sometimes broken
- Packets queue can be lost
2010-04-23 16:05:58 +00:00
gb
5fb146c298 Add surface proxy that holds a reference to the parent surface
and that returns the surface to that context on destruction.
2010-04-23 16:00:50 +00:00
gb
ecf60d2284 Add VA context abstraction. 2010-04-23 15:59:31 +00:00
gb
6cb6c387e9 Fix VA profiles definitions for gst_vaapi_profile_get_codec() to work. 2010-04-23 10:58:19 +00:00
gb
b0493e729c Add a means to cap the number of objects allocated in the pool. 2010-04-21 15:03:31 +00:00
gb
30fbcb1ee8 Add VA entrypoint abstraction. 2010-04-21 15:02:23 +00:00
gb
508edba9a0 Add VA profile abstraction. 2010-04-20 13:36:04 +00:00
gb
fa11094655 Fix OpenGL rendering on G45 systems. 2010-04-20 07:51:23 +00:00
gb
d1709fef62 Fix gl_create_context() to find a GLXFBConfig compatible with the parent GL context. 2010-04-16 13:47:30 +00:00
gb
b8aadb9e82 Fix TFP logic and simplify the FBO model. i.e. it's not necessary
to create another texture (and storage) for the TFP, simply a new texture name.
2010-04-02 11:27:23 +00:00
gb
8e6dea5b74 Fix get-out conditions. 2010-04-01 16:11:54 +00:00
gb
3ddab3f253 The shared GL context in GstVaapiTexture is only useful for cases
where TFP+FBO are used, thus avoiding the need fully preserve the states
and call into glGet*() functions that need synchronization.
2010-04-01 15:38:59 +00:00
gb
9075c8d23d Shorter structs. 2010-04-01 13:55:19 +00:00
gb
7edf8c9bb7 Make more helpers internal, thus reducing .text size further. Add gst_vaapi_display_x11_get_screen() helper along the way. 2010-04-01 13:41:24 +00:00
gb
6b56ca0068 Move GST_VAAPI_DISPLAY_VADISPLAY() and GST_VAAPI_DISPLAY_{LOCK,UNLOCK}() to gstvaapidisplay_priv.h. 2010-04-01 09:47:59 +00:00
gb
702f844a7e Improve handling of GL contexts. 2010-03-31 15:25:19 +00:00
gb
ea1fdba723 Fix build with VA-API < 0.30. 2010-03-30 13:05:31 +00:00
gb
28f73fb582 Enable build without VA/GLX extensions. i.e. fallback to TFP + FBO. 2010-03-30 13:01:34 +00:00
gb
502dec7c1c Add TFP and FBO helpers. 2010-03-30 12:59:15 +00:00
gb
4ff830812f Cosmetics. Make vaapi_check_status() use GST_DEBUG() for error messages. 2010-03-30 12:55:27 +00:00
gb
c58a45f099 Use a shorter function name. 2010-03-30 08:13:34 +00:00
gb
a1dbe90077 Add gst_vaapi_surface_query_status() wrapper. 2010-03-30 08:11:50 +00:00
gb
05a1ed2d23 Try to not reference VA-API types directly. 2010-03-30 07:39:16 +00:00
gb
201a7c9ce1 Use a projection suitable for rotation around the Y axis. 2010-03-29 15:51:54 +00:00
gb
1165419fd0 Add glXSwapBuffers() workaround for NVIDIA. 2010-03-29 13:40:27 +00:00
gb
9255310311 Fix texture rendering. 2010-03-29 12:51:38 +00:00
gb
ab8b90aa59 Fix documentation. 2010-03-29 11:25:20 +00:00
gb
dd92195093 Add gst_vaapi_window_glx_put_texture() helper. 2010-03-29 10:40:26 +00:00
gb
504dc9bf98 Fix typos. 2010-03-29 09:09:30 +00:00
gb
10c454e801 Add initial VA/GLX texture abstraction though the API is not good enough yet. 2010-03-26 16:52:07 +00:00
gb
9981f37de7 Add gst_vaapi_object_{,un}lock_display() helpers. 2010-03-26 15:22:00 +00:00
gb
22fe28b823 MT-Safe: lock display. 2010-03-26 11:54:43 +00:00
gb
d84d6b0f80 Make sure window resize completed prior to resizing the GL viewport. 2010-03-26 11:50:31 +00:00
gb
b50e7f1050 gstvaapicompat.h is a private header, don't install it. 2010-03-26 11:39:20 +00:00
gb
9f369020b5 Add gst_vaapi_display_{sync,flush}() helpers. 2010-03-26 11:35:20 +00:00
gb
8ea56134da Add "synchronous" mode. 2010-03-26 11:30:54 +00:00
gb
15b2a9beec Only add _display suffix to open & close members because they could be #define to some arbitrary value. lock/unlock are safe names. 2010-03-26 11:02:12 +00:00
gb
72fb4f6def Restore GLX context only if there is one. 2010-03-26 10:09:23 +00:00
gb
c9f62b7405 Add gst_vaapi_window_glx_make_current(). Handle X11 window size changes and reset the GL viewport. 2010-03-26 09:41:12 +00:00
gb
c3dcabd90c Check GstVaapiWindow::render() is available prior to calling it. 2010-03-26 08:35:24 +00:00
gb
ec3a04d74d Fix compile flags. 2010-03-26 08:00:32 +00:00
gb
89a99d828c Add initial VA/GLX support. 2010-03-25 17:28:49 +00:00
gb
511463c699 Add missing includes (for vaapi_check_status()). 2010-03-25 17:21:56 +00:00
gb
d56fcd0c2b Only enable GST_DEBUG() if DEBUG is defined. Drop old D(bug()) stuff. 2010-03-25 17:21:13 +00:00
gb
fddeb54248 Add gst_vaapi_window_x11_is_foreign_xid() helper. 2010-03-25 17:18:36 +00:00
gb
b36a2142e4 Allow derived classes to specify custom Visual and Colormap. 2010-03-25 17:18:06 +00:00
gb
86954a32c5 Allow window creation with a specific visual (e.g. for GLX support). 2010-03-25 13:54:06 +00:00
gb
6ad73da390 Fix return value on error (though it's the same in the end). 2010-03-25 13:21:19 +00:00
gb
67de515e63 Simplify initialization of VADisplay. 2010-03-25 12:39:54 +00:00
gb
1703ef2aca Restore the gst_vaapi_{surface,image,subpicture}_get_id() interfaces. 2010-03-25 09:49:17 +00:00
gb
e4775c4e16 Use the parent display object, no need to maintain another one.
In the end, libgstvaapi-x11 reduced by 1 KB in .text vs. 0.1.1.
2010-03-25 09:39:17 +00:00
gb
56658c7aac Add more internal helpers. 2010-03-25 09:37:40 +00:00
gb
2ecadd45b8 Rename to GST_VAAPI_OBJECT_DISPLAY(). 2010-03-24 17:40:19 +00:00
gb
9961c03c6a All GstVaapiID are initialized to GST_VAAPI_ID_NONE by default.
Besides, all GstVaapiObject derived class shall initialize "id" to a valid value.
2010-03-24 17:38:23 +00:00
gb
0881507989 Make GstVaapiWindow* derive from GstVaapiObject. 2010-03-24 17:22:18 +00:00
gb
3fe6ca16e2 gstvaapicompat.h is now a private header (not installed). 2010-03-24 16:27:36 +00:00
gb
520f7ac5b6 Include gstvaapicompat.h in source files only, not headers. 2010-03-24 16:25:56 +00:00
gb
1727295d2c Drop tedious LIBVA_EXTRA_{CFLAGS,LIBS} definitions in Makefile.am. Override CFLAGS & LIBS instead. 2010-03-24 16:21:20 +00:00
gb
725bc7a607 Add compatibility with the original VA-API 0.29. 2010-03-24 16:17:49 +00:00
gb
afa9b9be06 Add missing file (gstvaapivalue.h). 2010-03-24 15:18:33 +00:00
gb
4f7af960cb Fix g_warning() invocation. 2010-03-24 15:12:56 +00:00
gb
ae6c1637f3 Deassociate subpictures while destroying the surface. 2010-03-24 15:11:26 +00:00
gb
c8ec504343 Fix destruction order of subpictures. They should be destroyed first. 2010-03-24 14:57:33 +00:00
gb
9713d1a950 Add support for AYUV format. 2010-03-24 14:46:33 +00:00
gb
e4d9e06945 Fix documentation. 2010-03-24 13:44:01 +00:00
gb
b182366483 Move GValue specific stuff to a dedicated file. 2010-03-24 13:37:38 +00:00
gb
1959fa5b20 Cosmetics (vertical alignment). 2010-03-24 13:21:54 +00:00
gb
358be3dda9 Fix return value on error. 2010-03-24 13:20:34 +00:00
gb
a91206bbc1 Move "id" down to the GstVaapiObject base. 2010-03-24 13:19:58 +00:00
gb
1a90e11ae5 Cosmetics (drop extraneous empty line). 2010-03-24 12:59:22 +00:00
gb
2cbcd31488 Add GParamSpecs for GstVaapiID. 2010-03-24 12:57:54 +00:00
gb
a09c84b04d Add GST_VAAPI_ID_FORMAT() and GST_VAAPI_ID_ARGS() helpers. 2010-03-24 12:38:40 +00:00
gb
647621cf3c Add GstVaapiID abstraction. 2010-03-24 09:52:43 +00:00
gb
63add8fd63 Drop useless include (<va/va_backend.h>). 2010-03-24 08:35:27 +00:00
gb
9233fcf676 Optimize GST_VAAPI_OBJECT_GET_DISPLAY to avoid a run-time check. 2010-03-24 08:34:11 +00:00
gb
b8b82d3337 Move private definitions and accessors to gstvaapiobject_priv.h. 2010-03-24 08:32:12 +00:00
gb
755f198a74 Fix short descriptions. 2010-03-24 08:16:32 +00:00
gb
9df9f60d62 Use a black background for new windows. 2010-03-23 17:29:47 +00:00
gb
e403f26bc5 Add "destroy" signal. 2010-03-23 17:12:40 +00:00
gb
2155318d12 Make GstVaapi{Surface,Image,Subpicture} derive from a GstVaapiObject. 2010-03-23 16:21:28 +00:00
gb
b271ebd760 Drop introspection annotations since they require gtk-doc >= 1.12. 2010-03-23 13:32:36 +00:00
gb
b4aaa2e8c1 Add note about the fact that the surface holds an extra reference to the subpicture. 2010-03-23 10:51:35 +00:00
gb
95edba8907 Improve debugging messages. 2010-03-23 10:49:33 +00:00
gb
6a8c6ad04c Add gst_vaapi_surface_{,de}associate_subpicture() API. 2010-03-23 10:36:20 +00:00
gb
55c5b220cd Wait for MapNotify or UnmapNotify events on foreign windows too. 2010-03-23 08:13:37 +00:00
gb
0bf40c2d44 Check whether the foreign XID is mapped at binding time. 2010-03-23 07:42:05 +00:00
gb
e4a4fd9742 Fix warnings (drop extraneous var). 2010-03-23 06:41:29 +00:00
gb
a1b25e8807 Add GST_VAAPI_WINDOW_XWINDOW() helper macro. 2010-03-23 06:40:27 +00:00
gb
df9e25d473 Shorten condition. 2010-03-22 16:59:29 +00:00
gb
3136cdc991 Try to improve switch to fullscreen mode. 2010-03-22 16:57:20 +00:00
gb
1c647d1f69 Improve display locking and rework X event wait functions. 2010-03-22 16:01:34 +00:00
gb
729f4fc9c6 Move _GstVaapiWindowPrivate declaration to gstvaapiwindow_priv.h. 2010-03-22 13:06:41 +00:00
gb
6407e5339a Add private API to set window size & fullscreen modes
without triggering any notification or virtual functions.
This is useful for derived class to fix up sizes whenever appropriate.
2010-03-22 13:05:05 +00:00
gb
8e773e6d10 Add gst_vaapi_window_get_fullscreen() helper and "fullscreen" property. 2010-03-22 12:47:13 +00:00
gb
cc10345448 Add gst_vaapi_window_get_display() to base. 2010-03-22 12:39:02 +00:00
gb
873d5b7a04 Add GstVaapiPoint & GstVaapiRectangle data structures. 2010-03-22 12:16:47 +00:00
gb
b8daf624c5 Add gst_vaapi_window_set_fullscreen() API. 2010-03-22 10:51:49 +00:00
gb
c13c3c3620 Add gst_vaapi_display_get_pixel_aspect_ratio(). 2010-03-22 09:32:01 +00:00
gb
01cc10fe51 Add display size accessors. 2010-03-22 08:44:38 +00:00
gb
4f00d5657b Fix documentation of *Class'es. 2010-03-21 08:45:09 +00:00
gb
edea5998f5 Move GstVaapiSurfaceRenderFlags conversion to get_PutSurface_flags_from_GstVaapiSurfaceRenderFlags(). 2010-03-21 08:38:17 +00:00
gb
6179b6495e Move GstVaapiSurfaceRenderFlags to gstvaapisurface.h since this will
also be useful for e.g. a gstvaapitexture.h.
2010-03-21 08:22:46 +00:00
gb
27307a6c1b Rename gst_vaapi_window_put_surface_full() to plain gst_vaapi_window_put_surface(). 2010-03-21 08:12:52 +00:00
gb
e24ba07b41 Document GstVaapiVideoBuffer. 2010-03-19 16:41:52 +00:00
gb
dabb757458 Document surface & image pools. Drop obsolete gst_vaapi_video_pool_new() function. 2010-03-19 16:08:48 +00:00
gb
d63f196c73 Add tedious documentation. 2010-03-19 15:45:21 +00:00
gb
9a1741a193 Beautify append_formats(). 2010-03-19 10:42:11 +00:00
gb
a318326f7f Simplify GstVaapiDisplay (use GArray). 2010-03-19 10:38:45 +00:00
gb
55b45d964d Fix gst_vaapi_image_create() from a foreign VA image. 2010-03-18 15:52:20 +00:00
gb
ea2c6c502c Add gst_vaapi_surface_derive_image() API. 2010-03-18 15:28:59 +00:00
gb
b9bf5678f9 Make it possible to bin an X11 window to GstVaapiWindowX11 with plain
g_object_new() and "xid" property. i.e. get foreign window size in
gst_vaapi_window_x11_create().
2010-03-18 13:49:50 +00:00
gb
087b1dabda Split map/unmap functions into internal functions that don't check preconditions. 2010-03-18 12:59:55 +00:00
gb
f80e194549 Improve gst_vaapi_image_new() sanity checks. 2010-03-18 12:56:53 +00:00
gb
c561cead2b Use gtypes. 2010-03-18 08:02:25 +00:00
gb
cf432f9ec8 Optimize gst_vaapi_image_is_linear() and simplify gst_vaapi_image_update_from_buffer(). 2010-03-17 10:43:02 +00:00
gb
bcb5d3f138 Add VA display locking utilities. 2010-03-17 07:59:31 +00:00
gb
912684b904 Don't show window by default during creation. 2010-03-17 07:17:17 +00:00
gb
69943d51ff Fix gst_vaapi_window_x11_destroy(). 2010-03-17 06:49:27 +00:00
gb
f016dc50c2 Extend GstVaapiImage API with *_get_image(), *_is_linear(), *_get_data_size(). 2010-03-16 17:57:23 +00:00
gb
21a9a0aac2 Make GstVaapiVideoBuffer handle two pools. i.e. both image & surface at the same time. 2010-03-16 17:10:02 +00:00
gb
ad54bcf903 Split X11 support to libgstvaapi-x11-*.so.* 2010-03-16 09:39:07 +00:00
gb
d6a6c1ef98 Don't install private headers. 2010-03-16 09:21:15 +00:00
gb
58d3c36658 Fix header guards. 2010-03-16 09:18:57 +00:00
gb
d6f883f73a Rename vaapi_debug.h to gstvaapidebug.h. 2010-03-16 09:17:41 +00:00
gb
4e2db9d8e4 Move vaapi_utils.* to gstvaapiutils.* 2010-03-16 09:15:48 +00:00
gb
506122d970 Cosmetics (remove an extra line). 2010-03-16 09:13:16 +00:00
gb
2ca21f9e41 Move X11 utilties to gstvaapiutils_x11.[ch]. 2010-03-16 09:12:47 +00:00
gb
f2af51eefc Rename GstVaapiSinkBase to GstVaapiVideoSink. 2010-03-16 09:03:10 +00:00
gb
69d58a0857 Handle I420 formats internally in GstVaapiImage. 2010-03-16 08:43:16 +00:00
gb
6bc69b5592 Implement I420 and YV12 if the underlying implementation does not. 2010-03-15 17:43:29 +00:00
gb
f8c91368e9 Factor out. 2010-03-15 16:57:37 +00:00
gb
606c016263 Add gst_vaapi_surface_sync(). 2010-03-15 16:13:51 +00:00
gb
17d221d7d6 Cosmetics (reverse args order). 2010-03-15 16:13:37 +00:00
gb
eca4c7da42 Cosmetics. 2010-03-15 15:55:20 +00:00
gb
7fe02f31a5 Add VA/X11 window abstraction. 2010-03-15 15:12:27 +00:00
gb
f87dfaacba Add VA and X11 display accessors. 2010-03-15 14:57:57 +00:00
gb
a3f2975309 Fix preconditions. 2010-03-15 14:57:30 +00:00
gb
fe4740d35a Cosmetics. 2010-03-15 13:32:37 +00:00
gb
d69e59ffee Add gst_vaapi_{get,put}_image() API. 2010-03-15 11:49:03 +00:00
gb
541d740ea3 Add gst_vaapi_image_update_from_buffer() helper. 2010-03-15 10:27:10 +00:00
gb
c465394864 Add basic GstVaapiVideoBuffer. 2010-03-12 23:48:50 +00:00
gb
809933a46b Add GstVaapiImagePool and factor out GstVaapiSurfacePool from a base GstVaapiVideoPool. 2010-03-12 23:47:47 +00:00
gb
56827ae5b6 Simplify format conversion code. 2010-03-12 22:32:35 +00:00
gb
d5253e6e2c Add gst_vaapi_image_format_from_caps() helper. 2010-03-12 22:28:01 +00:00
gb
d1f3c3e6b0 Add VA surface pool (lazy allocator). 2010-03-12 17:45:18 +00:00
gb
5fa32d3cf4 Add gst_vaapi_surface_get_size() helper. 2010-03-12 17:39:11 +00:00
gb
8e72746f35 Avoid use of GstStaticCaps since older gstreamer versions (0.10.22) write to it. 2010-03-12 10:52:08 +00:00
gb
a0255faa07 Reset display-name if the user provided his own X11 display. 2010-03-11 15:35:43 +00:00
gb
e4ae48029f Add gst_vaapi_display_x11_new_with_display() API. 2010-03-11 15:21:43 +00:00
gb
0d4b65b758 Fix *_GET_CLASS() definitions... 2010-03-11 15:04:18 +00:00
gb
a42754e31e API change: gst_vaapi_display_x11_new() now takes an X11 display name. 2010-03-11 15:01:00 +00:00
gb
e284e5e0d0 Use GstVaapiChromaType abstraction. 2010-03-11 13:58:32 +00:00
gb
ac1243b28c New refcounting policy. All getters return a reference, not a copy. So the user shall reference the object itself, should he wish so. 2010-03-11 12:30:12 +00:00
gb
e59eff6902 Don't warn on failure, just return an appropriate error or value. 2010-03-11 12:14:10 +00:00
gb
acbab7a1c1 Filter out any format that is not supported by the library (libgstvaapi).
Also sort the formats by HW preference.
2010-03-11 12:11:36 +00:00
gb
224d06a03d Add helper interface that all VA-API sinks must implement. e.g. vaapisink. 2010-03-11 10:50:27 +00:00
gb
5c5b45f4d8 Use GST_DEBUG. 2010-03-10 13:13:51 +00:00
gb
0bf78c5ef2 Fix GstVaapiImage and GstVaapiSubpicture initialization. 2010-03-10 13:10:59 +00:00
gb
e3b4eff9dc Fix GstVaapiSurface initialization, override constructed() method, not constructor(). GObject C is awful... 2010-03-10 13:02:45 +00:00
gb
5fdc1dc943 Fix GstVaapiDisplay initialization. 2010-03-10 12:25:19 +00:00
gb
0dd58839e1 Get VA image & subpicture formats as GstCaps. 2010-03-10 10:43:31 +00:00
gb
b5548b7efd Add helper to convert from GstVaapiImageFormat to GstCaps. 2010-03-10 10:41:12 +00:00
gb
1689ee112d Cosmetics (drop unused variables). 2010-03-09 12:00:32 +00:00
gb
ffb296984e Shorter code (and more correct). 2010-03-05 10:07:22 +00:00
gb
372e9f5d4d Add helper to get GstVaapiDisplay from a surface. 2010-03-05 10:04:55 +00:00
gb
38b0fe7d57 Fix subpicture formats list length. 2010-03-05 08:52:20 +00:00
gb
0b3d5ddd0c Add utilities to check whether a VA-API driver supports specific image or subpicture format. Likewise for VA profile. 2010-03-04 17:41:34 +00:00
gb
5809b63aaf Cosmetics (more checks, includes). 2010-03-04 17:40:47 +00:00
gb
ee75347973 Really add VA subpicture abstraction. 2010-03-04 17:39:58 +00:00
gb
6f20d84fa3 Add VA surface, image, subpicture abstractions. Ported over from Gnash. 2010-03-04 17:39:01 +00:00
gb
693277e278 Add initial VA display abstraction. 2010-01-25 16:15:01 +00:00
gb
c89e9afc5d Initial import of the gstreamer-vaapi hierarchy. 2010-01-12 15:51:39 +00:00