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