17bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/**************************************************************************
27bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König *
37bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * Copyright 2013 Advanced Micro Devices, Inc.
47bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * All Rights Reserved.
57bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König *
67bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * Permission is hereby granted, free of charge, to any person obtaining a
77bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * copy of this software and associated documentation files (the
87bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * "Software"), to deal in the Software without restriction, including
97bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * without limitation the rights to use, copy, modify, merge, publish,
107bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * distribute, sub license, and/or sell copies of the Software, and to
117bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * permit persons to whom the Software is furnished to do so, subject to
127bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * the following conditions:
137bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König *
147bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * The above copyright notice and this permission notice (including the
157bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * next paragraph) shall be included in all copies or substantial portions
167bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * of the Software.
177bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König *
187bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
197bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
207bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
217bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR
227bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
237bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
247bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
257bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König *
267bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König **************************************************************************/
277bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
287bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/*
297bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König * Authors:
307bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König *      Christian König <christian.koenig@amd.com>
317bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König *
327bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König */
337bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
347bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König#ifndef RADEON_VIDEO_H
357bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König#define RADEON_VIDEO_H
367bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
37dcfbc006b6b07d41338b87c64cdc01c36608087bMarek Olšák#include "radeon/radeon_winsys.h"
387bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König#include "vl/vl_video_buffer.h"
397bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
407bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König#define RVID_ERR(fmt, args...) \
417bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König	fprintf(stderr, "EE %s:%d %s UVD - "fmt, __FILE__, __LINE__, __func__, ##args)
427bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
437bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* video buffer representation */
447bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian Königstruct rvid_buffer
457bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König{
464bc0059229f212e91ca266ef3f80b652b1cdcb86Christian König	unsigned		usage;
474bc0059229f212e91ca266ef3f80b652b1cdcb86Christian König	struct r600_resource	*res;
487bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König};
497bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
507bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* generate an stream handle */
517bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian Königunsigned rvid_alloc_stream_handle(void);
527bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
537bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* create a buffer in the winsys */
544bc0059229f212e91ca266ef3f80b652b1cdcb86Christian Königbool rvid_create_buffer(struct pipe_screen *screen, struct rvid_buffer *buffer,
554bc0059229f212e91ca266ef3f80b652b1cdcb86Christian König			unsigned size, unsigned usage);
567bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
577bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* destroy a buffer */
587bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian Königvoid rvid_destroy_buffer(struct rvid_buffer *buffer);
597bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
607bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* reallocate a buffer, preserving its content */
614bc0059229f212e91ca266ef3f80b652b1cdcb86Christian Königbool rvid_resize_buffer(struct pipe_screen *screen, struct radeon_winsys_cs *cs,
627bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König			struct rvid_buffer *new_buf, unsigned new_size);
637bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
647bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* clear the buffer with zeros */
654dfdcdb4b394df72da769806a0b64025e475f8b3Christian Königvoid rvid_clear_buffer(struct pipe_context *context, struct rvid_buffer* buffer);
667bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
677bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* join surfaces into the same buffer with identical tiling params
687bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König   sumup their sizes and replace the backend buffers with a single bo */
69c868974396e95d900c7754bce38c0c950f6e3ab6Nicolai Hähnlevoid rvid_join_surfaces(struct radeon_winsys* ws,
707bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König                        struct pb_buffer** buffers[VL_NUM_COMPONENTS],
71a582b22c6382f24d921e9fe8a24917100c1396f1Marek Olšák                        struct radeon_surf *surfaces[VL_NUM_COMPONENTS]);
727bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
737bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* returns supported codecs and other parameters */
747bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian Königint rvid_get_video_param(struct pipe_screen *screen,
757bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König                         enum pipe_video_profile profile,
767bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König                         enum pipe_video_entrypoint entrypoint,
777bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König                         enum pipe_video_cap param);
787bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
797bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König/* the hardware only supports NV12 */
807bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian Königboolean rvid_is_format_supported(struct pipe_screen *screen,
817bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König                                 enum pipe_format format,
827bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König                                 enum pipe_video_profile profile,
837bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König                                 enum pipe_video_entrypoint entrypoint);
847bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König
857bcfb0bc8ffed0db244cf0b3d4e200add590a02aChristian König#endif // RADEON_VIDEO_H
86