vl_mpeg12_decoder.h revision fcdf50f74befad8d89eb3f9cdfd88b82d1daa98c
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
28d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König#ifndef VL_MPEG12_DECODER_H
29d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König#define VL_MPEG12_DECODER_H
30f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
31f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton#include <pipe/p_video_context.h>
32d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König
33a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König#include "vl_idct.h"
34a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König#include "vl_mpeg12_mc_renderer.h"
35d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König
363a2b906805985e0a4258bcbaed4cdff758875514Christian König#include "vl_vertex_buffers.h"
37d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König#include "vl_video_buffer.h"
38f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
39f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_screen;
40f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Mantonstruct pipe_context;
41f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
42d9ad3aa3b9647f1ede2568600978af956ff32fffChristian Königstruct vl_mpeg12_decoder
43f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton{
44d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König   struct pipe_video_decoder base;
45d52d51ab8ae1240f77b6c18c3e99be4bf4868037Younes Manton   struct pipe_context *pipe;
46dd6cd206a6395be651bc965580e17c0d63513c7bChristian König
471d72cf6986168a49fbadfa31e9d719ed0222836fChristian König   const unsigned (*empty_block_mask)[3][2][2];
4837a548c9d1db6bbf8712277f678d850f34d0e445Christian König
4937a548c9d1db6bbf8712277f678d850f34d0e445Christian König   struct pipe_vertex_buffer quads;
503a2b906805985e0a4258bcbaed4cdff758875514Christian König   void *ves[VL_MAX_PLANES];
5137a548c9d1db6bbf8712277f678d850f34d0e445Christian König
52794cde3f5ef59cf603be284fbc8de33d2cda7d2cChristian König   struct vl_idct idct_y, idct_c;
53794cde3f5ef59cf603be284fbc8de33d2cda7d2cChristian König   struct vl_mpeg12_mc_renderer mc;
54f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
55d52d51ab8ae1240f77b6c18c3e99be4bf4868037Younes Manton   void *rast;
56d52d51ab8ae1240f77b6c18c3e99be4bf4868037Younes Manton   void *dsa;
57d52d51ab8ae1240f77b6c18c3e99be4bf4868037Younes Manton   void *blend;
58f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton};
59f547472bfa0a797adacc2a7688b4c1ba65381a80Younes Manton
60a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian Königstruct vl_mpeg12_buffer
61e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König{
62d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König   struct pipe_video_decode_buffer base;
63ba0bff85307c9b107cf432da05b39fd4ab242579Christian König
64e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König   struct vl_vertex_buffer vertex_stream;
65e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König
66d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König   struct pipe_video_buffer *idct_source;
67fcdf50f74befad8d89eb3f9cdfd88b82d1daa98cChristian König   struct pipe_video_buffer *mc_source;
68d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König
69e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König   union
70e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König   {
71e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König      struct pipe_vertex_buffer all[2];
72e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König      struct {
73e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König         struct pipe_vertex_buffer quad, stream;
74e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König      } individual;
75e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König   } vertex_bufs;
76e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König
773a2b906805985e0a4258bcbaed4cdff758875514Christian König   struct vl_idct_buffer idct[VL_MAX_PLANES];
783a2b906805985e0a4258bcbaed4cdff758875514Christian König   struct vl_mpeg12_mc_buffer mc[VL_MAX_PLANES];
799d2e630cd02362bfa8f090640a55cf2dea9d64b3Christian König
809d2e630cd02362bfa8f090640a55cf2dea9d64b3Christian König   struct pipe_transfer *tex_transfer[VL_MAX_PLANES];
819d2e630cd02362bfa8f090640a55cf2dea9d64b3Christian König   short *texels[VL_MAX_PLANES];
82e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König};
83e87bd8c9578dee384ff03039aa792e1a8dae7f36Christian König
84a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König/* drivers can call this function in their pipe_video_context constructors and pass it
85e60a8e4fcf2b4073a5fc2d9ec1de5a6ca6c7b9feYounes Manton   an accelerated pipe_context along with suitable buffering modes, etc */
86d9ad3aa3b9647f1ede2568600978af956ff32fffChristian Königstruct pipe_video_decoder *
87d9ad3aa3b9647f1ede2568600978af956ff32fffChristian Königvl_create_mpeg12_decoder(struct pipe_video_context *context,
88d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König                         struct pipe_context *pipe,
89a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König                         enum pipe_video_profile profile,
90fcdf50f74befad8d89eb3f9cdfd88b82d1daa98cChristian König                         enum pipe_video_entrypoint entrypoint,
91a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König                         enum pipe_video_chroma_format chroma_format,
92d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König                         unsigned width, unsigned height);
93a1fecd09c2c5fdba3da5c38fce567b5bd2e6053dChristian König
94d9ad3aa3b9647f1ede2568600978af956ff32fffChristian König#endif /* VL_MPEG12_DECODER_H */
95