1fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton/************************************************************************** 27965e2fc16853ae0ed0a9cde77346c25feb19b6eChristian König * 3fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * Copyright 2009 Younes Manton. 4fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * All Rights Reserved. 57965e2fc16853ae0ed0a9cde77346c25feb19b6eChristian König * 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: 137965e2fc16853ae0ed0a9cde77346c25feb19b6eChristian König * 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. 177965e2fc16853ae0ed0a9cde77346c25feb19b6eChristian König * 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. 257965e2fc16853ae0ed0a9cde77346c25feb19b6eChristian König * 26fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton **************************************************************************/ 27fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton 28f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#ifndef PIPE_VIDEO_CONTEXT_H 29f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#define PIPE_VIDEO_CONTEXT_H 30f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 31f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#ifdef __cplusplus 32f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonextern "C" { 33f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#endif 34f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 3551ecb33c6b218af8e7c401a701b51f52331a1782Kai Wasserbäch#include "pipe/p_video_state.h" 36f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 37f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_screen; 38f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_surface; 39f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_macroblock; 40f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_picture_desc; 41f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_fence_handle; 42f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 43f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton/** 44ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König * Gallium video decoder for a specific codec/profile 45d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König */ 46d9ad3aa3b9647f1ede2568600978af956ff32fffChristian Königstruct pipe_video_decoder 47d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König{ 48ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König struct pipe_context *context; 49d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 50d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König enum pipe_video_profile profile; 51fcdf50f74befad8d89eb3f9cdfd88b82d1daa98cChristian König enum pipe_video_entrypoint entrypoint; 52d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König enum pipe_video_chroma_format chroma_format; 53d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König unsigned width; 54d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König unsigned height; 5582e8bf36d8fcd46bcb76ec300875a47c7312f1a1Emeric Grange unsigned max_references; 56e5f78a74f8294ee02015552db664dae1e7da9f47Christian König 57e5f78a74f8294ee02015552db664dae1e7da9f47Christian König /** 58d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * destroy this video decoder 59f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton */ 60d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König void (*destroy)(struct pipe_video_decoder *decoder); 61ba0bff85307c9b107cf432da05b39fd4ab242579Christian König 62d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König /** 631d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König * start decoding of a new frame 641d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König */ 658ea416f35de0c664ef47b71841756758f22d7faaChristian König void (*begin_frame)(struct pipe_video_decoder *decoder, 668ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_video_buffer *target, 678ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_picture_desc *picture); 681d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König 691d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König /** 70d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König * decode a macroblock 712e6274fc3b123e7de695038054b5cbd20b11559aChristian König */ 72d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König void (*decode_macroblock)(struct pipe_video_decoder *decoder, 738ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_video_buffer *target, 748ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_picture_desc *picture, 75d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König const struct pipe_macroblock *macroblocks, 76d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König unsigned num_macroblocks); 77b7acf83d523563cde613fe805bd8edaa02f64b53Christian König 783d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König /** 79d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * decode a bitstream 803d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König */ 811d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König void (*decode_bitstream)(struct pipe_video_decoder *decoder, 828ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_video_buffer *target, 838ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_picture_desc *picture, 847ac114f94a8fac5fa7cc0e99bf6a3c03ec194650Christian König unsigned num_buffers, 857ac114f94a8fac5fa7cc0e99bf6a3c03ec194650Christian König const void * const *buffers, 867ac114f94a8fac5fa7cc0e99bf6a3c03ec194650Christian König const unsigned *sizes); 87d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 88d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König /** 891d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König * end decoding of the current frame 901d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König */ 918ea416f35de0c664ef47b71841756758f22d7faaChristian König void (*end_frame)(struct pipe_video_decoder *decoder, 928ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_video_buffer *target, 938ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_picture_desc *picture); 941d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König 951d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König /** 961d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König * flush any outstanding command buffers to the hardware 971d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König * should be called before a video_buffer is acessed by the state tracker again 983d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König */ 991d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König void (*flush)(struct pipe_video_decoder *decoder); 100d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König}; 101d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 102d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König/** 103d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * output for decoding / input for displaying 104d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König */ 105d9ad3aa3b9647f1ede2568600978af956ff32fffChristian Königstruct pipe_video_buffer 106d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König{ 1074e837f557bf5f5afb286e1f2244ed69c0092c2d6Christian König struct pipe_context *context; 108d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 109d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König enum pipe_format buffer_format; 110d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König enum pipe_video_chroma_format chroma_format; 111d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König unsigned width; 112d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König unsigned height; 1139af70c90dba9ed9902778883b675062fa0168b48Christian König bool interlaced; 114ba0bff85307c9b107cf432da05b39fd4ab242579Christian König 1153d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König /** 116d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * destroy this video buffer 1173d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König */ 118d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König void (*destroy)(struct pipe_video_buffer *buffer); 119ba0bff85307c9b107cf432da05b39fd4ab242579Christian König 120d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König /** 121d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * get a individual sampler view for each plane 122d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König */ 1233ea7e2713c836f23d59c4034385609e371a94c8dChristian König struct pipe_sampler_view **(*get_sampler_view_planes)(struct pipe_video_buffer *buffer); 1243ea7e2713c836f23d59c4034385609e371a94c8dChristian König 1253ea7e2713c836f23d59c4034385609e371a94c8dChristian König /** 1263ea7e2713c836f23d59c4034385609e371a94c8dChristian König * get a individual sampler view for each component 1273ea7e2713c836f23d59c4034385609e371a94c8dChristian König */ 1283ea7e2713c836f23d59c4034385609e371a94c8dChristian König struct pipe_sampler_view **(*get_sampler_view_components)(struct pipe_video_buffer *buffer); 129e5f78a74f8294ee02015552db664dae1e7da9f47Christian König 130d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König /** 131d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * get a individual surfaces for each plane 132d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König */ 133d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König struct pipe_surface **(*get_surfaces)(struct pipe_video_buffer *buffer); 1348c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König 1358c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König /* 1368c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König * auxiliary associated data 1378c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König */ 1388c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König void *associated_data; 1398c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König 1408c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König /* 1418c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König * decoder where the associated data came from 1428c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König */ 1438c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König struct pipe_video_decoder *decoder; 1448c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König 1458c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König /* 1468c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König * destroy the associated data 1478c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König */ 1488c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König void (*destroy_associated_data)(void *associated_data); 149e5f78a74f8294ee02015552db664dae1e7da9f47Christian König}; 150e5f78a74f8294ee02015552db664dae1e7da9f47Christian König 151f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#ifdef __cplusplus 152f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton} 153f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#endif 154f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 155f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#endif /* PIPE_VIDEO_CONTEXT_H */ 156