158 lines
5.6 KiB
C
158 lines
5.6 KiB
C
/*
|
|
* Copyright (C) 2025 Amlogic, Inc. All rights reserved.
|
|
*
|
|
* All information contained herein is Amlogic confidential.
|
|
*
|
|
* This software is provided to you pursuant to Software License Agreement
|
|
* (SLA) with Amlogic Inc ("Amlogic"). This software may be used
|
|
* only in accordance with the terms of this agreement.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification is strictly prohibited without prior written permission from
|
|
* Amlogic.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#define MEDIAPROXY_MAGIC 'm'
|
|
#define MEDIAPROXY_CONNECT _IOW(MEDIAPROXY_MAGIC, 0, int)
|
|
#define MEDIAPROXY_DISCONNECT _IOW(MEDIAPROXY_MAGIC, 1, int)
|
|
#define MEDIAPROXY_SUBSCRIBE _IOW(MEDIAPROXY_MAGIC, 3, int)
|
|
#define MEDIAPROXY_SET_FIFO_LEN _IOW(MEDIAPROXY_MAGIC, 4, int)
|
|
#define MEDIAPROXY_SET_VDEC_ID _IOW(MEDIAPROXY_MAGIC, 5, int)
|
|
#define MEDIAPROXY_INJECT_BUF_INFO _IOW(MEDIAPROXY_MAGIC, 6, struct aml_buffer_info)
|
|
#define MEDIAPROXY_GET_BUF_INFO _IOWR(MEDIAPROXY_MAGIC, 7, struct aml_buffer_info)
|
|
|
|
enum media_message_type {
|
|
MEDIA_MESSAGE_TYPE_INVALID = 0,
|
|
MEDIA_VDEC_CONNECTED = (1 << 0), // 0001
|
|
MEDIA_VIDEO_FIRST_OUT_FRAME_INFO = (1 << 1), // 0010
|
|
MEDIA_VIDEO_INPUT_INFO = (1 << 2), // 0100
|
|
MEDIA_VIDEO_OUTPUT_INFO = (1 << 3), // 1000
|
|
MEDIA_VIDEO_STATISTIC_INFO = (1 << 4), // 10000
|
|
MEDIA_VIDEO_ERROR_EVENT = (1 << 5), // 100000
|
|
MEDIA_VIDEO_METRICS_FRAME_DECODED_INFO = (1 << 6), // 1000000
|
|
MEDIA_VIDEO_METRICS_FRAME_TOGGLE_INFO = (1 << 7), // 10000000
|
|
MEDIA_VIDEO_METRICS_FRAME_SIGNAFENCE_INFO = (1 << 8), // 1 0000 0000
|
|
MEDIA_VIDEO_CC_INFO = (1 << 9) // 10 0000 0000
|
|
};
|
|
|
|
/*struct from*/
|
|
struct userdata_cc_meta_info_t {
|
|
uint32_t poc_number;
|
|
/************ flags bit definition ***********
|
|
bit 0: //used for mpeg2
|
|
1, group start
|
|
0, not group start
|
|
bit 1-2: //used for mpeg2
|
|
0, extension_and_user_data( 0 )
|
|
1, extension_and_user_data( 1 )
|
|
2, extension_and_user_data( 2 )
|
|
bit 3-6: //video format
|
|
0, VFORMAT_MPEG12
|
|
1, VFORMAT_MPEG4
|
|
2, VFORMAT_H264
|
|
3, VFORMAT_MJPEG
|
|
4, VFORMAT_REAL
|
|
5, VFORMAT_JPEG
|
|
6, VFORMAT_VC1
|
|
7, VFORMAT_AVS
|
|
8, VFORMAT_SW
|
|
9, VFORMAT_H264MVC
|
|
10, VFORMAT_H264_4K2K
|
|
11, VFORMAT_HEVC
|
|
12, VFORMAT_H264_ENC
|
|
13, VFORMAT_JPEG_ENC
|
|
14, VFORMAT_VP9
|
|
bit 7-9: //frame type
|
|
0, Unknown Frame Type
|
|
1, I Frame
|
|
2, B Frame
|
|
3, P Frame
|
|
4, D_Type_MPEG2
|
|
bit 10: //top_field_first_flag valid
|
|
0: top_field_first_flag is not valid
|
|
1: top_field_first_flag is valid
|
|
bit 11: //top_field_first bit val
|
|
**********************************************/
|
|
uint32_t flags;
|
|
uint32_t vpts; /*video frame pts*/
|
|
/******************************************
|
|
0: pts is invalid, please use duration to calculate
|
|
1: pts is valid
|
|
******************************************/
|
|
uint32_t vpts_valid;
|
|
/*duration for frame*/
|
|
uint32_t duration;
|
|
/* how many records left in queue waiting to be read*/
|
|
uint32_t records_in_que;
|
|
unsigned long long priv_data;
|
|
uint32_t padding_data[4];
|
|
uint8_t cc_meta_data_ext[0]; /* dynamically alloc for additional info*/
|
|
};
|
|
|
|
struct v4l_meta_info_t {
|
|
uint32_t v4l_meta_type; /* type of v4l_meta_info*/
|
|
uint8_t v4l_meta_data_ext[0]; /* dynamically alloc for additional info*/
|
|
};
|
|
|
|
/**
|
|
* Must keep the same as Mediahal definition.
|
|
* v4l_stream_common_s - structure used for v4l stream mode data information
|
|
*/
|
|
struct v4l_stream_common_s {
|
|
uint32_t version; /* version number of the interface*/
|
|
uint32_t instance_id; /* id of current instance*/
|
|
uint32_t meta_type; /* type of the current meta data*/
|
|
uint32_t meta_data_ext_size; /* count of meta data ext size, such as count of
|
|
cc_meta_data.cc_meta_data_ext[]*/
|
|
uint32_t data_size; /* count of raw userdata, count of data[]*/
|
|
union {
|
|
struct userdata_cc_meta_info_t cc_meta_data; /*cc meta_data */
|
|
struct v4l_meta_info_t v4l_meta_data; /* for future extension */
|
|
uint32_t meta_data_reserved[128]; /* for future extension */
|
|
}; // meta data
|
|
uint8_t data[0]; /* dynamically alloc for additional user data or raw datadata*/
|
|
};
|
|
|
|
/*
|
|
* size
|
|
* the buf size value of ptr
|
|
* ptr
|
|
* the buffer data ptr.
|
|
*/
|
|
struct cc_buffer_info {
|
|
uint32_t size;
|
|
long long ptr;
|
|
};
|
|
|
|
struct aml_buffer_info {
|
|
uint32_t message_type;
|
|
union {
|
|
struct cc_buffer_info buf_info;
|
|
} data;
|
|
};
|
|
|
|
enum mp_role_e {
|
|
MP_ROLE_INVALID,
|
|
MP_ROLE_PRODUCER,
|
|
MP_ROLE_CONSUMER,
|
|
} mp_role_e;
|
|
|
|
enum v4l_stream_meta_type {
|
|
V4L_STREAM_CC_INFO = 0,
|
|
V4L_STREAM_INFO_MAX = 1,
|
|
};
|