Home | History | Annotate | Download | only in va
      1 /*
      2  * Copyright (c) 2007-2009 Intel Corporation. All Rights Reserved.
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining a
      5  * copy of this software and associated documentation files (the
      6  * "Software"), to deal in the Software without restriction, including
      7  * without limitation the rights to use, copy, modify, merge, publish,
      8  * distribute, sub license, and/or sell copies of the Software, and to
      9  * permit persons to whom the Software is furnished to do so, subject to
     10  * the following conditions:
     11  *
     12  * The above copyright notice and this permission notice (including the
     13  * next paragraph) shall be included in all copies or substantial portions
     14  * of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     19  * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
     20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     23  */
     24 
     25 /* Wrap a CI (camera imaging) frame as a VA surface to share captured video between camear
     26  * and VA encode. With frame_id, VA driver need to call CI interfaces to get the information
     27  * of the frame, and to determine if the frame can be wrapped as a VA surface
     28  *
     29  * Application should make sure the frame is idle before the frame is passed into VA stack
     30  * and also a vaSyncSurface should be called before application tries to access the frame
     31  * from CI stack
     32  */
     33 #include <va/va.h>
     34 
     35 #ifdef __cplusplus
     36 extern "C" {
     37 #endif
     38 
     39 VAStatus vaCreateSurfaceFromCIFrame (
     40     VADisplay dpy,
     41     unsigned long frame_id,
     42     VASurfaceID *surface	/* out */
     43 );
     44 
     45 VAStatus vaCreateSurfaceFromV4L2Buf(
     46     VADisplay dpy,
     47     int v4l2_fd,         /* file descriptor of V4L2 device */
     48     struct v4l2_format *v4l2_fmt,       /* format of V4L2 */
     49     struct v4l2_buffer *v4l2_buf,       /* V4L2 buffer */
     50     VASurfaceID *surface	/* out */
     51 );
     52 
     53 VAStatus vaPutSurfaceBuf (
     54     VADisplay dpy,
     55     VASurfaceID surface,
     56     unsigned char* data,
     57     int* data_len,
     58     short srcx,
     59     short srcy,
     60     unsigned short srcw,
     61     unsigned short srch,
     62     short destx,
     63     short desty,
     64     unsigned short destw,
     65     unsigned short desth,
     66     VARectangle *cliprects, /* client supplied clip list */
     67     unsigned int number_cliprects, /* number of clip rects in the clip list */
     68     unsigned int flags /* de-interlacing flags */
     69 );
     70 
     71 
     72 /*
     73  * The surfaces could be shared and accessed with extern devices
     74  * which has special requirements, e.g. stride alignment
     75  * This API is used to force libVA video surfaces are allocated
     76  * according to these external requirements
     77  * Special API for V4L2 user pointer support
     78  */
     79 VAStatus vaCreateSurfacesForUserPtr(
     80     VADisplay dpy,
     81     int width,
     82     int height,
     83     int format,
     84     int num_surfaces,
     85     VASurfaceID *surfaces,       /* out */
     86     unsigned size, /* total buffer size need to be allocated */
     87     unsigned int fourcc, /* expected fourcc */
     88     unsigned int luma_stride, /* luma stride, could be width aligned with a special value */
     89     unsigned int chroma_u_stride, /* chroma stride */
     90     unsigned int chroma_v_stride,
     91     unsigned int luma_offset, /* could be 0 */
     92     unsigned int chroma_u_offset, /* UV offset from the beginning of the memory */
     93     unsigned int chroma_v_offset
     94 );
     95 
     96 /*
     97  * Create surface from the Kernel buffer
     98  */
     99 VAStatus vaCreateSurfaceFromKBuf(
    100     VADisplay dpy,
    101     int width,
    102     int height,
    103     int format,
    104     VASurfaceID *surface,       /* out */
    105     unsigned int kbuf_handle, /* kernel buffer handle*/
    106     unsigned size, /* kernel buffer size */
    107     unsigned int kBuf_fourcc, /* expected fourcc */
    108     unsigned int luma_stride, /* luma stride, could be width aligned with a special value */
    109     unsigned int chroma_u_stride, /* chroma stride */
    110     unsigned int chroma_v_stride,
    111     unsigned int luma_offset, /* could be 0 */
    112     unsigned int chroma_u_offset, /* UV offset from the beginning of the memory */
    113     unsigned int chroma_v_offset
    114 );
    115 
    116 
    117 #ifdef __cplusplus
    118 }
    119 #endif
    120