--- /dev/null
+/**************************************************************************
+ *
+ * Copyright 2011 Christian König
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+#ifndef vl_defines_h
+#define vl_defines_h
+
+/* constants usually used with all known codecs */
+#define MACROBLOCK_WIDTH 16
+#define MACROBLOCK_HEIGHT 16
+
+#define BLOCK_WIDTH 8
+#define BLOCK_HEIGHT 8
+
+#endif
#include "vl_idct.h"
#include "vl_vertex_buffers.h"
+#include "vl_defines.h"
#include "util/u_draw.h"
#include <assert.h>
#include <pipe/p_context.h>
#include <tgsi/tgsi_ureg.h>
#include "vl_types.h"
-#define BLOCK_WIDTH 8
-#define BLOCK_HEIGHT 8
-
#define SCALE_FACTOR_16_TO_9 (32768.0f / 256.0f)
#define NR_RENDER_TARGETS 4
struct pipe_resource *
vl_idct_upload_matrix(struct pipe_context *pipe)
{
+ const float scale = sqrtf(SCALE_FACTOR_16_TO_9);
+
struct pipe_resource template, *matrix;
struct pipe_transfer *buf_transfer;
unsigned i, j, pitch;
for(i = 0; i < BLOCK_HEIGHT; ++i)
for(j = 0; j < BLOCK_WIDTH; ++j)
// transpose and scale
- f[i * pitch + j] = const_matrix[j][i] * sqrtf(SCALE_FACTOR_16_TO_9);
+ f[i * pitch + j] = const_matrix[j][i] * scale;
pipe->transfer_unmap(pipe, buf_transfer);
pipe->transfer_destroy(pipe, buf_transfer);
#include <pipe/p_state.h>
#include "vl_vertex_buffers.h"
+/* shader based inverse distinct cosinus transformation
+ * expect usage of vl_vertex_buffers as a todo list
+ */
struct vl_idct
{
struct pipe_context *pipe;
struct pipe_resource *matrix;
};
+/* a set of buffers to work with */
struct vl_idct_buffer
{
struct pipe_viewport_state viewport[2];
short *texels;
};
+/* upload the idct matrix, which can be shared by all idct instances of a pipe */
struct pipe_resource *vl_idct_upload_matrix(struct pipe_context *pipe);
+/* init an idct instance */
bool vl_idct_init(struct vl_idct *idct, struct pipe_context *pipe,
unsigned buffer_width, unsigned buffer_height,
unsigned blocks_x, unsigned blocks_y,
int color_swizzle, struct pipe_resource *matrix);
+/* destroy an idct instance */
void vl_idct_cleanup(struct vl_idct *idct);
+/* init a buffer assosiated with agiven idct instance */
struct pipe_resource *vl_idct_init_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer);
+/* cleanup a buffer of an idct instance */
void vl_idct_cleanup_buffer(struct vl_idct *idct, struct vl_idct_buffer *buffer);
+/* map a buffer for use with vl_idct_add_block */
void vl_idct_map_buffers(struct vl_idct *idct, struct vl_idct_buffer *buffer);
+/* add an block of to be tranformed data a the given x and y coordinate */
void vl_idct_add_block(struct vl_idct_buffer *buffer, unsigned x, unsigned y, short *block);
+/* unmaps the buffers before flushing */
void vl_idct_unmap_buffers(struct vl_idct *idct, struct vl_idct_buffer *buffer);
+/* flush the buffer and start rendering, vertex buffers needs to be setup before calling this */
void vl_idct_flush(struct vl_idct *idct, struct vl_idct_buffer *buffer, unsigned num_verts);
#endif
**************************************************************************/
#include "vl_mpeg12_mc_renderer.h"
+#include "vl_vertex_buffers.h"
+#include "vl_defines.h"
#include "util/u_draw.h"
#include <assert.h>
#include <pipe/p_context.h>
#include <util/u_draw.h>
#include <tgsi/tgsi_ureg.h>
-#define MACROBLOCK_WIDTH 16
-#define MACROBLOCK_HEIGHT 16
-#define BLOCK_WIDTH 8
-#define BLOCK_HEIGHT 8
-
enum VS_OUTPUT
{
VS_O_VPOS,
#include <pipe/p_state.h>
#include <pipe/p_video_state.h>
#include "vl_types.h"
-#include "vl_idct.h"
-#include "vl_vertex_buffers.h"
struct pipe_context;
struct pipe_macroblock;
**************************************************************************/
#include <assert.h>
-#include <pipe/p_context.h>
-#include <pipe/p_screen.h>
-#include <util/u_memory.h>
-#include <util/u_inlines.h>
#include <util/u_format.h>
#include "vl_vertex_buffers.h"
#include "vl_types.h"
#ifndef vl_vertex_buffers_h
#define vl_vertex_buffers_h
-#include <assert.h>
#include <pipe/p_state.h>
#include <pipe/p_video_state.h>
#include "vl_types.h"
+/* vertex buffers act as a todo list
+ * uploading all the usefull informations to video ram
+ * so a vertex shader can work with them
+ */
+
+/* inputs to the vertex shaders */
enum VS_INPUT
{
VS_I_RECT,
#include <util/u_rect.h>
#include <util/u_video.h>
#include <util/u_surface.h>
-#include "sp_public.h"
-#include "sp_texture.h"
-
-#define MACROBLOCK_WIDTH 16
-#define MACROBLOCK_HEIGHT 16
-#define BLOCK_WIDTH 8
-#define BLOCK_HEIGHT 8
+#include <vl/vl_defines.h>
#define NUM_BUFFERS 2
#define SP_VIDEO_CONTEXT_H
#include <pipe/p_video_context.h>
+#include <vl/vl_idct.h>
#include <vl/vl_mpeg12_mc_renderer.h>
#include <vl/vl_compositor.h>
struct pipe_screen;
struct pipe_context;
-struct sp_mpeg12_buffer
-{
- struct vl_vertex_buffer vertex_stream;
-
- union
- {
- struct pipe_vertex_buffer all[2];
- struct {
- struct pipe_vertex_buffer quad, stream;
- } individual;
- } vertex_bufs;
-
- struct vl_idct_buffer idct_y, idct_cb, idct_cr;
-
- struct vl_mpeg12_mc_buffer mc;
-};
-
struct sp_mpeg12_context
{
struct pipe_video_context base;
enum pipe_format decode_format;
};
+struct sp_mpeg12_buffer
+{
+ struct vl_vertex_buffer vertex_stream;
+
+ union
+ {
+ struct pipe_vertex_buffer all[2];
+ struct {
+ struct pipe_vertex_buffer quad, stream;
+ } individual;
+ } vertex_bufs;
+
+ struct vl_idct_buffer idct_y, idct_cb, idct_cr;
+
+ struct vl_mpeg12_mc_buffer mc;
+};
+
struct pipe_video_context *
sp_video_create(struct pipe_screen *screen, enum pipe_video_profile profile,
enum pipe_video_chroma_format chroma_format,