[Libva] [RFC] VA API extension proposals to support encode and post-processing

Li, Xiaowei A xiaowei.a.li at intel.com
Thu Nov 1 19:28:15 PDT 2012


Jonathan, Please ignore my previous email.

We received many libva emails this morning , but actually this mail are sent out in 2011..., 
seem the email sever not works well.

Thanks,
Xiaowei

-----Original Message-----
From: Li, Xiaowei A 
Sent: Friday, November 02, 2012 9:41 AM
To: Bian, Jonathan
Cc: libva at lists.freedesktop.org
Subject: RE: [Libva] [RFC] VA API extension proposals to support encode and post-processing

Hi, Jonathan,
    I am very exciting about your VPP interface proposals!  we are longing for it for quite a long time.  
    I have two questions about AProcFilterType VPP definition:
      1). What's the meaning of "VAProcFilterDering"?
      2). As to " VAProcFilterColorEnhancement" filter, In my opinion, it is a generalized conception, many kinds of enhancement can be covered, such as:
	       a) Spacial domain enhance: pixel enhance, local area enhance...
           b) Frequency domain enhance: high frequency filter, low frequency filter.
       Will we specify more detail information about this filter type in future?

Thanks,
Xiaowei

-----Original Message-----
From: libva-bounces+xiaowei.a.li=intel.com at lists.freedesktop.org [mailto:libva-bounces+xiaowei.a.li=intel.com at lists.freedesktop.org] On Behalf Of Bian, Jonathan
Sent: Tuesday, August 02, 2011 2:14 AM
To: libva at lists.freedesktop.org
Subject: [Libva] [RFC] VA API extension proposals to support encode and post-processing

Hi,

Attached are API extension proposals from Intel to support additional profiles for H.264 encode and video post-processing. The main changes/additions from the existing APIs are described below and comments/feedbacks are appreciated to help with finalizing the API extensions.

Regards,
Jonathan Bian

1. Added new entrypoint for video post-processing 2. Added a number of configuration attributes to accommodate differing capabilities in hardware encoders.
3. Added "Ext" buffer types to extend encode parameters buffers without impacting compatibility with existing encode data structures 4. Added new buffer types for packed header to be sent by the app, and various buffers required for video post-processing 5. Added "Ext" version of sequence, picture and slice parameter buffer structures for H.264 to support High Profile encoding.
6. Added new functions and data structures to support video post-processing (see va_vpp.h).

With this proposal, video post-processing is modeled as a pipeline of connected and configurable processing filters. The existing vaBeginPicture/vaRenderPicture/vaEndPicture semantics is used to perform video post-processing frame by frame, with configuration parameters passed through vaRenderPicture as buffers. For optimal performance, the assumption is made that the implementation will retain the parameter settings affecting the processing pipeline until the application makes explicit modifications of these parameters.  Following is some pseudo code to demonstrate the usage of the video post-processing APIs:

  // find out if post-processing entrypoint is available
  va_status = vaQueryConfigEntrypoints(va_dpy, 
                                        VAProfileNone,
                                        va_entrypoints,
                                        &entrypointsCount);

  if(VAEntrypointVideoProc == va_entrypoints[entrypointsIndx])

  va_status = vaCreateConfig(va_dpy, 
                            VAProfileNone, 
                            VAEntrypointVideoProc,
                            &va_attributes,
                            1,
                            &va_config);

  // create context for post-processing
  va_status = vaCreateContext(va_dpy,...)

  // query pipeline level capabilities
  va_status = vaQueryVideoProcPipelineCap(caps) // for ex: Denoise (DN), DI, sharpening (SHRP), procamp are supported by driver

  // query individual filter capabilities, e.g. parameter value range
  va_status = vaQueryVideoProcFilterCap(dn, caps_dn);
  Va_status = vaQueryVideoProcFilterCap(procamp, caps_procamp);

  While( is_new_input )
  {
    vaBeginPicture(out);

    // setup pipeline parameter (VAProcPipelineParameterBuffer)
    vaRenderPicture(pipeline_param);

    // query reference frame requirements for this pipeline
    vaQueryVideoProcReferenceFrameCap(&forward_ref, &backward_ref);

    // set up input parameter (VAProcInputParameterBuffer)
    vaRenderPicture(input_param); 

    // set up denoise parameters (VAProcFilterBaseParameterBuffer)
    vaRenderPicture(dn_param);

    // set up procamp parameters (VAProcFilterProcAmpParameterBuffer)
    vaRenderPicture(procamp_param);

    vaEndPicture();

    // find out whether processing has completed at some later time
    vaQueryStatus();
}



More information about the Libva mailing list