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