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. 21877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * IN NO EVENT SHALL VMWARE 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 31373f118c6c750d717fd0727fc3fc191828714c6fEmil Velikov#include "pipe/p_video_state.h" 32373f118c6c750d717fd0727fc3fc191828714c6fEmil Velikov 33f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#ifdef __cplusplus 34f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonextern "C" { 35f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#endif 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/** 44f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König * Gallium video codec for a specific format/profile 45d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König */ 46f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian Königstruct pipe_video_codec 47d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König{ 48ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König struct pipe_context *context; 49d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 50d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König enum pipe_video_profile profile; 514fca06a902e98fb16dc9ea5f4dd2d88f3883612aLeo Liu unsigned level; 52fcdf50f74befad8d89eb3f9cdfd88b82d1daa98cChristian König enum pipe_video_entrypoint entrypoint; 53d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König enum pipe_video_chroma_format chroma_format; 54d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König unsigned width; 55d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König unsigned height; 5682e8bf36d8fcd46bcb76ec300875a47c7312f1a1Emeric Grange unsigned max_references; 5753e20b8b418cc85e13d70f41ce160e17847a5096Christian König bool expect_chunked_decode; 58e5f78a74f8294ee02015552db664dae1e7da9f47Christian König 59e5f78a74f8294ee02015552db664dae1e7da9f47Christian König /** 60d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * destroy this video decoder 61f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton */ 62f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König void (*destroy)(struct pipe_video_codec *codec); 63ba0bff85307c9b107cf432da05b39fd4ab242579Christian König 64d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König /** 651d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König * start decoding of a new frame 661d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König */ 67f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König void (*begin_frame)(struct pipe_video_codec *codec, 688ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_video_buffer *target, 698ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_picture_desc *picture); 701d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König 711d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König /** 72d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König * decode a macroblock 732e6274fc3b123e7de695038054b5cbd20b11559aChristian König */ 74f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König void (*decode_macroblock)(struct pipe_video_codec *codec, 758ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_video_buffer *target, 768ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_picture_desc *picture, 77d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König const struct pipe_macroblock *macroblocks, 78d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König unsigned num_macroblocks); 79b7acf83d523563cde613fe805bd8edaa02f64b53Christian König 803d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König /** 81d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * decode a bitstream 823d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König */ 83f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König void (*decode_bitstream)(struct pipe_video_codec *codec, 848ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_video_buffer *target, 858ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_picture_desc *picture, 867ac114f94a8fac5fa7cc0e99bf6a3c03ec194650Christian König unsigned num_buffers, 877ac114f94a8fac5fa7cc0e99bf6a3c03ec194650Christian König const void * const *buffers, 887ac114f94a8fac5fa7cc0e99bf6a3c03ec194650Christian König const unsigned *sizes); 89d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 90d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König /** 91ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König * encode to a bitstream 92ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König */ 93ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König void (*encode_bitstream)(struct pipe_video_codec *codec, 94ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König struct pipe_video_buffer *source, 95ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König struct pipe_resource *destination, 96ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König void **feedback); 97ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König 98ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König /** 991d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König * end decoding of the current frame 1001d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König */ 101f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König void (*end_frame)(struct pipe_video_codec *codec, 1028ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_video_buffer *target, 1038ea416f35de0c664ef47b71841756758f22d7faaChristian König struct pipe_picture_desc *picture); 1041d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König 1051d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König /** 1061d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König * flush any outstanding command buffers to the hardware 1071d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König * should be called before a video_buffer is acessed by the state tracker again 1083d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König */ 109f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König void (*flush)(struct pipe_video_codec *codec); 110ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König 111ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König /** 112ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König * get encoder feedback 113ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König */ 114ee978aee94d98fec669002eb5ef7ceb1f46683a9Christian König void (*get_feedback)(struct pipe_video_codec *codec, void *feedback, unsigned *size); 115d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König}; 116d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 117d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König/** 118d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * output for decoding / input for displaying 119d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König */ 120d9ad3aa3b9647f1ede2568600978af956ff32fffChristian Königstruct pipe_video_buffer 121d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König{ 1224e837f557bf5f5afb286e1f2244ed69c0092c2d6Christian König struct pipe_context *context; 123d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 124d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König enum pipe_format buffer_format; 125d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König enum pipe_video_chroma_format chroma_format; 126d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König unsigned width; 127d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König unsigned height; 1289af70c90dba9ed9902778883b675062fa0168b48Christian König bool interlaced; 1291cdb4da1d6ce94d947e41d4f0e568074f4f59577Julien Isorce unsigned bind; 130ba0bff85307c9b107cf432da05b39fd4ab242579Christian König 1313d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König /** 132d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König * destroy this video buffer 1333d40d4f391e2fc319a03d8f171a2cfb9daf250c8Christian König */ 134d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König void (*destroy)(struct pipe_video_buffer *buffer); 135ba0bff85307c9b107cf432da05b39fd4ab242579Christian König 136d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König /** 13760a27ad122128145d28be37e9c0b0bc86a8e5181Giuseppe Bilotta * get an individual sampler view for each plane 138d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König */ 1393ea7e2713c836f23d59c4034385609e371a94c8dChristian König struct pipe_sampler_view **(*get_sampler_view_planes)(struct pipe_video_buffer *buffer); 1403ea7e2713c836f23d59c4034385609e371a94c8dChristian König 1413ea7e2713c836f23d59c4034385609e371a94c8dChristian König /** 14260a27ad122128145d28be37e9c0b0bc86a8e5181Giuseppe Bilotta * get an individual sampler view for each component 1433ea7e2713c836f23d59c4034385609e371a94c8dChristian König */ 1443ea7e2713c836f23d59c4034385609e371a94c8dChristian König struct pipe_sampler_view **(*get_sampler_view_components)(struct pipe_video_buffer *buffer); 145e5f78a74f8294ee02015552db664dae1e7da9f47Christian König 146d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König /** 14760a27ad122128145d28be37e9c0b0bc86a8e5181Giuseppe Bilotta * get an individual surfaces for each plane 148d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König */ 149d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König struct pipe_surface **(*get_surfaces)(struct pipe_video_buffer *buffer); 1508c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König 1518c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König /* 1528c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König * auxiliary associated data 1538c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König */ 1548c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König void *associated_data; 1558c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König 1568c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König /* 157f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König * codec where the associated data came from 1588c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König */ 159f2f7064e560a83fc78d0e5b1d3a7d4aaac119a49Christian König struct pipe_video_codec *codec; 1608c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König 1618c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König /* 1628c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König * destroy the associated data 1638c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König */ 1648c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König void (*destroy_associated_data)(void *associated_data); 165e5f78a74f8294ee02015552db664dae1e7da9f47Christian König}; 166e5f78a74f8294ee02015552db664dae1e7da9f47Christian König 167f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#ifdef __cplusplus 168f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton} 169f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#endif 170f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 171f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#endif /* PIPE_VIDEO_CONTEXT_H */ 172