1fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton/************************************************************************** 2e60a8e4fcf2b4073a5fc2d9ec1de5a6ca6c7b9feYounes Manton * 3fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * Copyright 2009 Younes Manton. 4fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton * All Rights Reserved. 5e60a8e4fcf2b4073a5fc2d9ec1de5a6ca6c7b9feYounes 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: 13e60a8e4fcf2b4073a5fc2d9ec1de5a6ca6c7b9feYounes 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. 17e60a8e4fcf2b4073a5fc2d9ec1de5a6ca6c7b9feYounes 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. 25e60a8e4fcf2b4073a5fc2d9ec1de5a6ca6c7b9feYounes Manton * 26fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton **************************************************************************/ 27fcb595c04f9ee275eae49b7bb7c61246671f5ce2Younes Manton 285ed848129cb57269e80caf2c1ca522ae41f4500bChristian König#ifndef vl_mpeg12_decoder_h 295ed848129cb57269e80caf2c1ca522ae41f4500bChristian König#define vl_mpeg12_decoder_h 30f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 3119bcd21ed151cf1716f2f87dff0f712231aa2ce7Kai Wasserbäch#include "pipe/p_video_decoder.h" 32d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 33c888fe027c338f337123de4da2de1ac73b0f7587Christian König#include "vl_mpeg12_bitstream.h" 34f0819a22f3dc63d1c0dde6320babf9b7fcda15bbChristian König#include "vl_zscan.h" 35a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König#include "vl_idct.h" 36ca79aeb91e914ac1a4774d51ca49911406377407Christian König#include "vl_mc.h" 37d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 383a2b906805985e0a4258bcbaed4cdff758875514Christian König#include "vl_vertex_buffers.h" 39d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König#include "vl_video_buffer.h" 40f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 41f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_screen; 42f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_context; 43f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 44d9ad3aa3b9647f1ede2568600978af956ff32fffChristian Königstruct vl_mpeg12_decoder 45f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton{ 46d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König struct pipe_video_decoder base; 47dd6cd206a6395be651bc965580e17c0d63513c7bChristian König 48f0819a22f3dc63d1c0dde6320babf9b7fcda15bbChristian König unsigned chroma_width, chroma_height; 49f0819a22f3dc63d1c0dde6320babf9b7fcda15bbChristian König 50f0819a22f3dc63d1c0dde6320babf9b7fcda15bbChristian König unsigned blocks_per_line; 51a6c76c8a90dc8995feed3c61b02dbd8408149036Christian König unsigned num_blocks; 52d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König unsigned width_in_macroblocks; 538c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König bool expect_chunked_decode; 5437a548c9d1db6bbf8712277f678d850f34d0e445Christian König 55f0819a22f3dc63d1c0dde6320babf9b7fcda15bbChristian König enum pipe_format zscan_source_format; 56bad3085c7839de734f6b883088f91ae55db61a35Christian König 5737a548c9d1db6bbf8712277f678d850f34d0e445Christian König struct pipe_vertex_buffer quads; 58b8a6e0e6fc451096d684a1e18529ab4879cdba0aChristian König struct pipe_vertex_buffer pos; 59b8a6e0e6fc451096d684a1e18529ab4879cdba0aChristian König 60849bc838e81f930e6f090e6c6597bb92e822b4c9Christian König void *ves_ycbcr; 6138a315b7049946d124409b377e622994feccdcb7Christian König void *ves_mv; 6237a548c9d1db6bbf8712277f678d850f34d0e445Christian König 637f04fe5338d0846ec9a6003033da5357d2785c8bChristian König void *sampler_ycbcr; 647f04fe5338d0846ec9a6003033da5357d2785c8bChristian König 656ad846ee78d9d8ba93dcecdefbf89f2b981333efChristian König struct pipe_sampler_view *zscan_linear; 666ad846ee78d9d8ba93dcecdefbf89f2b981333efChristian König struct pipe_sampler_view *zscan_normal; 676ad846ee78d9d8ba93dcecdefbf89f2b981333efChristian König struct pipe_sampler_view *zscan_alternate; 686ad846ee78d9d8ba93dcecdefbf89f2b981333efChristian König 690121aae967d3d1366cccc8946cf89ad22818365eChristian König struct pipe_video_buffer *idct_source; 700121aae967d3d1366cccc8946cf89ad22818365eChristian König struct pipe_video_buffer *mc_source; 710121aae967d3d1366cccc8946cf89ad22818365eChristian König 72f0819a22f3dc63d1c0dde6320babf9b7fcda15bbChristian König struct vl_zscan zscan_y, zscan_c; 73794cde3f5ef59cf603be284fbc8de33d2cda7d2cChristian König struct vl_idct idct_y, idct_c; 74ca79aeb91e914ac1a4774d51ca49911406377407Christian König struct vl_mc mc_y, mc_c; 75f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 76d52d51ab8ae1240f77b6c18c3e99be4bf4868037Younes Manton void *dsa; 771d1d038c85ebb37f1da4540f092563e8ecab7dfbChristian König 788c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König unsigned current_buffer; 798c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König struct vl_mpeg12_buffer *dec_buffers[4]; 80f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton}; 81f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton 82a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian Königstruct vl_mpeg12_buffer 83e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König{ 84e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König struct vl_vertex_buffer vertex_stream; 85e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König 8631096e13f858daf896c0c53077fb25e92da089a6Christian König unsigned block_num; 87d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König unsigned num_ycbcr_blocks[3]; 88d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König 8931096e13f858daf896c0c53077fb25e92da089a6Christian König struct pipe_sampler_view *zscan_source; 90d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König 91c888fe027c338f337123de4da2de1ac73b0f7587Christian König struct vl_mpg12_bs bs; 928abbdb8865890e1a39ebbbfae38422014f80072aChristian König struct vl_zscan_buffer zscan[VL_NUM_COMPONENTS]; 938abbdb8865890e1a39ebbbfae38422014f80072aChristian König struct vl_idct_buffer idct[VL_NUM_COMPONENTS]; 948abbdb8865890e1a39ebbbfae38422014f80072aChristian König struct vl_mc_buffer mc[VL_NUM_COMPONENTS]; 959d2e630cd02362bfa8f090640a55cf2dea9d64b3Christian König 9631096e13f858daf896c0c53077fb25e92da089a6Christian König struct pipe_transfer *tex_transfer; 9731096e13f858daf896c0c53077fb25e92da089a6Christian König short *texels; 98d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König 998abbdb8865890e1a39ebbbfae38422014f80072aChristian König struct vl_ycbcr_block *ycbcr_stream[VL_NUM_COMPONENTS]; 100d3770d6229d95e9beb67358ae2b2c8824ed3ae58Christian König struct vl_motionvector *mv_stream[VL_MAX_REF_FRAMES]; 101e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König}; 102e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König 103ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König/** 104ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König * creates a shader based mpeg12 decoder 105ea78480029450c019287c2a94d7c42a6a1d12dc3Christian König */ 106d9ad3aa3b9647f1ede2568600978af956ff32fffChristian Königstruct pipe_video_decoder * 107ea78480029450c019287c2a94d7c42a6a1d12dc3Christian Königvl_create_mpeg12_decoder(struct pipe_context *pipe, 108a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König enum pipe_video_profile profile, 109fcdf50f74befad8d89eb3f9cdfd88b82d1daa98cChristian König enum pipe_video_entrypoint entrypoint, 110a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König enum pipe_video_chroma_format chroma_format, 1118c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König unsigned width, unsigned height, unsigned max_references, 1128c2bfa34a0d70ab08de44e3b091b3a097abbad97Christian König bool expect_chunked_decode); 113a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König 1145ed848129cb57269e80caf2c1ca522ae41f4500bChristian König#endif /* vl_mpeg12_decoder_h */ 115