/* * Copyright (C) 2021 Amlogic Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __RENDER_COMMON_H__ #define __RENDER_COMMON_H__ #include #include #include #ifdef __cplusplus extern "C" { #endif #define RENDER_MAX_PLANES 3 /*allocate render buffer flag */ typedef enum _BufferFlag { BUFFER_FLAG_NONE = 0, BUFFER_FLAG_DMA_BUFFER = 1 << 1, BUFFER_FLAG_RAW_BUFFER = 1 << 2, BUFFER_FLAG_LAST_EMPTY_BUFFER = 1 << 3, } RenderBufferFlag; typedef struct _RenderRawBuffer { void *dataPtr; //video render buffer pointer int size; //video render buffer size } RenderRawBuffer; typedef struct _RenderDmaBuffer { int width; int height; int planeCnt; uint32_t handle[RENDER_MAX_PLANES]; uint32_t stride[RENDER_MAX_PLANES]; uint32_t offset[RENDER_MAX_PLANES]; uint32_t size[RENDER_MAX_PLANES]; int fd[RENDER_MAX_PLANES]; } RenderDmaBuffer; typedef struct _RenderBuffer { int id; //buffer id,set by video render int flag; /*render buffer flag, refer to RenderBufferFlag*/ RenderDmaBuffer dma; RenderRawBuffer raw; int64_t pts; //time is nano second int64_t time; //frame display time void *priv; //user data passed to render lib int reserved[4]; //reserved for extend } RenderBuffer; /*video render rectangle*/ typedef struct _RenderRect{ int x; int y; int w; int h; } RenderRect; /*video frame size*/ typedef struct _RenderFrameSize { int width; int height; } RenderFrameSize; typedef struct { int num; //numerator int denom; //denominator } RenderFraction; /*video frame display info*/ typedef struct _FrameDisplayInfo{ int64_t pts; int64_t duration; int reserved[2]; //reserved for extend } FrameDisplayInfo; typedef enum _RenderMsgType { //notify a msg MSG_NOTIFY = 0, //the msg value type is string //frame buffer is released MSG_RELEASE_BUFFER = 100, //the msg value type is RenderBuffer //frame buffer is displayed MSG_DISPLAYED_BUFFER = 101, //the msg value type is RenderBuffer //the frame buffer is droped MSG_DROPPED_BUFFER = 102,//the msg value type is RenderBuffer //first frame displayed msg MSG_FIRST_FRAME = 103, //the msg value type is frame pts //under flow msg MSG_UNDER_FLOW = 104, //the msg value type is null //pause with special pts MSG_PAUSED_PTS = 105, //the msg value type is RenderBuffer //av sync done MSG_AVSYNC_DONE = 106, //the msg value type is null //video freeze msg MSG_FRAME_FREEZE = 107, //the msg value type is FrameDisplayInfo //av re-sync msg MSG_AV_RESYNC = 108, //the msg value type is FrameDisplayInfo } RenderMsgType; /**video format*/ typedef enum { VIDEO_FORMAT_UNKNOWN, VIDEO_FORMAT_ENCODED, VIDEO_FORMAT_I420, VIDEO_FORMAT_YV12, VIDEO_FORMAT_YUY2, VIDEO_FORMAT_UYVY, VIDEO_FORMAT_AYUV, VIDEO_FORMAT_RGBx, VIDEO_FORMAT_BGRx, VIDEO_FORMAT_xRGB, VIDEO_FORMAT_xBGR, VIDEO_FORMAT_RGBA, VIDEO_FORMAT_BGRA, VIDEO_FORMAT_ARGB, VIDEO_FORMAT_ABGR, VIDEO_FORMAT_RGB, VIDEO_FORMAT_BGR, VIDEO_FORMAT_Y41B, VIDEO_FORMAT_Y42B, VIDEO_FORMAT_YVYU, VIDEO_FORMAT_Y444, VIDEO_FORMAT_v210, VIDEO_FORMAT_v216, VIDEO_FORMAT_NV12, VIDEO_FORMAT_NV21, VIDEO_FORMAT_GRAY8, VIDEO_FORMAT_GRAY16_BE, VIDEO_FORMAT_GRAY16_LE, VIDEO_FORMAT_v308, VIDEO_FORMAT_RGB16, VIDEO_FORMAT_BGR16, VIDEO_FORMAT_RGB15, VIDEO_FORMAT_BGR15, VIDEO_FORMAT_UYVP, VIDEO_FORMAT_A420, VIDEO_FORMAT_RGB8P, VIDEO_FORMAT_YUV9, VIDEO_FORMAT_YVU9, VIDEO_FORMAT_IYU1, VIDEO_FORMAT_ARGB64, VIDEO_FORMAT_AYUV64, VIDEO_FORMAT_r210, VIDEO_FORMAT_I420_10BE, VIDEO_FORMAT_I420_10LE, VIDEO_FORMAT_I422_10BE, VIDEO_FORMAT_I422_10LE, VIDEO_FORMAT_Y444_10BE, VIDEO_FORMAT_Y444_10LE, VIDEO_FORMAT_GBR, VIDEO_FORMAT_GBR_10BE, VIDEO_FORMAT_GBR_10LE, VIDEO_FORMAT_NV16, VIDEO_FORMAT_NV24, VIDEO_FORMAT_NV12_64Z32, VIDEO_FORMAT_A420_10BE, VIDEO_FORMAT_A420_10LE, VIDEO_FORMAT_A422_10BE, VIDEO_FORMAT_A422_10LE, VIDEO_FORMAT_A444_10BE, VIDEO_FORMAT_A444_10LE, VIDEO_FORMAT_NV61, VIDEO_FORMAT_P010_10BE, VIDEO_FORMAT_P010_10LE, VIDEO_FORMAT_IYU2, VIDEO_FORMAT_VYUY, VIDEO_FORMAT_GBRA, VIDEO_FORMAT_GBRA_10BE, VIDEO_FORMAT_GBRA_10LE, VIDEO_FORMAT_GBR_12BE, VIDEO_FORMAT_GBR_12LE, VIDEO_FORMAT_GBRA_12BE, VIDEO_FORMAT_GBRA_12LE, VIDEO_FORMAT_I420_12BE, VIDEO_FORMAT_I420_12LE, VIDEO_FORMAT_I422_12BE, VIDEO_FORMAT_I422_12LE, VIDEO_FORMAT_Y444_12BE, VIDEO_FORMAT_Y444_12LE, VIDEO_FORMAT_GRAY10_LE32, VIDEO_FORMAT_NV12_10LE32, VIDEO_FORMAT_NV16_10LE32, VIDEO_FORMAT_NV12_10LE40, VIDEO_FORMAT_Y210, VIDEO_FORMAT_Y410, VIDEO_FORMAT_VUYA, VIDEO_FORMAT_BGR10A2_LE, } RenderVideoFormat; #ifdef __cplusplus } #endif #endif /*__RENDER_COMMON_H__*/