1fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton/**************************************************************************
280468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton *
3fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * Copyright 2009 Younes Manton.
4fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * All Rights Reserved.
580468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton *
6fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * Permission is hereby granted, free of charge, to any person obtaining a
7fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * copy of this software and associated documentation files (the
8fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * "Software"), to deal in the Software without restriction, including
9fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * without limitation the rights to use, copy, modify, merge, publish,
10fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * distribute, sub license, and/or sell copies of the Software, and to
11fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * permit persons to whom the Software is furnished to do so, subject to
12fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * the following conditions:
1380468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton *
14fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * The above copyright notice and this permission notice (including the
15fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * next paragraph) shall be included in all copies or substantial portions
16fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * of the Software.
1780468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton *
18fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2580468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton *
26fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton **************************************************************************/
27fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton
28e44c85637a3298918e292e9ddba812856cf92924Younes Manton#ifndef xvmc_private_h
29e44c85637a3298918e292e9ddba812856cf92924Younes Manton#define xvmc_private_h
30e44c85637a3298918e292e9ddba812856cf92924Younes Manton
31e44c85637a3298918e292e9ddba812856cf92924Younes Manton#include <X11/Xlib.h>
32e44c85637a3298918e292e9ddba812856cf92924Younes Manton#include <X11/extensions/XvMClib.h>
33b48676672592271597d07e5ece79cf4d3ffbe04bChristian König
347ea550621e25f9b2f344b2ed60551ceec91b3fcfKai Wasserbäch#include "pipe/p_video_state.h"
35efaf024f8c7c1000af06e54a85378818d55c5160Christian König
367ea550621e25f9b2f344b2ed60551ceec91b3fcfKai Wasserbäch#include "util/u_debug.h"
377ea550621e25f9b2f344b2ed60551ceec91b3fcfKai Wasserbäch#include "util/u_math.h"
38e44c85637a3298918e292e9ddba812856cf92924Younes Manton
397ea550621e25f9b2f344b2ed60551ceec91b3fcfKai Wasserbäch#include "vl/vl_csc.h"
407ea550621e25f9b2f344b2ed60551ceec91b3fcfKai Wasserbäch#include "vl/vl_compositor.h"
41c7b65dcaffeb9d0760c8ecad052f4c79297bfc8aChristian König
42e44c85637a3298918e292e9ddba812856cf92924Younes Manton#define BLOCK_SIZE_SAMPLES 64
43e44c85637a3298918e292e9ddba812856cf92924Younes Manton#define BLOCK_SIZE_BYTES (BLOCK_SIZE_SAMPLES * 2)
44e44c85637a3298918e292e9ddba812856cf92924Younes Manton
45b48676672592271597d07e5ece79cf4d3ffbe04bChristian Königstruct pipe_video_decoder;
46b48676672592271597d07e5ece79cf4d3ffbe04bChristian Königstruct pipe_video_buffer;
47b48676672592271597d07e5ece79cf4d3ffbe04bChristian König
484a0b80f00dbc77d333027afd195daae7ef1e651cChristian Königstruct pipe_sampler_view;
49e44c85637a3298918e292e9ddba812856cf92924Younes Mantonstruct pipe_fence_handle;
50e44c85637a3298918e292e9ddba812856cf92924Younes Manton
51e44c85637a3298918e292e9ddba812856cf92924Younes Mantontypedef struct
52e44c85637a3298918e292e9ddba812856cf92924Younes Manton{
531448e829e86981e6144410ba6a3d0f16357fb2b3Christian König   struct vl_screen *vscreen;
541448e829e86981e6144410ba6a3d0f16357fb2b3Christian König   struct pipe_context *pipe;
55d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König   struct pipe_video_decoder *decoder;
56e5f78a74f8294ee02015552db664dae1e7da9f47Christian König
57c7b65dcaffeb9d0760c8ecad052f4c79297bfc8aChristian König   enum VL_CSC_COLOR_STANDARD color_standard;
58c7b65dcaffeb9d0760c8ecad052f4c79297bfc8aChristian König   struct vl_procamp procamp;
59bd5fd67a3e3cda4b7676dd4745fc5d5524709210Christian König   struct vl_compositor compositor;
6032c4381d4a0479b3d9bfe305ce701be6b5ac8e18Christian König   struct vl_compositor_state cstate;
61c7b65dcaffeb9d0760c8ecad052f4c79297bfc8aChristian König
625eb822cb6a8fb461ee5b1bd881e0ef1b91c432b5Younes Manton   unsigned short subpicture_max_width;
635eb822cb6a8fb461ee5b1bd881e0ef1b91c432b5Younes Manton   unsigned short subpicture_max_height;
64f3f212acf0d2fc25d3b6bd70dd1f346d97a9b25dChristian König
65e44c85637a3298918e292e9ddba812856cf92924Younes Manton} XvMCContextPrivate;
66e44c85637a3298918e292e9ddba812856cf92924Younes Manton
67e44c85637a3298918e292e9ddba812856cf92924Younes Mantontypedef struct
68e44c85637a3298918e292e9ddba812856cf92924Younes Manton{
69d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König   struct pipe_video_buffer *video_buffer;
70d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König
71a09754c15fc48e5fed347f478a301a02ee69fe8cMaarten Lankhorst   /* nonzero if this picture is already being decoded */
72a09754c15fc48e5fed347f478a301a02ee69fe8cMaarten Lankhorst   int picture_structure;
73884cb79edfefb1133229a002f41b4d370d717a7eChristian König
74d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König   XvMCSurface *ref[2];
75884cb79edfefb1133229a002f41b4d370d717a7eChristian König
76104ac0066394f8246d18c833bca4bcce271b5eefChristian König   struct pipe_fence_handle *fence;
7780468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton
7880468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton   /* The subpicture associated with this surface, if any. */
7980468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton   XvMCSubpicture *subpicture;
8080468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton
8180468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton   /* Some XvMC functions take a surface but not a context,
8280468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton      so we keep track of which context each surface belongs to. */
8380468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton   XvMCContext *context;
84e44c85637a3298918e292e9ddba812856cf92924Younes Manton} XvMCSurfacePrivate;
85e44c85637a3298918e292e9ddba812856cf92924Younes Manton
865f730690f8166c94ee010605b6437a6fb2a7771dYounes Mantontypedef struct
875f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton{
884a0b80f00dbc77d333027afd195daae7ef1e651cChristian König   struct pipe_sampler_view *sampler;
8980468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton
90849a0b0a821ecc59a50fe53498a6354cfd0b24a4Christian König   /* optional palette for this subpicture */
91849a0b0a821ecc59a50fe53498a6354cfd0b24a4Christian König   struct pipe_sampler_view *palette;
92849a0b0a821ecc59a50fe53498a6354cfd0b24a4Christian König
93d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König   struct u_rect src_rect;
94d645dc65b6c5e7d46538e98208a703f0f7a5d20bChristian König   struct u_rect dst_rect;
95efaf024f8c7c1000af06e54a85378818d55c5160Christian König
9680468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton   /* The surface this subpicture is currently associated with, if any. */
9780468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton   XvMCSurface *surface;
9880468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton
9980468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton   /* Some XvMC functions take a subpicture but not a context,
10080468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton      so we keep track of which context each subpicture belongs to. */
10180468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton   XvMCContext *context;
10280468464897682b8e10aeab310f20fdd7ddc6cb4Younes Manton} XvMCSubpicturePrivate;
1035f730690f8166c94ee010605b6437a6fb2a7771dYounes Manton
1048580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton#define XVMC_OUT   0
1058580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton#define XVMC_ERR   1
1068580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton#define XVMC_WARN  2
1078580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton#define XVMC_TRACE 3
108b48676672592271597d07e5ece79cf4d3ffbe04bChristian König
1098580b7a0eeed3fc29320b2c0a184084e4267661aYounes Mantonstatic INLINE void XVMC_MSG(unsigned int level, const char *fmt, ...)
1108580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton{
111b48676672592271597d07e5ece79cf4d3ffbe04bChristian König   static int debug_level = -1;
1128580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton
113b48676672592271597d07e5ece79cf4d3ffbe04bChristian König   if (debug_level == -1) {
114c7b65dcaffeb9d0760c8ecad052f4c79297bfc8aChristian König      debug_level = MAX2(debug_get_num_option("XVMC_DEBUG", 0), 0);
1158580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton   }
1168580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton
1178580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton   if (level <= debug_level) {
1188580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton      va_list ap;
1198580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton      va_start(ap, fmt);
1208580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton      _debug_vprintf(fmt, ap);
1218580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton      va_end(ap);
1228580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton   }
1238580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton}
1248580b7a0eeed3fc29320b2c0a184084e4267661aYounes Manton
125e44c85637a3298918e292e9ddba812856cf92924Younes Manton#endif /* xvmc_private_h */
126