Commit graph

1715 commits

Author SHA1 Message Date
He Junyan
46c8b425dd libs: encoder: Add properties for h264 encoder fei.
Install properties for h264 encoder fei class. Also set the new get/set
property functions for gobject class. Still use the old properties
way now and this new feature will be enabled later.
2019-08-30 18:03:43 +08:00
He Junyan
a65847b2ad libs: encoder: Add properties for h264 fei encoder.
Install properties for h264 fei encoder class. Also set the new get/set
property functions for gobject class. Still use the old properties
way now and this new feature will be enabled later.
2019-08-30 16:59:23 +08:00
He Junyan
30e79a0940 libs: encoder: Add properties for vp9 encoder.
Install properties for vp9 encoder class. Also set the new get/set
property functions for gobject class. Still use the old properties
way now and this new feature will be enabled later.
2019-08-30 16:17:35 +08:00
He Junyan
ba41bcddc6 libs: encoder: Add properties for vp8 encoder.
Install properties for vp8 encoder class. Also set the new get/set
property functions for gobject class. Still use the old properties
way now and this new feature will be enabled later.
2019-08-30 16:13:24 +08:00
He Junyan
8212c0552e libs: encoder: Add properties for mpeg2 encoder.
Install properties for mpeg2 encoder class. Also set the new get/set
property functions for gobject class. Still use the old properties
way now and this new feature will be enabled later.
2019-08-30 14:06:09 +08:00
He Junyan
8641c27a13 libs: encoder: Add properties for jpeg encoder.
Install properties for jpeg encoder class. Also set the new get/set
property functions for gobject class. Still use the old properties
way now and this new feature will be enabled later.
2019-08-30 14:01:23 +08:00
He Junyan
9348ed9e1c libs: encoder: Add properties for h265 encoder.
Install properties for h265 encoder class. Also set the new get/set
property functions for gobject class. Still use the old properties
way now and this new feature will be enabled later.
2019-08-30 13:54:52 +08:00
He Junyan
3468edc20b libs: encoder: Add properties for h264 encoder.
Install properties for h264 encoder class. Also set the new get/set
property functions for gobject class. Still use the old properties
way now and this new feature will be enabled later.
2019-08-30 13:42:54 +08:00
He Junyan
beaf45cc6f libs: encoder: add properties and prop help functions
Add all common properties to encoder base class. rate-control and
tune are moved to sub class.
2019-08-30 13:30:04 +08:00
He Junyan
6978eae21a libs: encoder: delete useless gst_vaapi_encoder_new func.
GstVaapiEncoder is a abstract gobject and never be created directly.
2019-08-30 13:06:50 +08:00
He Junyan
c4a47f91ba lib: encoder: gstobjectfy all vaapi encoders.
Replace all gstvaapiobject in vaapi encoders with standard gstobject.
Let the gstobject common logic to handle all the init and finalize
works. But the property install/set/get still use the old way, need
to be improved later.
2019-08-30 13:05:50 +08:00
He Junyan
51963b1a74 libs: util: Fix a memory leak in config_surface_attributes_get 2019-08-27 01:30:36 +08:00
Víctor Manuel Jáquez Leal
b36eea201f libs: remove context's overlay
The context overlay was an optimization to apply a video composition
to all the surfaces bound to a context.

But since commit 18031dc6 this optimization was disabled, so it is
better just get rid of it.
2019-08-20 17:12:32 +02:00
Víctor Manuel Jáquez Leal
dae057588b libs: remove surface's parent context
In commit 18031dc6 surface's parent context is not assigned because of
circular references. Since then (2013), there's has no issue with
subpictures attached to a context, the current only users of this API.

This patch cleans up all of related code with the unused surface's
parent context.
2019-08-20 17:11:23 +02:00
Víctor Manuel Jáquez Leal
f88d18bebe vaapipostproc: append frame size restrictions in caps 2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
13e369aad6 libs: profilecaps: refactor common code 2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
3ba3966fc3 vaapiencode: enhance how the profile is defined
This code doesn't define the profile used by the internal encoder, but
it used to "predict" which is going to be used and to get the caps
restrictions.

Before the profile was predicted by checking the donwstream caps, but
sometimes they are not defined, setting an unknown profile. In order
to enhances this situation, the encoder asks to internal encoder if it
has one. If so, it is used.

