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