xref: /aosp_15_r20/external/intel-media-driver/media_softlet/linux/common/vp/ddi/ddi_vp_functions.h (revision ba62d9d3abf0e404f2022b4cd7a85e107f48596f)
1 /*
2 * Copyright (c) 2021-2022, Intel Corporation
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included
12 * in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
21 */
22 //!
23 //! \file     ddi_vp_functions.h
24 //! \brief    ddi vp functions head file
25 //!
26 
27 #ifndef __DDI_VP_FUNCTIONS_H__
28 #define __DDI_VP_FUNCTIONS_H__
29 
30 #include "ddi_media_functions.h"
31 #include "media_libva_common_next.h"
32 #include "vp_common.h"
33 #include "vp_base.h"
34 
35 // Maximum primary surface number in VP
36 #define VP_MAX_PRIMARY_SURFS                1
37 
38 // surface flag : 1 secure;  0 clear
39 #if (VA_MAJOR_VERSION < 1)
40 #define VPHAL_SURFACE_ENCRYPTION_FLAG       0x80000000
41 #else
42 #define VPHAL_SURFACE_ENCRYPTION_FLAG       0x00000001
43 #endif
44 
45 #define DDI_VP_MAX_NUM_FILTERS              VAProcFilterCount     /* Some filters in va_private.h */
46 
47 #if (_DEBUG || _RELEASE_INTERNAL)
48 typedef struct _DDI_VP_DUMP_PARAM
49 {
50     VAProcPipelineParameterBuffer             *pPipelineParamBuffers[VPHAL_MAX_SOURCES] = {};
51     MOS_FORMAT                                SrcFormat[VPHAL_MAX_SOURCES]              = {};
52     MOS_FORMAT                                TargetFormat[VPHAL_MAX_TARGETS]           = {};
53 } DDI_VP_DUMP_PARAM, *PDDI_VP_DUMP_PARAM;
54 #endif //(_DEBUG || _RELEASE_INTERNAL)
55 
56 typedef struct _DDI_VP_FRAMEID_TRACER
57 {
58     MOS_LINUX_BO                       *pLastSrcSurfBo;
59     MOS_LINUX_BO                       *pLastBwdSurfBo;
60 
61     uint32_t                                   uiLastSrcSurfFrameID;
62     uint32_t                                   uiLastBwdSurfFrameID;
63 
64     uint32_t                                   uiFrameIndex;
65 
66     uint32_t                                   uiLastSampleType;
67 } DDI_VP_FRAMEID_TRACER;
68 
69 class DdiCpInterface;
70 class DdiCpInterfaceNext;
71 //core structure for VP DDI
72 typedef struct DDI_VP_CONTEXT
73 {
74     // VPHAL internal structure
75     MOS_CONTEXT                               MosDrvCtx           = {};
76     VpBase                                    *pVpHal             = nullptr;
77     VPHAL_RENDER_PARAMS                       *pVpHalRenderParams = nullptr;
78 
79     DdiCpInterface                            *pCpDdiInterface    = nullptr;
80     DdiCpInterfaceNext                        *pCpDdiInterfaceNext = nullptr;
81 
82     // target surface id
83     VASurfaceID                               TargetSurfID        = 0;
84 
85     // Primary surface number
86     int32_t                                   iPriSurfs           = 0;
87 
88     DDI_VP_FRAMEID_TRACER                     FrameIDTracer       = {};
89 
90 #if (_DEBUG || _RELEASE_INTERNAL)
91     DDI_VP_DUMP_PARAM                         *pCurVpDumpDDIParam = nullptr;
92     DDI_VP_DUMP_PARAM                         *pPreVpDumpDDIParam = nullptr;
93     FILE                                      *fpDumpFile         = nullptr;
94 #endif //(_DEBUG || _RELEASE_INTERNAL)
95 
96 } DDI_VP_CONTEXT, *PDDI_VP_CONTEXT;
97 
98 typedef struct _DDI_VP_STATE
99 {
100     bool      bProcampEnable     = false;
101     bool      bDeinterlaceEnable = false;
102     bool      bDenoiseEnable     = false;
103     bool      bIEFEnable         = false;
104 } DDI_VP_STATE;
105 
106 class DdiVpFunctions :public DdiMediaFunctions
107 {
108 public:
109 
~DdiVpFunctions()110     virtual ~DdiVpFunctions() override{};
111     //!
112     //! \brief  Create context
113     //!
114     //! \param  [in] ctx
115     //!         Pointer to VA driver context
116     //! \param  [in] configId
117     //!         VA config id
118     //! \param  [in] pictureWidth
119     //!         Picture width
120     //! \param  [in] pictureHeight
121     //!         Picture height
122     //! \param  [out] flag
123     //!         Create flag
124     //! \param  [in] renderTargets
125     //!         VA render traget
126     //! \param  [in] renderTargetsNum
127     //!         Number of render targets
128     //! \param  [out] ctxID
129     //!         VA created context
130     //!
131     //! \return VAStatus
132     //!     VA_STATUS_SUCCESS if success, else fail reason
133     //!
134     virtual VAStatus CreateContext (
135         VADriverContextP  ctx,
136         VAConfigID        configId,
137         int32_t           pictureWidth,
138         int32_t           pictureHeight,
139         int32_t           flag,
140         VASurfaceID       *renderTargets,
141         int32_t           renderTargetsNum,
142         VAContextID       *ctxID
143     ) override;
144 
145     //!
146     //! \brief  Destroy context
147     //!
148     //! \param  [in] ctx
149     //!         Pointer to VA driver context
150     //! \param  [in] ctxID
151     //!         VA context to destroy
152     //!
153     //! \return VAStatus
154     //!     VA_STATUS_SUCCESS if success, else fail reason
155     //!
156     virtual VAStatus DestroyContext (
157         VADriverContextP  ctx,
158         VAContextID       ctxID
159     ) override;
160 
161     //!
162     //! \brief  Create buffer
163     //!
164     //! \param  [in] ctx
165     //!         Pointer to VA driver context
166     //! \param  [in] context
167     //!         VA context id
168     //! \param  [in] type
169     //!         VA buffer type
170     //! \param  [in] size
171     //!         Buffer size
172     //! \param  [out] elementsNum
173     //!         Number of elements
174     //! \param  [in] data
175     //!         Buffer data
176     //! \param  [out] bufId
177     //!         VA buffer id
178     //!
179     //! \return VAStatus
180     //!     VA_STATUS_SUCCESS if success, else fail reason
181     //!
182     virtual VAStatus CreateBuffer (
183         VADriverContextP  ctx,
184         VAContextID       context,
185         VABufferType      type,
186         uint32_t          size,
187         uint32_t          elementsNum,
188         void              *data,
189         VABufferID        *bufId
190     ) override;
191 
192     //! \param  [in] mediaCtx
193     //!         Pointer to media context
194     //! \param  [in] bufId
195     //!         VA buffer ID
196     //! \param  [out] buf
197     //!         Pointer to buffer
198     //! \param  [in] flag
199     //!         Flag
200     //!
201     //! \return VAStatus
202     //!     VA_STATUS_SUCCESS if success, else fail reason
203     //!
204     virtual VAStatus MapBufferInternal(
205         PDDI_MEDIA_CONTEXT  mediaCtx,
206         VABufferID          bufId,
207         void                **buf,
208         uint32_t            flag
209     ) override;
210 
211     //! \brief  Unmap buffer
212     //!
213     //! \param  [in] mediaCtx
214     //!     Pointer to media context
215     //! \param  [in] bufId
216     //!     VA buffer ID
217     //!
218     //! \return VAStatus
219     //!     VA_STATUS_SUCCESS if success, else fail reason
220     //!
221     virtual VAStatus UnmapBuffer (
222         PDDI_MEDIA_CONTEXT mediaCtx,
223         VABufferID         bufId
224     )override;
225 
226     //!
227     //! \brief  Destroy buffer
228     //!
229     //! \param  [in] mediaCtx
230     //!     Pointer to media context
231     //! \param  [in] bufId
232     //!     VA buffer ID
233     //!
234     //! \return     VAStatus
235     //!     VA_STATUS_SUCCESS if success, else fail reason
236     //!
237     virtual VAStatus DestroyBuffer(
238         DDI_MEDIA_CONTEXT  *mediaCtx,
239         VABufferID         bufId
240     )override;
241 
242     //!
243     //! \brief  Get ready to decode a picture to a target surface
244     //!
245     //! \param  [in] ctx
246     //!         Pointer to VA driver context
247     //! \param  [in] context
248     //!         VA context id
249     //! \param  [in] renderTarget
250     //!         VA render target surface
251     //!
252     //! \return VAStatus
253     //!     VA_STATUS_SUCCESS if success, else fail reason
254     //!
255     virtual VAStatus BeginPicture (
256         VADriverContextP  ctx,
257         VAContextID       context,
258         VASurfaceID       renderTarget
259     ) override;
260 
261     //!
262     //! \brief  Send decode buffers to the server
263     //! \details    Buffers are automatically destroyed afterwards
264     //! \param  [in] ctx
265     //!         Pointer to VA driver context
266     //! \param  [in] context
267     //!         VA buffer id
268     //! \param  [in] buffer
269     //!         Pointer to VA buffer id
270     //! \param  [in] buffersNum
271     //!         number of buffers
272     //!
273     //! \return VAStatus
274     //!     VA_STATUS_SUCCESS if success, else fail reason
275     //!
276     virtual VAStatus RenderPicture (
277         VADriverContextP  ctx,
278         VAContextID       context,
279         VABufferID        *buffers,
280         int32_t           buffersNum
281     ) override;
282 
283     //!
284     //! \brief  Make the end of rendering for a picture
285     //! \details    The server should start processing all pending operations for this
286     //!             surface. This call is non-blocking. The client can start another
287     //!             Begin/Render/End sequence on a different render target
288     //! \param  [in] ctx
289     //!         Pointer to VA driver context
290     //! \param  [in] context
291     //!         VA buffer id
292     //!
293     //! \return VAStatus
294     //!     VA_STATUS_SUCCESS if success, else fail reason
295     //!
296     virtual VAStatus EndPicture (
297         VADriverContextP  ctx,
298         VAContextID       context
299     ) override;
300 
301     //!
302     //! \brief  Create a configuration for the encode/decode/vp pipeline
303     //! \details    it passes in the attribute list that specifies the attributes it cares
304     //!             about, with the rest taking default values.
305     //!
306     //! \param  [in] ctx
307     //!         Pointer to VA driver context
308     //! \param  [in] profile
309     //!         VA profile of configuration
310     //! \param  [in] entrypoint
311     //!         VA entrypoint of configuration
312     //! \param  [out] attribList
313     //!         VA attrib list
314     //! \param  [out] attribsNum
315     //!         Number of attribs
316     //! \param  [out] configId
317     //!         VA config id
318     //!
319     //! \return VAStatus
320     //!     VA_STATUS_SUCCESS if success, else fail reason
321     //!
322     virtual VAStatus CreateConfig (
323         VADriverContextP  ctx,
324         VAProfile         profile,
325         VAEntrypoint      entrypoint,
326         VAConfigAttrib    *attribList,
327         int32_t           attribsNum,
328         VAConfigID        *configId
329     ) override;
330 
331     //!
332     //! \brief  Query video proc filters
333     //!
334     //! \param  [in] ctx
335     //!         Pointer to VA driver context
336     //! \param  [in] context
337     //!         VA context ID
338     //! \param  [in] filters
339     //!         VA proc filter type
340     //! \param  [in] filtersNum
341     //!         Number of filters
342     //!
343     //! \return VAStatus
344     //!     VA_STATUS_SUCCESS if success, else fail reason
345     //!
346     virtual VAStatus QueryVideoProcFilters (
347         VADriverContextP  ctx,
348         VAContextID       context,
349         VAProcFilterType  *filters,
350         uint32_t          *filtersNum
351     ) override;
352 
353     //!
354     //! \brief  Query video processing filter capabilities.
355     //!         The real implementation is in media_libva_vp.c, since it needs to use some definitions in vphal.h.
356     //!
357     //! \param  [in] ctx
358     //!         Pointer to VA driver context
359     //! \param  [in] context
360     //!         VA context ID
361     //! \param  [in] type
362     //!         VA proc filter type
363     //! \param  [inout] filterCaps
364     //!         FIlter caps
365     //! \param  [inout] filterCapsNum
366     //!         Number of filter caps
367     //!
368     //! \return VAStatus
369     //!     VA_STATUS_SUCCESS if success, else fail reason
370     //!
371     virtual VAStatus QueryVideoProcFilterCaps (
372         VADriverContextP  ctx,
373         VAContextID       context,
374         VAProcFilterType  type,
375         void              *filterCaps,
376         uint32_t          *filterCapsNum
377     ) override;
378 
379     //!
380     //! \brief  Query video proc pipeline caps
381     //!
382     //! \param  [in] ctx
383     //!         Pointer to VA driver context
384     //! \param  [in] context
385     //!         VA context ID
386     //! \param  [in] filters
387     //!         VA buffer ID
388     //! \param  [in] filtersNum
389     //!         Number of filters
390     //! \param  [in] pipelineCaps
391     //!         VA proc pipeline caps
392     //!
393     //! \return VAStatus
394     //!     VA_STATUS_SUCCESS if success, else fail reason
395     //!
396     virtual VAStatus QueryVideoProcPipelineCaps (
397         VADriverContextP    ctx,
398         VAContextID         context,
399         VABufferID          *filters,
400         uint32_t            filtersNum,
401         VAProcPipelineCaps  *pipelineCaps
402     ) override;
403 
404     virtual VAStatus StatusCheck(
405         PDDI_MEDIA_CONTEXT mediaCtx,
406         DDI_MEDIA_SURFACE  *surface,
407         VASurfaceID        surfaceId
408     ) override;
409 
410     virtual VAStatus ProcessPipeline(
411         VADriverContextP    vaDrvCtx,
412         VAContextID         ctxID,
413         VASurfaceID         srcSurface,
414         VARectangle         *srcRect,
415         VASurfaceID         dstSurface,
416         VARectangle         *dstRect
417     ) override;
418 
419     virtual VAStatus PutSurface(
420         VADriverContextP ctx,
421         VASurfaceID      surface,
422         void             *draw,
423         int16_t          srcx,
424         int16_t          srcy,
425         uint16_t         srcw,
426         uint16_t         srch,
427         int16_t          destx,
428         int16_t          desty,
429         uint16_t         destw,
430         uint16_t         desth,
431         VARectangle      *cliprects,
432         uint32_t         numberCliprects,
433         uint32_t         flags
434     ) override;
435 
436     //!
437     //! \brief Extract VAProcPipelineParameterBuffer params and set the appropriate VPHAL params
438     //!
439     //! \param [in]  vaDrvCtx
440     //!        VA Driver context
441     //! \param [in]  vpCtx
442     //!        VP context
443     //! \param [in]  pipelineParam
444     //!        Pipeline params from application (VAProcPipelineParameterBuffer)
445     //!
446     //! \returns VA_STATUS_SUCCESS if call succeeds
447     //!
448     VAStatus DdiSetProcPipelineParams(
449         VADriverContextP               vaDrvCtx,
450         PDDI_VP_CONTEXT                vpCtx,
451         VAProcPipelineParameterBuffer  *pipelineParam);
452 
453 private:
454     //!
455     //! \brief  Helper function for VpAllocateDrvCtxExt to Allocate PDDI_VP_CONTEXT
456     //!
457     //! \param  [in] vaDrvCtx
458     //!         Pointer to VA driver context
459     //! \param  [in] vpCtx
460     //!          VP context
461     //!
462     //! \return VAStatus
463     //! VA_STATUS_SUCCESS if succeeds, else fail reason
464     VAStatus DdiInitCtx(
465         VADriverContextP vaDrvCtx,
466         PDDI_VP_CONTEXT  vpCtx);
467 
468     //!
469     //! \brief  Free VPHAL Driver render params resources
470     //!
471     //! \param  [in] vpCtx
472     //!          VP context
473     //! \param  [in] vpHalRenderParams
474     //!         vphal render params
475     //! \return
476     //!
477     void FreeVpHalRenderParams(
478         PDDI_VP_CONTEXT      vpCtx,
479         PVPHAL_RENDER_PARAMS vpHalRenderParams);
480 
481     //!
482     //! \brief  Initialize VPHAL State and VPHAL settings per VP context
483     //!
484     //! \param  [in] vpCtx
485     //!          VP context
486     //!
487     //! \return VAStatus
488     //! VA_STATUS_SUCCESS if succeeds, else fail reason
489     VAStatus DdiInitVpHal(PDDI_VP_CONTEXT vpCtx);
490 
491     //!
492     //! \brief  Destroy VPHAL driver context
493     //!
494     //! \param  [in] vpCtx
495     //!          VP context
496     //!
497     //! \return VAStatus
498     //! VA_STATUS_SUCCESS if succeeds, else fail reason
499     VAStatus DdiDestroyVpHal(PDDI_VP_CONTEXT vpCtx);
500 
501     //!
502     //! \brief  Destroy VPHAL driver render params
503     //!
504     //! \param  [in] vpCtx
505     //!          VP context
506     //!
507     //! \return VAStatus
508     //! VA_STATUS_SUCCESS if succeeds, else fail reason
509     VAStatus DdiDestroyRenderParams(PDDI_VP_CONTEXT vpCtx);
510 
511     //!
512     //! \brief  Destroy VPHAL driver source params
513     //!
514     //! \param  [in] vpCtx
515     //!          VP context
516     //!
517     //! \return VAStatus
518     //! VA_STATUS_SUCCESS if succeeds, else fail reason
519     VAStatus DdiDestroySrcParams(PDDI_VP_CONTEXT vpCtx);
520 
521     //!
522     //! \brief  Destroy VPHAL driver reference params
523     //!
524     //! \param  [in] vpCtx
525     //!          VP context
526     //!
527     //! \return VAStatus
528     //! VA_STATUS_SUCCESS if succeeds, else fail reason
529     VAStatus DdiDestroyVpHalSurface(PVPHAL_SURFACE surf);
530 
531     //!
532     //! \brief  Destroy VPHAL driver target params
533     //!
534     //! \param  [in] vpCtx
535     //!          VP context
536     //!
537     //! \return VAStatus
538     //! VA_STATUS_SUCCESS if succeeds, else fail reason
539     VAStatus DdiDestroyTargetParams(PDDI_VP_CONTEXT vpCtx);
540 
541     //!
542     //! \brief  Query video processing Noise reduction filter caps.
543     //!
544     //! \param  [in] queryFlag
545     //!         QUERY_CAPS_ATTRIBUTE: search caps attribute
546     //! \param  [in] queryCapsNum
547     //!         The filter caps number queried by app layer
548     //! \param  [in] existCapsNum
549     //!         The actual number of filters in vp module
550     //! \param  [inout] filterCaps
551     //!         FIlter caps
552     //!
553     //! \return VAStatus
554     //!     VA_STATUS_SUCCESS if success, else fail reason
555     //!
556     VAStatus QueryNoiseReductionCapsAttrib(
557         uint32_t queryFlag,
558         uint32_t queryCapsNum,
559         uint32_t existCapsNum,
560         void     *filterCaps);
561 
562     //!
563     //! \brief  Query video processing Deinterlacing filter caps.
564     //!
565     //! \param  [in] queryFlag
566     //!         QUERY_CAPS_ATTRIBUTE: search caps attribute
567     //! \param  [in] queryCapsNum
568     //!         The filter caps number queried by app layer
569     //! \param  [in] existCapsNum
570     //!         The actual number of filters in vp module
571     //! \param  [inout] filterCaps
572     //!         FIlter caps
573     //!
574     //! \return VAStatus
575     //!     VA_STATUS_SUCCESS if success, else fail reason
576     //!
577     VAStatus QueryDeinterlacingCapsAttrib(
578         uint32_t queryFlag,
579         uint32_t queryCapsNum,
580         uint32_t existCapsNum,
581         void     *filterCaps);
582 
583     //!
584     //! \brief  Query video processing Sharpening filter caps.
585     //!
586     //! \param  [in] queryFlag
587     //!         QUERY_CAPS_ATTRIBUTE: search caps attribute
588     //! \param  [in] queryCapsNum
589     //!         The filter caps number queried by app layer
590     //! \param  [in] existCapsNum
591     //!         The actual number of filters in vp module
592     //! \param  [inout] filterCaps
593     //!         FIlter caps
594     //!
595     //! \return VAStatus
596     //!     VA_STATUS_SUCCESS if success, else fail reason
597     //!
598     VAStatus QuerySharpeningCapsAttrib(
599         uint32_t queryFlag,
600         uint32_t queryCapsNum,
601         uint32_t existCapsNum,
602         void     *filterCaps);
603 
604     //!
605     //! \brief  Query video processing Color balance filter caps.
606     //!
607     //! \param  [in] queryFlag
608     //!         QUERY_CAPS_ATTRIBUTE: search caps attribute
609     //! \param  [in] queryCapsNum
610     //!         The filter caps number queried by app layer
611     //! \param  [in] existCapsNum
612     //!         The actual number of filters in vp module
613     //! \param  [inout] filterCaps
614     //!         FIlter caps
615     //!
616     //! \return VAStatus
617     //!     VA_STATUS_SUCCESS if success, else fail reason
618     //!
619     VAStatus QueryColorBalanceCapsAttrib(
620         uint32_t queryFlag,
621         uint32_t queryCapsNum,
622         uint32_t existCapsNum,
623         void     *filterCaps);
624 
625     //!
626     //! \brief  Query video processing SkinToneEnhancement filter caps.
627     //!
628     //! \param  [in] queryFlag
629     //!         QUERY_CAPS_ATTRIBUTE: search caps attribute
630     //! \param  [in] queryCapsNum
631     //!         The filter caps number queried by app layer
632     //! \param  [in] existCapsNum
633     //!         The actual number of filters in vp module
634     //! \param  [inout] filterCaps
635     //!         FIlter caps
636     //!
637     //! \return VAStatus
638     //!     VA_STATUS_SUCCESS if success, else fail reason
639     //!
640     VAStatus QuerySkinToneEnhancementCapsAttrib(
641         uint32_t queryFlag,
642         uint32_t queryCapsNum,
643         uint32_t existCapsNum,
644         void     *filterCaps);
645 
646     //!
647     //! \brief  Query video processing TotalColorCorrection filter caps.
648     //!
649     //! \param  [in] queryFlag
650     //!         QUERY_CAPS_ATTRIBUTE: search caps attribute
651     //! \param  [in] queryCapsNum
652     //!         The filter caps number queried by app layer
653     //! \param  [in] existCapsNum
654     //!         The actual number of filters in vp module
655     //! \param  [inout] filterCaps
656     //!         FIlter caps
657     //!
658     //! \return VAStatus
659     //!     VA_STATUS_SUCCESS if success, else fail reason
660     //!
661     VAStatus QueryTotalColorCorrectionCapsAttrib(
662         uint32_t queryFlag,
663         uint32_t queryCapsNum,
664         uint32_t existCapsNum,
665         void     *filterCaps);
666 
667     //!
668     //! \brief  Query video processing HDR filter caps.
669     //!
670     //! \param  [in] queryFlag
671     //!         QUERY_CAPS_ATTRIBUTE: search caps attribute
672     //! \param  [in] queryCapsNum
673     //!         The filter caps number queried by app layer
674     //! \param  [in] existCapsNum
675     //!         The actual number of filters in vp module
676     //! \param  [inout] filterCaps
677     //!         FIlter caps
678     //!
679     //! \return VAStatus
680     //!     VA_STATUS_SUCCESS if success, else fail reason
681     //!
682     VAStatus QueryHDRToneMappingCapsAttrib(
683         uint32_t            queryFlag,
684         uint32_t            queryCapsNum,
685         uint32_t            existCapsNum,
686         void                *filterCaps);
687 
688     //!
689     //! \brief  Query video processing 3Dlut filter caps.
690     //!
691     //! \param  [in] queryFlag
692     //!         QUERY_CAPS_ATTRIBUTE: search caps attribute
693     //! \param  [in] queryCapsNum
694     //!         The filter caps number queried by app layer
695     //! \param  [in] existCapsNum
696     //!         The actual number of filters in vp module
697     //! \param  [inout] filterCaps
698     //!         FIlter caps
699     //!
700     //! \return VAStatus
701     //!     VA_STATUS_SUCCESS if success, else fail reason
702     //!
703     VAStatus QueryLut3DCapsAttrib(
704         uint32_t            queryFlag,
705         uint32_t            queryCapsNum,
706         uint32_t            existCapsNum,
707         void                *filterCaps);
708 
709     //! \brief Get the render parameters from Va Driver Context.
710     //!
711     //! \params [in] vpCtx
712     //!         VP context
713     //!
714     //! \returns Pointer of render parameters
715     //!
716     PVPHAL_RENDER_PARAMS VpGetRenderParams(PDDI_VP_CONTEXT vpCtx);
717 
718     //! \brief  Get resource informaton from target surface, set OS Resource for VPHAL
719     //!
720     //! \params [in] pVpCtx
721     //!         VP context
722     //! \params [in] boRt
723     //!         media surface
724     //! \params [in] targetIndex
725     //!         index of target surface in VpHal RenderParams.
726     //!
727     //! \returns: Result of operation
728     //!
729     VAStatus VpSetOsResource(PDDI_VP_CONTEXT vpCtx, PDDI_MEDIA_SURFACE boRt, uint32_t targetIndex);
730 
731     //! \brief  Set Render Params for VPHAL
732     //!
733     //! \params [in] mediaSurf
734     //!         media surface
735     //! \params [inout] vpHalRenderParams
736     //!         PVPHAL_RENDER_PARAMS.
737     //! \params [in] renderTarget
738     //!         surface ID.
739     //!
740     void VpSetRenderParams(
741         PDDI_MEDIA_SURFACE    mediaSurf,
742         PVPHAL_RENDER_PARAMS  vpHalRenderParams,
743         VASurfaceID           renderTarget);
744 
745     //! \brief judge whether the pitch size match 16aligned usrptr path require or not
746     //!
747     //! \params [in] pitch
748     //!         surface pitch size.
749     //! \params [in] format
750     //!         surface foramt
751     //! \returns true if matched
752     //! for YV12 format, if pitch aligned with 128, go legacy path; if aligned with 16/32/64, go 16usrptr path
753     //! for other formats, legcy path for aligned with 64, 16usrpt path for aligned with 16/32
754     //!
755     bool VpIs16UsrPtrPitch(uint32_t pitch, DDI_MEDIA_FORMAT format);
756 
757     //!
758     //! \brief   dump feature mode parameters for Android
759     //!
760     //! \param   [in] vpCtx
761     //!          vp context
762     //! \return  VAStatus
763     //!          return VA_STATUS_SUCCESS if params is dumped to file.
764     //!
765     VAStatus VpReportFeatureMode(PDDI_VP_CONTEXT vpCtx);
766 
767     //!
768     //! \brief  initialize configuration values for Android
769     //!
770     //! \param  [in] configValues
771     //!          vp config values
772     //!
773     void VpConfigValuesInit(PVP_CONFIG  configValues);
774 
775     //!
776     //! \brief    Report mode of different features
777     //!
778     //! \param    [in] vpHalState
779     //!           VPHAL state pointer
780     //! \param    [inout] configValues
781     //!           Porinter to configuration report value structure,
782     //!           feature modes will be store in this structure.
783     //! \return   void
784     //!
785     void VpHalDdiReportFeatureMode(
786         VpBase                 *vpHalState,
787         PVP_CONFIG             configValues);
788 
789     //!
790     //! \brief   dump config values for Android
791     //!
792     //! \param   [in] config
793     //!          vp config values
794     //!
795     void VpFeatureReport(PVP_CONFIG config, PDDI_VP_CONTEXT vpCtx);
796 
797     //!
798     //! \purpose judge whether the PipelineParam buffer is for target or not
799     //!
800     //! \param  [in] vaDrvCtx
801     //!         VA Driver context
802     //! \param  [in] vpCtx
803     //!          VP context
804     //! \param  [in] pipelineParam
805     //!         Pipeline parameters from application (VAProcPipelineParameterBuffer)
806     //!
807     //! \returns VA_STATUS_SUCCESS if call succeeds
808     //!
809     bool VpIsRenderTarget(
810         VADriverContextP              vaDrvCtx,
811         PDDI_VP_CONTEXT               vpCtx,
812         VAProcPipelineParameterBuffer *pipelineParam);
813 
814     VAStatus DdiSetGpuPriority(
815         PDDI_VP_CONTEXT     vpCtx,
816         int32_t             priority);
817 
818     //!
819     //! \brief Extract VAProcPipelineParameterBuffer params for target surface and set the appropriate VPHAL params
820     //!
821     //! \param  [in] vaDrvCtx
822     //!         VA Driver context
823     //! \param  [in] vpCtx
824     //!         VP context
825     //! \param  [in] pipelineParam
826     //!         Pipeline parameters from application (VAProcPipelineParameterBuffer)
827     //!
828     //! \returns VA_STATUS_SUCCESS if call succeeds
829     //!
830     VAStatus VpSetRenderTargetParams(
831         VADriverContextP               vaDrvCtx,
832         PDDI_VP_CONTEXT                vpCtx,
833         VAProcPipelineParameterBuffer  *pipelineParam);
834 
835     //!
836     //! \brief Set Color Standard Explictly.
837     //!
838     //! \param  [in]  vpHalSurf
839     //!         src/target surface
840     //! \param  [in]  colorStandard
841     //!         VA color standard VAProcColorStandardType
842     //! \param  [in]  colorProperties
843     //!         input/output surface color properties
844     //! \returns appropriate VA_STATUS_SUCCESS if call succeeds
845     //!
846     VAStatus VpSetColorStandardExplictly(
847         PVPHAL_SURFACE          vpHalSurf,
848         VAProcColorStandardType colorStandard,
849         VAProcColorProperties   colorProperties);
850 
851     //!
852     //! \brief // Set colorspace by default to avoid application don't set ColorStandard
853     //!
854     //! \param  [in]  vpHalSurf
855     //!         src/target surface
856     //!
857     void VpSetColorSpaceByDefault(PVPHAL_SURFACE  vpHalSurf);
858 
859     //!
860     //! \brief Set Color Space according to ColorStandard.
861     //!
862     //! \param  [in]  vpHalSurf
863     //!         src/target surface
864     //! \param  [in]  colorStandard
865     //!         VA color standard VAProcColorStandardType
866     //! \param  [in]  colorProperties
867     //!         input/output surface color properties
868     //! \returns
869     //!
870     void VpSetColorSpaceByColorStandard(
871         PVPHAL_SURFACE          vpHalSurf,
872         VAProcColorStandardType colorStandard,
873         VAProcColorProperties   colorProperties,
874         uint8_t                 colorRange);
875 
876     //!
877     //! \brief Set Color Space according to ColorStandard.
878     //!
879     //! \param  [in]  vpCtx
880     //!         vp context
881     //! \param  [in]  srcSurf
882     //!         vphal surface
883     //! \returns
884     //!
885     void SetFrameID(PDDI_VP_CONTEXT vpCtx, PVPHAL_SURFACE srcSurf);
886 
887     //!
888     //! \brief update sample type
889     //!
890     //! \param  [in]  srcSurf
891     //!         vphal surface
892     //! \param  [in]  flags
893     //!         Deinterlacing flags
894     //! \returns
895     //!
896     void UpdateSampleType(
897         PVPHAL_SURFACE srcSurf,
898         uint32_t       flags);
899 
900     //!
901     //! \brief  Set src surface rect
902     //!
903     //! \param  [inout] surfaceRegion
904     //!         pointed to src rect
905     //! \param  [in] vpHalTgtSurf
906     //!         pointed to vphal surface
907     //! \param  [in] mediaSrcSurf
908     //!         pointed to media surface
909     //!
910     void SetSrcRect(
911         const VARectangle  *surfaceRegion,
912         PVPHAL_SURFACE     vpHalTgtSurf,
913         PDDI_MEDIA_SURFACE mediaSrcSurf);
914 
915     //!
916     //! \brief  Set dest surface rect
917     //!
918     //! \param  [inout] surfaceRegion
919     //!         pointed to dest rect
920     //! \param  [in] vpHalTgtSurf
921     //!         pointed to vphal surface
922     //! \param  [in] mediaSrcSurf
923     //!         pointed to media surface
924     //!
925     void SetDestRect(
926         const VARectangle  *surfaceRegion,
927         PVPHAL_SURFACE     vpHalTgtSurf,
928         PDDI_MEDIA_SURFACE mediaSrcSurf);
929 
930     //!
931     //! \brief   Check whether there is only Procamp with adjusting Brightness
932     //! \params  [in]  vpHalSrcSurf
933     //!          pointed to vphal surfeca
934     //!
935     //! \returns true if call succeeds
936     //!
937     bool IsProcmpEnable(PVPHAL_SURFACE vpHalSrcSurf);
938 
939     //!
940     //! \brief  Map Chroma Sitting flags to appropriate VPHAL chroma sitting params
941     //!
942     //! \param  [in] vpHalSurf
943     //!         pointed to vphal surface
944     //! \param  [in] chromasitingState
945     //!         chromasiting State
946     //! \returns VA_STATUS_SUCCESS if call succeeds
947     //!
948     VAStatus VpUpdateProcChromaSittingState(
949         PVPHAL_SURFACE vpHalSurf,
950         uint8_t        chromasitingState);
951 
952     //!
953     //! \brief  Set src surface rect
954     //!
955     //! \param  [inout] surfaceRegion
956     //!         pointed to src rect
957     //! \param  [in] vpHalTgtSurf
958     //!         pointed to vphal surface
959     //! \param  [in] mediaSrcSurf
960     //!         pointed to media surface
961     //!
962     void SetSrcSurfaceRect(
963         const VARectangle  *surfRegion,
964         PVPHAL_SURFACE     vpHalSrcSurf,
965         PDDI_MEDIA_SURFACE mediaSrcSurf);
966 
967     //!
968     //! \brief  Set dest surface rect
969     //!
970     //! \param  [inout] outputRegion
971     //!         pointed to dest rect
972     //! \param  [in] vpHalTgtSurf
973     //!         pointed to src vphal surface
974     //! \param  [in] mediaSrcSurf
975     //!         pointed to tgt vphal surface
976     //!
977     VAStatus SetDestSurfaceRect(
978         const VARectangle *outputRegion,
979         PVPHAL_SURFACE    vpHalSrcSurf,
980         PVPHAL_SURFACE    vpHalTgtSurf);
981 
982     //! \brief Convert VAProcColorStandardType to VPHAL_CSPACE
983     //!
984     //! \param [in]  vpHalSurf
985     //!        src/target surface
986     //! \param [in]  colorStandard
987     //!        VA color standard VAProcColorStandardType
988     //! \param [in]  flag
989     //!        input/output surface flag for full/reduced color range
990     //! \returns appropriate VPHAL_CSPACE if call succeeds
991     //!
992 #if (VA_MAJOR_VERSION < 1)
993     VAStatus DdiGetColorSpace(
994         PVPHAL_SURFACE          vpHalSurf,
995         VAProcColorStandardType colorStandard,
996         uint32_t                flag);
997 #else
998     VAStatus DdiGetColorSpace(
999         PVPHAL_SURFACE          vpHalSurf,
1000         VAProcColorStandardType colorStandard,
1001         VAProcColorProperties   colorProperties);
1002 #endif
1003 
1004     //!
1005     //! \brief  Set background color for pipiline params
1006     //!
1007     //! \param  [in]  vpHalRenderParams
1008     //!         pointer to  PVPHAL_RENDER_PARAMS
1009     //! \param  [in]  outBackGroundcolor
1010     //!         output background color
1011     //!
1012     VAStatus SetBackgroundColorfill(
1013         PVPHAL_RENDER_PARAMS vpHalRenderParams,
1014         uint32_t             outBackGroundcolor);
1015 
1016     //!
1017     //! \brief  Set up split screen demo mode
1018     //! \param  [in] splitDemoPosDdi
1019     //!         split demo position setting from DDI layer
1020     //! \param  [in] splitDemoParaDdi
1021     //!         split demo parameters setting from DDI layer
1022     //! \param  [inout] splitScreenDemoModeParams
1023     //!         pointer to struct for split-screen demo mode parameters
1024     //! \param  [inout] disableDemoMode
1025     //!         return whether demo mode will be disable or not
1026     //! \param  [in] osInterface
1027     //!         pointer to MOS INTERFACE for OS interaction
1028     //! \return MOS_STATUS
1029     //!
1030     MOS_STATUS VpHalDdiSetupSplitScreenDemoMode(
1031         uint32_t                             splitDemoPosDdi,
1032         uint32_t                             splitDemoParaDdi,
1033         PVPHAL_SPLIT_SCREEN_DEMO_MODE_PARAMS *splitScreenDemoModeParams,
1034         bool                                 *disableDemoMode,
1035         PMOS_INTERFACE                       osInterface);
1036 
1037     //!
1038     //! \brief Update the future reference frames for VPHAL input surface
1039     //! \param  [in]  vpCtx
1040     //!         VP context
1041     //! \param  [in]  vaDrvCtx
1042     //!         VA Driver context
1043     //! \param  [in]  vpHalSrcSurf
1044     //!         VpHal source surface
1045     //! \param  [in]  pipelineParam
1046     //!         Pipeline parameter from application (VAProcPipelineParameterBuffer)
1047     //!
1048     //! \returns VA_STATUS_SUCCESS if call succeeds
1049     //!
1050     VAStatus DdiUpdateProcPipelineFutureReferenceFrames(
1051         PDDI_VP_CONTEXT                vpCtx,
1052         VADriverContextP               vaDrvCtx,
1053         PVPHAL_SURFACE                 vpHalSrcSurf,
1054         VAProcPipelineParameterBuffer  *pipelineParam);
1055 
1056     //!
1057     //! \brief Update the past reference frames for VPHAL input surface
1058     //!
1059     //! \param [in]  vpCtx
1060     //!        VP context
1061     //! \param [in]  vaDrvCtx
1062     //!        VA Driver context
1063     //! \param [in]  vpHalSrcSurf
1064     //!        VpHal source surface
1065     //! \param [in]  pipelineParam
1066     //!        Pipeline parameter from application (VAProcPipelineParameterBuffer)
1067     //! \returns VA_STATUS_SUCCESS if call succeeds
1068     //!
1069     VAStatus DdiUpdateProcPipelinePastReferenceFrames(
1070         PDDI_VP_CONTEXT               vpCtx,
1071         VADriverContextP              vaDrvCtx,
1072         PVPHAL_SURFACE                vpHalSrcSurf,
1073         VAProcPipelineParameterBuffer *pipelineParam);
1074 
1075     //!
1076     //! \brief Setup the appropriate filter params for VPHAL input surface based on Filter type
1077     //! \param  [in] vaDrvCtx
1078     //!         Driver context
1079     //! \param  [in]  vpCtx
1080     //!         VP context
1081     //! \param  [in]  surfIndex
1082     //!         surfIndex to the input surface array
1083     //! \param  [in]  filterType
1084     //!         Filter type
1085     //! \param  [in]  data
1086     //!         Buffer data
1087     //! \param  [in]  elementNum
1088     //!         number of elements in the buffer(FilterParameter)
1089     //! \param  [in]  vpStateFlags
1090     //!         filter enable status
1091     //!
1092     //! \returns VA_STATUS_SUCCESS if call succeeds
1093     //!
1094     VAStatus DdiUpdateFilterParamBuffer(
1095         VADriverContextP vaDrvCtx,
1096         PDDI_VP_CONTEXT  vpCtx,
1097         uint32_t         surfIndex,
1098         int32_t          filterType,
1099         void             *data,
1100         uint32_t         elementNum,
1101         DDI_VP_STATE     *vpStateFlags);
1102 
1103     //!
1104     //! \brief Set DI filter params for input VPHAL surface
1105     //!
1106     //!  \param  [in]  vpCtx
1107     //!          VP context
1108     //!  \param  [in]  surfIndex
1109     //!          surfIndex to the input surface array
1110     //!  \param  [in]  diParamBuff
1111     //!          Pointer to DI param buffer data
1112     //!
1113     //! \returns VA_STATUS_SUCCESS if call succeeds
1114     //!
1115     VAStatus DdiSetProcFilterDinterlaceParams(
1116         PDDI_VP_CONTEXT                            vpCtx,
1117         uint32_t                                   surfIndex,
1118         VAProcFilterParameterBufferDeinterlacing   *diParamBuff);
1119 
1120     //!
1121     //! \brief Set DN filter params for VPHAL input surface
1122     //!
1123     //! \param [in]  vpCtx
1124     //!        VP context
1125     //! \param [in]  surfIndex
1126     //!        surfIndex to the input surface array
1127     //! \param [in]  dnParamBuff
1128     //!        Pointer to DN param buffer data
1129     //!
1130     //! \returns VA_STATUS_SUCCESS if call succeeds
1131     //!
1132     VAStatus DdiSetProcFilterDenoiseParams(
1133         PDDI_VP_CONTEXT                vpCtx,
1134         uint32_t                       surfIndex,
1135         VAProcFilterParameterBuffer    *dnParamBuff);
1136 
1137     //!
1138     //! \brief Set DN filter params for VPHAL input surface
1139     //!
1140     //! \param [in]  vpCtx
1141     //!        VP context
1142     //! \param [in]  surfIndex
1143     //!        surfIndex to the input surface array
1144     //! \param [in]  hvsDnParamBuff
1145     //!        Pointer to HVS DN param buffer data
1146     //!
1147     //! \returns VA_STATUS_SUCCESS if call succeeds
1148     //!
1149     VAStatus DdiSetProcFilterHVSDenoiseParams(
1150         PDDI_VP_CONTEXT                              vpCtx,
1151         uint32_t                                     surfIndex,
1152         VAProcFilterParameterBufferHVSNoiseReduction *hvsDnParamBuff);
1153 
1154     //!
1155     //! \brief Set DN filter params for VPHAL input surface
1156     //!
1157     //! \param [in]  hvsDnParamBuff
1158     //!        Pointer to HVS DN param buffer data
1159     //! \param [in]  denoiseParams
1160     //!        Pointer to PVPHAL_DENOISE_PARAMS
1161     //!
1162     //! \returns VA_STATUS_SUCCESS if call succeeds
1163     //!
1164     void SetHVSDnParams(
1165         VAProcFilterParameterBufferHVSNoiseReduction *hvsDnParamBuff,
1166         PVPHAL_DENOISE_PARAMS                        denoiseParams);
1167 
1168     //!
1169     //! \brief    Init IEF Params to their default value
1170     //! \param    [out] iefParams
1171     //!           The IEF Params struct to be initialized
1172     //! \return   MOS_STATUS
1173     //!           Return MOS_STATUS_SUCCESS if successful, otherwise failed
1174     //!
1175     MOS_STATUS VpHalDdiInitIEFParams(
1176         PVPHAL_IEF_PARAMS       iefParams);
1177 
1178     //!
1179     //! \brief Set Sharpness (Image Enhancement Filter, IEF) filter params for VPHAL input surface
1180     //!
1181     //! \param [in]  vpCtx
1182     //!        VP context
1183     //! \param [in]  surfIndex
1184     //!        surfIndex to the input surface array
1185     //! \param [in]  sharpParamBuff
1186     //!        Pointer to Sharpness param buffer data
1187     //!
1188     //! \returns VA_STATUS_SUCCESS if call succeeds
1189     //!
1190     VAStatus DdiSetProcFilterSharpnessParams(
1191         PDDI_VP_CONTEXT             vpCtx,
1192         uint32_t                    surfIndex,
1193         VAProcFilterParameterBuffer *sharpParamBuff);
1194 
1195     //!
1196     //! \brief Set Color Balance (procamp) filter params for VPHAL input surface
1197     //!
1198     //! \param [in]  vpCtx
1199     //!        VP context
1200     //! \param [in]  surfIndex
1201     //!        surfIndex to the input surface array
1202     //! \param [in]  colorBalanceParamBuff
1203     //!        Pointer to Colorbalance param buffer data
1204     //! \param [in]  elementNum
1205     //!        number of elements in the Colorbalance param buffer data
1206     //!
1207     //! \returns VA_STATUS_SUCCESS if call succeeds
1208     //!
1209     VAStatus DdiSetProcFilterColorBalanceParams(
1210         PDDI_VP_CONTEXT                         vpCtx,
1211         uint32_t                                surfIndex,
1212         VAProcFilterParameterBufferColorBalance *colorBalanceParamBuff,
1213         uint32_t                                elementNum);
1214 
1215     //!
1216     //! \brief Set Color Balance (procamp) filter params for VPHAL input surface
1217     //!
1218     //! \param [in]  src
1219     //!        VPHAL input surface
1220     //! \param [in]  colorBalanceParamBuff
1221     //!        Pointer to Colorbalance param buffer data
1222     //! \param [in]  procamp
1223     //!        procamp flag
1224     //!
1225     //! \returns VA_STATUS_SUCCESS if call succeeds
1226     //!
1227     VAStatus SetColorBalanceParams(
1228         VAProcFilterParameterBufferColorBalance *colorBalanceParamBuff,
1229         uint32_t                                index,
1230         PVPHAL_SURFACE                          src,
1231         bool                                    procamp);
1232 
1233     //!
1234     //! \brief Set Skin Tone Enhancement (STE) filter params for VPHAL input surface
1235     //!
1236     //! \param [in]  vpCtx
1237     //!        VP context
1238     //! \param [in]  surfIndex
1239     //!        surfIndex to the input surface array
1240     //! \param [in]  steParamBuff
1241     //!        Pointer to Skin Tone Enhancement param buffer data
1242     //!
1243     //! \returns VA_STATUS_SUCCESS if call succeeds
1244     //!
1245     VAStatus DdiSetProcFilterSkinToneEnhancementParams(
1246         PDDI_VP_CONTEXT              vpCtx,
1247         uint32_t                     surfIndex,
1248         VAProcFilterParameterBuffer  *steParamBuff);
1249 
1250     //!
1251     //! \brief Total Color Correction (TCC) filter params for VPHAL input surface
1252     //!
1253     //! \param [in]  vpCtx
1254     //!        VP context
1255     //! \param [in]  surfIndex
1256     //!        surfIndex to the input surface array
1257     //! \param [in]  tccParamBuff
1258     //!        Pointer to Total Color Correction param buffer data
1259     //! \param [in]  elementNum
1260     //!        number of elements in the Total Color Correction param buffer data
1261     //!
1262     //! \returns VA_STATUS_SUCCESS if call succeeds
1263     //!
1264     VAStatus DdiSetProcFilterTotalColorCorrectionParams(
1265         PDDI_VP_CONTEXT                                 vpCtx,
1266         uint32_t                                        surfIndex,
1267         VAProcFilterParameterBufferTotalColorCorrection *tccParamBuff,
1268         uint32_t                                        elementNum);
1269 
1270     //!
1271     //! \brief High Dynamic Range (HDR) Tone Mapping filter params for VPHAL input surface
1272     //!
1273     //! \param [in]  vpCtx
1274     //!        VP context
1275     //! \param [in]  surfIndex
1276     //!        uSurfIndex to the input surface array
1277     //! \param [in]  hdrParamBuff
1278     //!         Pointer to High Dynamic Range Tone Mapping param buffer data
1279     //! \param [in]  elementNum
1280     //!        number of elements in the High Dynamic Range Tone Mapping param buffer data
1281     //!
1282     //! \returns VA_STATUS_SUCCESS if call succeeds
1283     //!
1284     VAStatus DdiSetProcFilterHdrTmParams(
1285         PDDI_VP_CONTEXT                           vpCtx,
1286         uint32_t                                  surfIndex,
1287         VAProcFilterParameterBufferHDRToneMapping *hdrTmParamBuff);
1288 
1289     //!
1290     //! \brief Set the appropriate HDR params according to colour standard, HDR metadata.
1291     //!
1292     //! \param [in]  vpHalSurf
1293     //!        VPHAL Surface
1294     //! \param [in]  hdrMetadata
1295     //!        HDR metadata
1296     //!
1297     //! \returns VA_STATUS_SUCCESS if call succeeds
1298     //!
1299     VAStatus VpUpdateProcHdrState(
1300         const PVPHAL_SURFACE vpHalSurf,
1301         const VAHdrMetaData  *hdrMetadata);
1302 
1303 #if VA_CHECK_VERSION(1, 12, 0)
1304     //!
1305     //! \brief Three Three-Dimensional Look Up Table(3DLUT) filter params for VPHAL input surface
1306     //! \param
1307     //! \param [in]  vaDrvCtx
1308     //!        Driver context
1309     //! \param [in]  vpCtx
1310     //!        VP context
1311     //! \param [in]  surfIndex
1312     //!        surfIndex to the input surface array
1313     //! \param [in]  lut3DParamBuff
1314     //!        Pointer to 3DLUT param buffer data
1315     //!
1316     //! \returns VA_STATUS_SUCCESS if call succeeds
1317     //!
1318     VAStatus DdiSetProcFilter3DLutParams(
1319         VADriverContextP                 vaDrvCtx,
1320         PDDI_VP_CONTEXT                  vpCtx,
1321         uint32_t                         surfIndex,
1322         VAProcFilterParameterBuffer3DLUT *lut3DParamBuff);
1323 #endif
1324 
1325     //!
1326     //! \brief clear filter params which is disabled for VPHAL input surface
1327     //!
1328     //! \param [in]  vpCtx
1329     //!         VP context
1330     //! \param [in]  surfIndex
1331     //!        uSurfIndex to the input surface array
1332     //! \param [in]  vpStateFlags
1333     //!        filter enable status
1334     //!
1335     //! \returns VA_STATUS_SUCCESS if call succeeds
1336     //!
1337     VAStatus DdiClearFilterParamBuffer(
1338             PDDI_VP_CONTEXT     vpCtx,
1339             uint32_t            surfIndex,
1340             DDI_VP_STATE        vpStateFlags);
1341 
1342     //!
1343     //! \brief Set Interpolation Method according to the flag
1344     //!
1345     //! \param [in]  surface
1346     //!        VA Surface
1347     //! \param [in]  nterpolationflags
1348     //!        Interpolation Flag
1349     //!
1350     //! \returns VA_STATUS_SUCCESS if call succeeds
1351     //!
1352     VAStatus VpSetInterpolationParams(
1353         PVPHAL_SURFACE   surface,
1354         uint32_t         nterpolationflags);
1355 
1356     //!
1357     //! \brief Update VPHAL weave DI params
1358     //!
1359     //! \param [in]  vpHalSrcSurf
1360     //! \param [in]  filterFlags
1361     //!
1362     //! \returns VA_STATUS_SUCCESS if call succeeds
1363     //!
1364     void VpUpdateWeaveDI(PVPHAL_SURFACE vpHalSrcSurf, uint32_t filterFlags);
1365 
1366     //!
1367     //! \brief Map VA Rotation flags to appropriate VPHAL Rotation params
1368     //!
1369     //! \param [in]  vpHalSrcSurf
1370     //! \param [in]  rotationState
1371     //!
1372     //! \returns VA_STATUS_SUCCESS if call succeeds
1373     //!
1374     VAStatus VpUpdateProcRotateState(PVPHAL_SURFACE vpHalSrcSurf, uint32_t rotationState);
1375 
1376     //!
1377     //! \brief Map VA Mirroring flags to appropriate VPHAL Mirroring params
1378     //!
1379     //! \param [in]  pHalSrcSurf
1380     //! \param [in]  mirrorState
1381     //!
1382     //! \returns VA_STATUS_SUCCESS if call succeeds
1383     //!
1384     VAStatus VpUpdateProcMirrorState(PVPHAL_SURFACE vpHalSrcSurf, uint32_t mirrorState);
1385 
1386     //!
1387     //! \brief Set alpha blending params for VPHAL input surface
1388     //!
1389     //! \param [in]  vpCtx
1390     //!        VP context
1391     //! \param [in]  surfIndex
1392     //!        surfIndex to the input surface array
1393     //! \param [in]  pipelineParam
1394     //!        Pipeline paramseter from application (VAProcPipelineParameterBuffer)
1395     //!
1396     //! \returns VA_STATUS_SUCCESS if call succeeds
1397     //!
1398     VAStatus DdiSetProcPipelineBlendingParams(
1399         PDDI_VP_CONTEXT                        vpCtx,
1400         uint32_t                               surfIndex,
1401         VAProcPipelineParameterBuffer          *pipelineParam);
1402 
1403     //!
1404     //! \brief Set alpha blending types
1405     //!
1406     //! \param [in]  preMultAlpha
1407     //!        flag
1408     //! \param [in]  globalAlpha
1409     //!        flag
1410     //! \param [in]  blendingParams
1411     //!        Pointer to Blending Params
1412     //!
1413     //! \returns VA_STATUS_SUCCESS if call succeeds
1414     //!
1415     void SetBlendingTypes(
1416         bool                   preMultAlpha,
1417         bool                   globalAlpha,
1418         PVPHAL_BLENDING_PARAMS blendingParams,
1419         float                  globalalpha);
1420 
1421     //!
1422     //! \def IS_COLOR_SPACE_BT2020_YUV(_a)
1423     //! Check if the color space is BT2020 YUV
1424     //!
1425     #define IS_COLOR_SPACE_BT2020_YUV(_a) (_a == CSpace_BT2020 || \
1426                                         _a == CSpace_BT2020_FullRange)
1427 
1428     //!
1429     //! \def IS_COLOR_SPACE_BT2020_RGB(_a)
1430     //! Check if the color space is BT2020 RGB
1431     //!
1432     #define IS_COLOR_SPACE_BT2020_RGB(_a) (_a == CSpace_BT2020_RGB || \
1433                                         _a == CSpace_BT2020_stRGB)
1434 
1435     //!
1436     //! \def IS_COLOR_SPACE_BT2020(_a)
1437     //! Check if the color space is BT2020
1438     //!
1439     #define IS_COLOR_SPACE_BT2020(_a) (IS_COLOR_SPACE_BT2020_YUV(_a) || \
1440                                     IS_COLOR_SPACE_BT2020_RGB(_a))
1441 
1442     //!
1443     //! \brief Get ready to process a picture to a target surface
1444     //!
1445     //! \param [in]  vaDrvCtx
1446     //!        VA Driver Context
1447     //! \param [in]  vpCtx
1448     //!        VP context
1449     //! \param [in]  vaSurfID
1450     //!        target surface ID
1451     //!
1452     //! \returns VA_STATUS_SUCCESS if call succeeds
1453     //!
1454     VAStatus DdiBeginPictureInt(
1455             VADriverContextP    vaDrvCtx,
1456             PDDI_VP_CONTEXT     vpCtx,
1457             VASurfaceID         vaSurfID);
1458 
1459     //!
1460     //! \brief Check if the format contains alpha channel
1461     //!
1462     //! \param [in]  surface
1463     //!        VpHal Surface
1464     //!
1465     //! \returns true if the format of surface contains alpha channel
1466     //!
1467     bool hasAlphaInSurface(PVPHAL_SURFACE surface);
1468 
1469     //!
1470     //! \brief Extract Render Target params from VAProcPipelineParameterBuffer and set the appropriate VPHAL params for RT
1471     //!
1472     //! \param [in]  vaDrvCtx
1473     //!        VA Driver context
1474     //! \param [in]  vpCtx
1475     //!        VP context
1476     //! \param [in]  pipelineParam
1477     //!        VAProcPipelineParameterBuffer Pipeline paramseter from application
1478     //!
1479     //! \returns VA_STATUS_SUCCESS if call succeeds
1480     //!
1481     VAStatus DdiUpdateVphalTargetSurfColorSpace(
1482         VADriverContextP              vaDrvCtx,
1483         PDDI_VP_CONTEXT               vpCtx,
1484         VAProcPipelineParameterBuffer *pipelineParam,
1485         uint32_t                      targetIndex);
1486 
1487     //!
1488     //! \brief set vphal surface when Surface sample type is VA_TOP_FIELD_FIRST
1489     //!
1490     //! \param [in]  surfaceFlag
1491     //!        Surface sample type
1492     //! \param [in]  vpHalSrcSurf
1493     //!        Pointer to PVPHAL_SURFACE
1494     //!
1495     VAStatus SetSurfaceParamsTopFieldFirst(uint32_t surfaceFlag, PVPHAL_SURFACE vpHalSrcSurf, PVPHAL_SURFACE vpHalTgtSurf);
1496 
1497     //!
1498     //! \brief set vphal surface when Surface sample type is VA_BOTTOM_FIELD_FIRST
1499     //!
1500     //! \param [in]  surfaceFlag
1501     //!        Surface sample type
1502     //! \param [in]  vpHalSrcSurf
1503     //!        Pointer to PVPHAL_SURFACE
1504     //!
1505     VAStatus SetSurfaceParamsBottomFieldFirst(uint32_t surfaceFlag, PVPHAL_SURFACE vpHalSrcSurf, PVPHAL_SURFACE vpHalTgtSurf);
1506 
1507     //!
1508     //! \brief set vphal surface when Surface sample type is VA_TOP_FIELD
1509     //!
1510     //! \param [in]  surfaceFlag
1511     //!        Surface sample type
1512     //! \param [in]  vpHalSrcSurf
1513     //!        Pointer to PVPHAL_SURFACE
1514     //!
1515     VAStatus SetSurfaceParamsTopField(uint32_t surfaceFlag, PVPHAL_SURFACE vpHalSrcSurf, PVPHAL_SURFACE vpHalTgtSurf);
1516 
1517     //!
1518     //! \brief set vphal surface when Surface sample type is VA_BOTTOM_FIELD
1519     //!
1520     //! \param [in]  surfaceFlag
1521     //!        Surface sample type
1522     //! \param [in]  vpHalSrcSurf
1523     //!        Pointer to PVPHAL_SURFACE
1524     //!
1525     VAStatus SetSurfaceParamsBottomField(uint32_t surfaceFlag, PVPHAL_SURFACE vpHalSrcSurf, PVPHAL_SURFACE vpHalTgtSurf);
1526 
1527     //!
1528     //! \brief set vphal surface when Surface sample type is VA_BOTTOM_FIELD
1529     //!
1530     //! \param [in]  filterFlags
1531     //!        filter flag
1532     //! \param [in]  vpHalSrcSurf
1533     //!        Pointer to PVPHAL_SURFACE
1534     //!
1535     void SetLegacyInterlaceScalingParams(PVPHAL_SURFACE vpHalSrcSurf, uint32_t filterFlags);
1536 
1537 #if defined(X11_FOUND)
1538     //!
1539     //! \brief  Rectangle initialization
1540     //!
1541     //! \param  [in] rect
1542     //!         Rectangle
1543     //! \param  [in] destx
1544     //!         Destination X
1545     //! \param  [in] desty
1546     //!         Destination Y
1547     //! \param  [in] destw
1548     //!          Destination W
1549     //! \param  [in] desth
1550     //!         Destination H
1551     //!
1552     void RectInit(
1553         RECT            *rect,
1554         int16_t          destx,
1555         int16_t          desty,
1556         uint16_t         destw,
1557         uint16_t         desth);
1558 
1559     //!
1560     //! \param  ctx
1561     //!     Pointer to VA driver context
1562     //! \param  surface
1563     //!     VA surface ID
1564     //! \param  draw
1565     //!     Drawable of window system
1566     //! \param  srcx
1567     //!     Source X of the region
1568     //! \param  srcy
1569     //!     Source Y of the region
1570     //! \param  srcw
1571     //!     Source W of the region
1572     //! \param  srch
1573     //!     Source H of the region
1574     //! \param  destx
1575     //!     Destination X
1576     //! \param  desty
1577     //!     Destination Y
1578     //! \param  destw
1579     //!     Destination W
1580     //! \param  desth
1581     //!     Destination H
1582     //! \param  cliprects
1583     //!     Client-supplied clip list
1584     //! \param  numberCliprects
1585     //!     Number of clip rects in the clip list
1586     //! \param  flags
1587     //!     De-interlacing flags
1588     //!
1589     VAStatus PutSurfaceLinuxHW(
1590         VADriverContextP ctx,
1591         VASurfaceID      surface,
1592         void             *draw,
1593         int16_t          srcx,
1594         int16_t          srcy,
1595         uint16_t         srcw,
1596         uint16_t         srch,
1597         int16_t          destx,
1598         int16_t          desty,
1599         uint16_t         destw,
1600         uint16_t         desth,
1601         VARectangle      *cliprects,
1602         uint32_t         numberCliprects,
1603         uint32_t         flags);
1604 #endif // defined(X11_FOUND)
1605 
1606 protected:
1607     static const VAProcFilterCapColorBalance m_vpColorBalCap[];
1608     static const VAProcFilterType            m_vpSupportedFilters[DDI_VP_MAX_NUM_FILTERS];
1609 
1610 MEDIA_CLASS_DEFINE_END(DdiVpFunctions)
1611 };
1612 
1613 #endif //__DDI_VP_FUNCTIONS_H__
1614