To ask the internal encoder's profile a new accessor function was
added: gst_vaapi_encoder_get_profile()
2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
bd3d347fd7 libs: profilecaps: defines gst_vaapi_profile_caps_append_encoder()
Previously it was just a boilerplate. Now it is real implementation.
2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
ab4ba47bbf libs: utils: treat va_rt_format as bitwise flag
The return value of vaGetConfigAttributes() of VAConfigAttribRTFormat
is a bitwise flag with *all* the supported chroma types.

Previously it was assumed that the return value was a single value,
thus when returning the GST_VAAPI_CHROMA_TYPE_XXX the code was a
simple case. But it is wrong.

This patch changes the case block with a sequence of ifs testing the
bitwise. For now we assume a "priority" list in the testing sequence.
2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
1c73dc969c libs: profile: add gst_vaapi_profile_get_va_name()
gst_vaapi_profile_get_name() returns a proper name for
GstCaps. Nonetheless, there are many profiles which don't have a name
representation for that realm.

gst_vaapi_profile_get_va_name() returns the name of the profile
according to its VAProfile name.

This new funtion is used in the encoder error message.
2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
f7c1ac036d libs: profilecaps: move caps config into a new file
Implement all the appending of frame size restrictions in caps, for
encoders and decoders, in a new source file.
2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
4b5459b1b1 libs: decoder: ref the caps as property 2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
b1e7f974b2 libs: context: add gst_vaapi_context_get_surface_attributes()
This function copies the surface attributes from the context's object
to the caller.
2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
738be524b1 libs: move memory types conversions to gstvaapiutils
And add more supported memory types by current VA.
2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
4851959da8 libs: utils: remove unused function gst_vaapi_get_surface_formats() 2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
6376e7e2bd libs: context, filter: use new surface attributes API 2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
4ba7c9cae0 libs: utils: add gst_vaapi_config_surface_attributes_get()
To extract the surface restrictions per config using a new structure:
GstVaapiConfigSurfaceAttributes
2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
1a5e98fcd2 Split the surface attribute retrieval 2019-08-19 17:26:55 +00:00
Víctor Manuel Jáquez Leal
bcb29e8399 vaapipostproc: handle image-orientation upstream event
Now that vaapipostproc can possible handle video-direction, it
should also handle the image-orientation event from upstream if
video-direction property is set to auto.
2019-08-19 16:48:50 +00:00
Víctor Manuel Jáquez Leal
c06b587819 vaapipostproc: element warning if video direction is unsupported
If the video direction is unsupported by the driver, an element
warning is posted in the bus to notify the application.

gst_vaapi_enum_type_get_nick() was added in the library thus it can
be used elsewhere. It retrives the nick from an enum gtype.
2019-08-19 16:48:49 +00:00
Víctor Manuel Jáquez Leal
47ff72a6d4 libs: filter: check mirror and rotation caps only once
This patch locks the display before querying the pipeline caps and
stores the mirror and rotation capabilities, thus they are not queried
every time the video direction is set.
2019-08-19 16:48:49 +00:00
Víctor Manuel Jáquez Leal
e4bb8f5895 libs: encoder: vp9: set VP9_0 profile as default
Commit 0afc8131 introduced a regression and only NV12 format were
admitted, failing in any other valid color format.

This patch sets the profile to GST_VAAPI_PROFILE_VP9_0 by default.
2019-08-16 19:53:55 +02:00
Víctor Manuel Jáquez Leal
d060582798 libs: filter: fail if first color balance value is invalid 2019-08-16 13:25:06 +02:00
Yan Wang
a48625d7ff libs: filter: set all color balance values
When set multiple settings of color balance like hue, saturation,
brightness and contrast for vaapipostproc, they should be set as
parameters of color balance filter, at the same color balance
filter calling.

Otherwise, multiple color balance filter calling will cause
previous setting get reset by the last calling with default value.

Fixes #182.

Signed-off-by: Yan Wang <yan.wang@linux.intel.com>
2019-08-16 13:10:36 +02:00
Wangfei
b9a6dcd7f2 libs: h265dec: remove limitation of get iq matrix
According hevc spec, scaling_list_data is not related
to chroma_format_idc.
2019-08-16 11:44:00 +08:00
He Junyan
e96a435756 libs: videopool: fix undocumented behavior and counting
gst_vaapi_video_pool_reserve_unlocked() hit an undocumented behavoir
because it locks twice the same mutex.

Also, n had different meanings in the current code: as an increase
value and as a new total of allocated surfaces.

