VA-API
|
Video processing pipeline configuration. More...
#include <va_vpp.h>
Public Attributes | |
VASurfaceID | surface |
Source surface ID. | |
const VARectangle * | surface_region |
Region within the source surface to be processed. | |
VAProcColorStandardType | surface_color_standard |
Requested input color primaries. | |
const VARectangle * | output_region |
Region within the output surface. | |
unsigned int | output_background_color |
Background color. | |
VAProcColorStandardType | output_color_standard |
Requested output color primaries. | |
unsigned int | pipeline_flags |
Pipeline filters. See video pipeline flags. | |
unsigned int | filter_flags |
Extra filter flags. See vaPutSurface() flags. | |
VABufferID * | filters |
Array of filters to apply to the surface. | |
unsigned int | num_filters |
Actual number of filters. | |
VASurfaceID * | forward_references |
Array of forward reference frames. | |
unsigned int | num_forward_references |
Number of forward reference frames that were supplied. | |
VASurfaceID * | backward_references |
Array of backward reference frames. | |
unsigned int | num_backward_references |
Number of backward reference frames that were supplied. |
Video processing pipeline configuration.
This buffer defines a video processing pipeline. As for any buffer passed to vaRenderPicture()
, this is a one-time usage model. However, the actual filters to be applied are provided in the filters
field, so they can be re-used in other processing pipelines.
The target surface is specified by the render_target
argument of vaBeginPicture()
. The general usage model is described as follows:
vaBeginPicture()
: specify the target surface that receives the processed output;vaRenderPicture()
: specify a surface to be processed and composed into the render_target
. Use as many vaRenderPicture()
calls as necessary surfaces to compose ;vaEndPicture()
: tell the driver to start processing the surfaces with the requested filters.If a filter (e.g. noise reduction) needs to be applied with different values for multiple surfaces, the application needs to create as many filter parameter buffers as necessary. i.e. the filter parameters shall not change between two calls to vaRenderPicture()
.
For composition usage models, the first surface to process will generally use an opaque background color, i.e. output_background_color
set with the most significant byte set to 0xff
. For instance, 0xff000000
for a black background. Then, subsequent surfaces would use a transparent background color.
unsigned int VAProcPipelineParameterBuffer::filter_flags |
Extra filter flags. See vaPutSurface() flags.
Filter flags are used as a fast path, wherever possible, to use vaPutSurface() flags instead of explicit filter parameter buffers.
Allowed filter flags API-wise. Use vaQueryVideoProcPipelineCaps() to check for implementation details:
VA_FRAME_PICTURE
, VA_TOP_FIELD
, VA_BOTTOM_FIELD
. Note that any deinterlacing filter (VAProcFilterDeinterlacing) will override those flags.VA_SRC_BT601
, VA_SRC_BT709
, VA_SRC_SMPTE_240
. Note that any color standard filter (VAProcFilterColorStandard) will override those flags.VA_FILTER_SCALING_DEFAULT
, VA_FILTER_SCALING_FAST
, VA_FILTER_SCALING_HQ
, VA_FILTER_SCALING_NL_ANAMORPHIC
. VABufferID* VAProcPipelineParameterBuffer::filters |
Array of filters to apply to the surface.
The list of filters shall be ordered in the same way the driver expects them. i.e. as was returned from vaQueryVideoProcFilters(). Otherwise, a VA_STATUS_ERROR_INVALID_FILTER_CHAIN is returned from vaRenderPicture() with this buffer.
VA_STATUS_ERROR_UNSUPPORTED_FILTER is returned if the list contains an unsupported filter.
Note: no filter buffer is destroyed after a call to vaRenderPicture(), only this pipeline buffer will be destroyed as per the core API specification. This allows for flexibility in re-using the filter for other surfaces to be processed.
Background color.
Background color used to fill in pixels that reside outside of the specified output_region. The color is specified in ARGB format: [31:24] alpha, [23:16] red, [15:8] green, [7:0] blue.
Unless the alpha value is zero or the output_region represents the whole target surface size, implementations shall not render the source surface to the target surface directly. Rather, in order to maintain the exact semantics of output_background_color, the driver shall use a temporary surface and fill it in with the appropriate background color. Next, the driver will blend this temporary surface into the target surface.
const VARectangle* VAProcPipelineParameterBuffer::output_region |
Region within the output surface.
Pointer to a #VARectangle defining the region within the output surface that receives the processed pixels. If NULL, output_region
implies the whole surface.
Note that any pixels residing outside the specified region will be filled in with the output_background_color.
unsigned int VAProcPipelineParameterBuffer::pipeline_flags |
Pipeline filters. See video pipeline flags.
Flags to control the pipeline, like whether to apply subpictures or not, notify the driver that it can opt for power optimizations, should this be needed.
VASurfaceID VAProcPipelineParameterBuffer::surface |
Source surface ID.
ID of the source surface to process. If subpictures are associated with the video surfaces then they shall be rendered to the target surface, if the VA_PROC_PIPELINE_SUBPICTURES pipeline flag is set.
Requested input color primaries.
Color primaries are implicitly converted throughout the processing pipeline. The video processor chooses the best moment to apply this conversion. The set of supported color primaries primaries for input shall be queried with vaQueryVideoProcPipelineCaps().
const VARectangle* VAProcPipelineParameterBuffer::surface_region |
Region within the source surface to be processed.
Pointer to a #VARectangle defining the region within the source surface to be processed. If NULL, surface_region
implies the whole surface.