Files
BPI-CM9-Linux/aml-comp/vendor/amlogic/aml_subtitleserver/libsubtitle/io/CcSourceMediaProxy.h
T
2026-08-24 10:03:24 +08:00

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,
};