This patche removes the undocumented behavoir (usually a deadlock) and
fixes the meaning of n as the new total of allocated surfaces.

Signed-off-by: Víctor Manuel Jáquez Leal <vjaquez@igalia.com>
2019-08-15 16:08:24 +00:00
He Junyan
5939bf4d81 libs: utils: Add missing entries for string_of_VAEntrypoint. 2019-08-15 17:33:13 +02:00
He Junyan
0afc813123 libs: encoder: Consider vp9 profiles based on input format.
Only support GST_VAAPI_PROFILE_VP9_0 and GST_VAAPI_PROFILE_VP9_2 now.

Fix: #184
2019-08-15 14:54:29 +00:00
Wangfei
9e0c133a24 libs: encoder: h264: support ICQ/QVBR bitrate control mode
ICQ is Intelligent Constant Quality. It will use the initial QP
vaule of icq-quality-factor to adjust QP at MB level intelligently
to improve subjective quality.

QVBR is Quality defined VBR. It will use qvbr-quality-factor to
adjust QP for each MB to get enough quality picture without waste
of bits.
2019-08-05 11:01:19 +08:00
Wangfei
f5c9d86f9c libs: Let GST_VAAPI_RATECONTROL_MASK return unsigned int
The value return from GST_VAAPI_RATECONTROL_MASK will be used by
GST_VAAPI_POPCOUNT32 as its inpput. GST_VAAPI_POPCOUNT32 can only
deal with unsigned int. Otherwise there may be an error of out of
range of integer if we define few more rate-control mode.
2019-08-05 10:51:24 +08:00
Wangfei
8b8dfb127a libs: encoder: h264,h265: add new property "max-qp"
Add new property "max-qp" to allow set the maximum quantisation
parameter values.
2019-07-24 17:07:28 +00:00
Wangfei
daab4c80a3 libs: encoder: vp9: add low power mode encode
By now, this feature only support by media-driver on Ice Lake
platform, more information you can reference:
https://github.com/intel/media-driver
2019-07-16 17:58:33 +00:00
U. Artie Eoff
f1aa0cc5e0 vaapipostproc: add rotation support
Adds vpp rotation support to vaapipostproc.  Uses
property video-direction. Default is identity (no
rotation).

Closes #104
2019-07-09 12:26:46 -07:00
Wangfei
e592f6b415 libs: encoder: h265: pass diff_cu_qp_delta_depth flag to driver
Intel media-driver requires enablement of diff_cu_qp_delta_depth when
cu_qp_delta_enabled_flag enabled.

Fixes: #177
2019-07-07 16:46:25 +02:00
Wangfei
b8739a89b0 libs: encoder: Add MB ratecontrol mode to get its string 2019-07-05 16:56:12 +00:00
Wangfei
66d6754fce libs: encoder: refine guard of bitrate control mode
Remove useless guard of all bitrate control mode's guard except MB
which is define in VA-API version 0.39.1.
2019-07-05 16:56:12 +00:00
Jan Schmidt
1e36478b0f h264: Update for parse_vui_params parameter removal.
Update calls to the h264 parser lib for removal of the
parse_vui_params parameter.
2019-07-04 16:52:18 -04:00
Wang Zhanjun
958ea067cb libs: dec: vp9: do not use display size as decoded size
If display size is smaller than current frame size, then the crop size
will be set as display size, which either crashes the pipeline or the
output MD5 does not match. Rather it should use the actual decoded size.

This patch removes the cropping set. For rendering we can use aspect
ratio to set display size.

Fixes #175

Signed-off-by: Wang Zhanjun <zhanjunx.wang@intel.com>
Signed-off-by: Xu Guangxin <guangxin.xu@intel.com>
2019-06-28 18:42:42 +02:00
He Junyan
9b0f041ded libs: dec: h265: Consider chroma_bit_depth to choose chrome type
For some main-10 stream, sometime the luma is 8 bits while chrome is more
than 8 bits, which cause using the wrong NV12 surface as the render target
and decoding error.

Fix #176
2019-06-28 16:49:51 +02:00
Wangfei
67ed67515b libs: decoder: jpeg: add support 400/411/422/444 chroma type
When create vaapi surface, it is better to use the chroma type get
from jpeg file instead of using fixed 420 format. And the correct
chroma type can be determined by horizontal_factor/vertical_factor
flags that get from jpegparse.
2019-06-26 10:36:56 +00:00