blob: 73a6ef7bbe6c81850c1805a64694da9d1071727b [file] [log] [blame]
/*
* SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates <open-source-office@arm.com>
* SPDX-License-Identifier: Apache-2.0
*
* 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 VIDEO_DRV_H
#define VIDEO_DRV_H
#ifdef __cplusplus
extern "C"
{
#endif
#include <stdint.h>
/* Video Channel */
#define VIDEO_DRV_IN0 (0UL) ///< Video Input channel 0
#define VIDEO_DRV_OUT0 (1UL) ///< Video Output channel 0
#define VIDEO_DRV_IN1 (2UL) ///< Video Input channel 1
#define VIDEO_DRV_OUT1 (3UL) ///< Video Output channel 1
/* Video Event */
#define VIDEO_DRV_EVENT_FRAME (1UL << 0) ///< Video frame received
#define VIDEO_DRV_EVENT_OVERFLOW (1UL << 1) ///< Video buffer overflow
#define VIDEO_DRV_EVENT_UNDERFLOW (1UL << 2) ///< Video buffer underflow
#define VIDEO_DRV_EVENT_EOS (1UL << 3) ///< Video end of stream
/* Video Mode */
#define VIDEO_DRV_MODE_SINGLE (0UL) ///< Single frame
#define VIDEO_DRV_MODE_CONTINUOS (1UL) ///< Continuos stream
/* Return code */
#define VIDEO_DRV_OK (0) ///< Operation succeeded
#define VIDEO_DRV_ERROR (-1) ///< Unspecified error
#define VIDEO_DRV_ERROR_PARAMETER (-2) ///< Parameter error
/// Video Color Format
#define COLOR_FORMAT_BEGIN (0UL)
#define COLOR_GRAYSCALE8 (1UL)
#define COLOR_RGB888 (2UL)
#define COLOR_BGR565 (3UL)
#define COLOR_YUV420 (4UL)
#define COLOR_NV12 (5UL)
#define COLOR_NV21 (6UL)
#define COLOR_FORMAT_END (7UL)
/// Video Status
typedef struct {
uint32_t active : 1; ///< Video stream active
uint32_t buf_empty : 1; ///< Video stream buffer empty
uint32_t buf_full : 1; ///< Video stream buffer full
uint32_t overflow : 1; ///< Video buffer overflow (cleared on GetStatus)
uint32_t underflow : 1; ///< Video buffer underflow (cleared on GetStatus)
uint32_t eos : 1; ///< Video end of stream (cleared on GetStatus)
uint32_t reserved : 26;
} VideoDrv_Status_t;
/// \brief Video Events callback function type.
/// \param[in] channel channel number
/// \param[in] event events notification mask
/// \return none
typedef void (*VideoDrv_Event_t) (uint32_t channel, uint32_t event);
/// \brief Initialize Video Interface.
/// \param[in] cb_event pointer to \ref VideoDrv_Event_t
/// \return return code
int32_t VideoDrv_Initialize (VideoDrv_Event_t cb_event);
/// \brief De-initialize Video Interface.
/// \return return code
int32_t VideoDrv_Uninitialize (void);
/// \brief Set Video Interface file.
/// \param[in] channel channel number
/// \param[in] name video filename (pointer to NULL terminated string)
/// \return return code
int32_t VideoDrv_SetFile (uint32_t channel, const char *name);
/// \brief Configure Video Interface.
/// \param[in] channel channel number
/// \param[in] frame_width frame width in pixels
/// \param[in] frame_height frame height in pixels
/// \param[in] color_format pixel color format
/// \param[in] frame_rate frame rate (frames per second)
/// \return return code
int32_t VideoDrv_Configure (uint32_t channel, uint32_t frame_width, uint32_t frame_height, uint32_t color_format, uint32_t frame_rate);
/// \brief Set Video Interface buffer.
/// \param[in] channel channel number
/// \param[in] buf pointer to buffer for video stream
/// \param[in] buf_size video stream buffer size in bytes
/// \return return code
int32_t VideoDrv_SetBuf (uint32_t channel, void *buf, uint32_t buf_size);
/// \brief Flush Video Interface buffer.
/// \param[in] channel channel number
/// \return return code
int32_t VideoDrv_FlushBuf (uint32_t channel);
/// \brief Start Stream on Video Interface.
/// \param[in] channel channel number
/// \param[in] mode stream mode
/// \return return code
int32_t VideoDrv_StreamStart (uint32_t channel, uint32_t mode);
/// \brief Stop Stream on Video Interface.
/// \param[in] channel channel number
/// \return return code
int32_t VideoDrv_StreamStop (uint32_t channel);
/// \brief Get Video Frame buffer.
/// \param[in] channel channel number
/// \return pointer to frame buffer
void *VideoDrv_GetFrameBuf (uint32_t channel);
/// \brief Release Video Frame.
/// \param[in] channel channel number
/// \return return code
int32_t VideoDrv_ReleaseFrame (uint32_t channel);
/// \brief Get Video Interface status.
/// \param[in] channel channel number
/// \return \ref VideoDrv_Status_t
VideoDrv_Status_t VideoDrv_GetStatus (uint32_t channel);
#ifdef __cplusplus
}
#endif
#endif /* VIDEO_DRV_H */