/* GStreamer * Copyright (C) 2023 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef __GST_AML_DEFS_H__ #define __GST_AML_DEFS_H__ #define DEFAULT_RAW_CAPS \ "video/x-raw; " \ "audio/x-raw; " \ "text/x-raw; " \ "subpicture/x-dvd; " \ "subpicture/x-pgs" /* context lock */ #define AMLHWDMX_CONTEXT_GET_LOCK(amlhwdmx) (&((amlhwdmx)->context_lock)) #define AMLHWDMX_CONTEXT_LOCK(amlhwdmx) \ G_STMT_START \ { \ GST_TRACE("Locking from thread %p", g_thread_self()); \ g_mutex_lock(AMLHWDMX_CONTEXT_GET_LOCK(amlhwdmx)); \ GST_TRACE("Locked from thread %p", g_thread_self()); \ } \ G_STMT_END #define AMLHWDMX_CONTEXT_UNLOCK(amlhwdmx) \ G_STMT_START \ { \ GST_TRACE("Unlocking from thread %p", g_thread_self()); \ g_mutex_unlock(AMLHWDMX_CONTEXT_GET_LOCK(amlhwdmx)); \ } \ G_STMT_END /* wait lock */ #define AMLHWDMX_WAIT_LOCK(m) \ G_STMT_START \ { \ GST_TRACE("locking tlock from thread %p", g_thread_self()); \ g_mutex_lock(&m->wait_lock); \ GST_TRACE("locked tlock from thread %p", g_thread_self()); \ } \ G_STMT_END #define AMLHWDMX_WAIT_UNLOCK(m) \ G_STMT_START \ { \ GST_TRACE("unlocking tlock from thread %p", g_thread_self()); \ g_mutex_unlock(&m->wait_lock); \ } \ G_STMT_END #define AMLHWDMX_WAIT_WAIT(m) \ G_STMT_START \ { \ GST_TRACE("thread %p waiting", g_thread_self()); \ g_cond_wait(&m->wait_cond, &m->wait_lock); \ } \ G_STMT_END #define AMLHWDMX_WAIT_WAIT_TIME(m, wait_time, ret) \ G_STMT_START \ { \ GST_TRACE("thread %p waiting for:%d(ms)", g_thread_self(), wait_time); \ ret = g_cond_wait_until(&m->wait_cond, &m->wait_lock, g_get_monotonic_time() + wait_time); \ } \ G_STMT_END #define AMLHWDMX_WAIT_SIGNAL(m) \ G_STMT_START \ { \ GST_TRACE("signaling from thread %p", g_thread_self()); \ g_cond_signal(&m->wait_cond); \ } \ G_STMT_END /* pts lock */ #define AMLHWDMX_PTS_GET_LOCK(amlhwdmx) (&((amlhwdmx->sinkpad).update_pts_lock)) #define AMLHWDMX_PTS_LOCK(amlhwdmx) \ G_STMT_START \ { \ GST_TRACE("Locking from thread %p", g_thread_self()); \ g_mutex_lock(AMLHWDMX_PTS_GET_LOCK(amlhwdmx)); \ GST_TRACE("Locked from thread %p", g_thread_self()); \ } \ G_STMT_END #define AMLHWDMX_PTS_UNLOCK(amlhwdmx) \ G_STMT_START \ { \ GST_TRACE("Unlocking from thread %p", g_thread_self()); \ g_mutex_unlock(AMLHWDMX_PTS_GET_LOCK(amlhwdmx)); \ } \ G_STMT_END /** default size **/ /* dmx section filter buffer size */ #define SECTION_FILTER_BUF_SIZE 1024 * 1024 /* dmx sec audio ts segemented size */ #define AMLHWDMX_SEC_AUDIO_TS_SEGMENTED_BUF_SIZE (188 * 16) #define AMLHWDMX_SEC_VIDEO_TS_SEGMENTED_BUF_SIZE (188 * 16 * 2) #define AMLHWDMX_SEC_AUDIO_TS_SEGMENTED_DELAY (10 * 1000) //10ms #define AMLHWDMX_SEC_VIDEO_TS_SEGMENTED_DELAY (2 * 1000) //1ms /* dmx es buffer threshold */ #define AMLHWDMX_SEC_DMC_BUF_SIZE 44 * 1024 * 1024 #define AMLHWDMX_MAX_ES_BUF_SIZE 10 * 1024 * 1024 #define AMLHWDMX_MIN_ES_BUF_SIZE 4 * 1024 * 1024 #define AMLHWDMX_HW_BUF_CONTROL_THRESHOLD 100 /* dmx es ring buffer threshold */ #define AMLHWDMX_CLEAR_VIDEO_ES_RING_BUF_SIZE AMLHWDMX_MAX_ES_BUF_SIZE #define AMLHWDMX_DEFAULT_ES_RING_BUF_SIZE 2 * 1024 * 1024 #define AMLHWDMX_DEFAULT_LBM_THRESHOLD 200 // ms /* dmx es buffer head size */ #define NON_SEC_BUF_HEADER_SIZE (32) #define SEC_BUF_HEADER_SIZE (40) /* clear adaptor size */ #define MAX_BUFFER_SIZE (AMLHWDMX_MAX_ES_BUF_SIZE / 188 * 188) #define LOW_BUFFER_SIZE (188 * 10) #define BUFFER_SIZE LOW_BUFFER_SIZE /* secure adaptor size */ #define SEC_BUF_QUEUE_MAX_SIZE 256 #define SEC_BUF_QUEUE_MIN_SIZE 10 //don't cfg to 0. 0 will case eos misjudgment #define SEC_BUF_QUEUE_NEEDED_SIZE 1 #define SEC_BUF_QUEUE_UNLIMIT_SIZE -1 /* dmx es buffer pts threshold(ms) */ #define AMLHWDMX_MAX_ES_BUF_PTS_DIFF (1000 * GST_MSECOND) /* dmx es drain threshold(ms) */ #define AMLHWDMX_ES_DRAIN_TIME_DIFF (200 * GST_MSECOND) /* dmx ts gap threshold(s) */ #define AMLHWDMX_TS_GAP_TH (60 * GST_SECOND) /* dmx nums */ #define DMX_DEV_NUM 8 #define DMX_DVB_RESERVE_NUM 3 /* other size */ #define RW_TIMEOUT 30000 #define MAX_WRITE_RETRY_NUM 100 #define INVALID_PID -1 #define MAX_AUDIO_STREAM_PER_PROGRAM 10 /** cfgs **/ // #define DEFAULT_TS_MODE TS_DEMOD #define DEFAULT_TS_MODE TS_MEMORY #define ENABLE_MEM_CHECK 1 #define ENABLE_AUDIO_REMOVAL_FOR_TRICK_MODES 1 /** event **/ #define AMLHWDMX_EVENT_HAVE_VIDEO 0x01 #define AMLHWDMX_EVENT_HAVE_AUDIO 0x02 #define AMLHWDMX_EVENT_FIRST_VIDEO_FRAME 0x03 #define AMLHWDMX_EVENT_FIRST_AUDIO_FRAME 0x04 /** macro **/ #ifndef UNUSED #define UNUSED(x) (void)(x) #endif /** default property value **/ #define DEFAULT_PROGRAM_NO 0 #define DEFAULT_PROGRAM_INDEX 0 #define DEFAULT_AUDIO_TRACK_NUM 0 #define DEFAULT_SELECTED_AUDIO_TRACK 0 #define DEFAULT_SHOW_LAST_FRAME 1 #define DEFAULT_VIDEO_RECTANGLE "0,0,0,0" #define DEFAULT_AUDIO_MUTE 0 #define DEFAULT_POSITION 1 #define DEFAULT_RESOLUTION -1 #define DEFAULT_VIDEO_MUTE 0 #define DEFAULT_VOLUME 1.0 #define DEFAULT_IS_LIVE TRUE // #define DEFAULT_IS_LIVE FALSE #define DEFAULT_IS_SECURE TRUE #define DEFAULT_IS_SECURE_ES TRUE /** aml ts info **/ #define GST_AML_TS_INFO_QUERY_NAME "aml-ts-info" #define GST_AML_TS_INFO_VIDEO_CODEC_ID "video-codec-id" #define GST_AML_TS_INFO_AUDIO_CODEC_ID "audio-codec-id" #define GST_AML_TS_INFO_VIDEO_PID "video-pid" #define GST_AML_TS_INFO_AUDIO_PID "audio-pid" /** dmx filter idx **/ #define AMLHWDMX_FILTER_ALL -1 /** for debug **/ // #define DBG_SECMEM typedef enum { GST_MPEGTS_STREAM_TYPE_RESERVED_00 = 0x00, GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG1 = 0x01, GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2 = 0x02, GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG1 = 0x03, GST_MPEGTS_STREAM_TYPE_AUDIO_MPEG2 = 0x04, GST_MPEGTS_STREAM_TYPE_PRIVATE_SECTIONS = 0x05, GST_MPEGTS_STREAM_TYPE_PRIVATE_PES_PACKETS = 0x06, GST_MPEGTS_STREAM_TYPE_MHEG = 0x07, GST_MPEGTS_STREAM_TYPE_DSM_CC = 0x08, GST_MPEGTS_STREAM_TYPE_H_222_1 = 0x09, GST_MPEGTS_STREAM_TYPE_DSMCC_A = 0x0a, GST_MPEGTS_STREAM_TYPE_DSMCC_B = 0x0b, GST_MPEGTS_STREAM_TYPE_DSMCC_C = 0x0c, GST_MPEGTS_STREAM_TYPE_DSMCC_D = 0x0d, GST_MPEGTS_STREAM_TYPE_AUXILIARY = 0x0e, GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_ADTS = 0x0f, GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG4 = 0x10, GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_LATM = 0x11, GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_PES_PACKETS = 0x12, GST_MPEGTS_STREAM_TYPE_SL_FLEXMUX_SECTIONS = 0x13, GST_MPEGTS_STREAM_TYPE_SYNCHRONIZED_DOWNLOAD = 0x14, GST_MPEGTS_STREAM_TYPE_METADATA_PES_PACKETS = 0x15, GST_MPEGTS_STREAM_TYPE_METADATA_SECTIONS = 0x16, GST_MPEGTS_STREAM_TYPE_METADATA_DATA_CAROUSEL = 0x17, GST_MPEGTS_STREAM_TYPE_METADATA_OBJECT_CAROUSEL = 0x18, GST_MPEGTS_STREAM_TYPE_METADATA_SYNCHRONIZED_DOWNLOAD = 0x19, GST_MPEGTS_STREAM_TYPE_MPEG2_IPMP = 0x1a, GST_MPEGTS_STREAM_TYPE_VIDEO_H264 = 0x1b, GST_MPEGTS_STREAM_TYPE_AUDIO_AAC_CLEAN = 0x1c, GST_MPEGTS_STREAM_TYPE_MPEG4_TIMED_TEXT = 0x1d, GST_MPEGTS_STREAM_TYPE_VIDEO_RVC = 0x1e, GST_MPEGTS_STREAM_TYPE_VIDEO_H264_SVC_SUB_BITSTREAM = 0x1f, GST_MPEGTS_STREAM_TYPE_VIDEO_H264_MVC_SUB_BITSTREAM = 0x20, GST_MPEGTS_STREAM_TYPE_VIDEO_JP2K = 0x21, GST_MPEGTS_STREAM_TYPE_VIDEO_MPEG2_STEREO_ADDITIONAL_VIEW = 0x22, GST_MPEGTS_STREAM_TYPE_VIDEO_H264_STEREO_ADDITIONAL_VIEW = 0x23, GST_MPEGTS_STREAM_TYPE_VIDEO_HEVC = 0x24, GST_MPEGTS_STREAM_TYPE_VIDEO_AVS = 0x42, GST_MPEGTS_STREAM_TYPE_VIDEO_AVS2 = 0xd2, GST_MPEGTS_STREAM_TYPE_VIDEO_AVS3 = 0xd4, GST_MPEGTS_STREAM_TYPE_VIDEO_AVS3_P2 = 0xd6, /* 0x24 - 0x7e : Rec. ITU-T H.222.0 | ISO/IEC 13818-1 Reserved */ GST_MPEGTS_STREAM_TYPE_IPMP_STREAM = 0x7f, GST_MPEGTS_STREAM_TYPE_AUDIO_AC3 = 0x81, GST_MPEGTS_STREAM_TYPE_AUDIO_AC3_PLUS = 0x84, GST_MPEGTS_STREAM_TYPE_AUDIO_EAC3 = 0x87, /* 0x80 - 0xff : User Private (or defined in other specs) */ } GstMpegtsStreamType; /** * GstMpegtsDVBDescriptorType: * * The type of #GstMpegtsDescriptor * * These values correspond to the registered descriptor type from * the various DVB specifications. * * Consult the relevant specifications for more details. */ typedef enum { /* 64-127 DVB tags ETSI EN 300 468 * (Specification for Service Information (SI) in DVB systems) */ GST_MTS_DESC_DVB_NETWORK_NAME = 0x40, GST_MTS_DESC_DVB_SERVICE_LIST = 0x41, GST_MTS_DESC_DVB_STUFFING = 0x42, GST_MTS_DESC_DVB_SATELLITE_DELIVERY_SYSTEM = 0x43, GST_MTS_DESC_DVB_CABLE_DELIVERY_SYSTEM = 0x44, GST_MTS_DESC_DVB_VBI_DATA = 0x45, GST_MTS_DESC_DVB_VBI_TELETEXT = 0x46, GST_MTS_DESC_DVB_BOUQUET_NAME = 0x47, GST_MTS_DESC_DVB_SERVICE = 0x48, GST_MTS_DESC_DVB_COUNTRY_AVAILABILITY = 0x49, GST_MTS_DESC_DVB_LINKAGE = 0x4A, GST_MTS_DESC_DVB_NVOD_REFERENCE = 0x4B, GST_MTS_DESC_DVB_TIME_SHIFTED_SERVICE = 0x4C, GST_MTS_DESC_DVB_SHORT_EVENT = 0x4D, GST_MTS_DESC_DVB_EXTENDED_EVENT = 0x4E, GST_MTS_DESC_DVB_TIME_SHIFTED_EVENT = 0x4F, GST_MTS_DESC_DVB_COMPONENT = 0x50, GST_MTS_DESC_DVB_MOSAIC = 0x51, GST_MTS_DESC_DVB_STREAM_IDENTIFIER = 0x52, GST_MTS_DESC_DVB_CA_IDENTIFIER = 0x53, GST_MTS_DESC_DVB_CONTENT = 0x54, GST_MTS_DESC_DVB_PARENTAL_RATING = 0x55, GST_MTS_DESC_DVB_TELETEXT = 0x56, GST_MTS_DESC_DVB_TELEPHONE = 0x57, GST_MTS_DESC_DVB_LOCAL_TIME_OFFSET = 0x58, GST_MTS_DESC_DVB_SUBTITLING = 0x59, GST_MTS_DESC_DVB_TERRESTRIAL_DELIVERY_SYSTEM = 0x5A, GST_MTS_DESC_DVB_MULTILINGUAL_NETWORK_NAME = 0x5B, GST_MTS_DESC_DVB_MULTILINGUAL_BOUQUET_NAME = 0x5C, GST_MTS_DESC_DVB_MULTILINGUAL_SERVICE_NAME = 0x5D, GST_MTS_DESC_DVB_MULTILINGUAL_COMPONENT = 0x5E, GST_MTS_DESC_DVB_PRIVATE_DATA_SPECIFIER = 0x5F, GST_MTS_DESC_DVB_SERVICE_MOVE = 0x60, GST_MTS_DESC_DVB_SHORT_SMOOTHING_BUFFER = 0x61, GST_MTS_DESC_DVB_FREQUENCY_LIST = 0x62, /** * GST_MTS_DESC_DVB_PARTIAL_TRANSPORT_STREAM: * * Partial Transport Stream descriptor. Only present in SIT Sections. * * See also: %GST_MPEGTS_SECTION_SIT, %GstMpegtsSIT */ GST_MTS_DESC_DVB_PARTIAL_TRANSPORT_STREAM = 0x63, GST_MTS_DESC_DVB_DATA_BROADCAST = 0x64, GST_MTS_DESC_DVB_SCRAMBLING = 0x65, GST_MTS_DESC_DVB_DATA_BROADCAST_ID = 0x66, GST_MTS_DESC_DVB_TRANSPORT_STREAM = 0x67, GST_MTS_DESC_DVB_DSNG = 0x68, GST_MTS_DESC_DVB_PDC = 0x69, GST_MTS_DESC_DVB_AC3 = 0x6A, GST_MTS_DESC_DVB_ANCILLARY_DATA = 0x6B, GST_MTS_DESC_DVB_CELL_LIST = 0x6C, GST_MTS_DESC_DVB_CELL_FREQUENCY_LINK = 0x6D, GST_MTS_DESC_DVB_ANNOUNCEMENT_SUPPORT = 0x6E, GST_MTS_DESC_DVB_APPLICATION_SIGNALING = 0x6F, GST_MTS_DESC_DVB_ADAPTATION_FIELD_DATA = 0x70, GST_MTS_DESC_DVB_SERVICE_IDENTIFIER = 0x71, GST_MTS_DESC_DVB_SERVICE_AVAILABILITY = 0x72, GST_MTS_DESC_DVB_DEFAULT_AUTHORITY = 0x73, GST_MTS_DESC_DVB_RELATED_CONTENT = 0x74, GST_MTS_DESC_DVB_TVA_ID = 0x75, GST_MTS_DESC_DVB_CONTENT_IDENTIFIER = 0x76, GST_MTS_DESC_DVB_TIMESLICE_FEC_IDENTIFIER = 0x77, GST_MTS_DESC_DVB_ECM_REPETITION_RATE = 0x78, GST_MTS_DESC_DVB_S2_SATELLITE_DELIVERY_SYSTEM = 0x79, GST_MTS_DESC_DVB_ENHANCED_AC3 = 0x7A, GST_MTS_DESC_DVB_DTS = 0x7B, GST_MTS_DESC_DVB_AAC = 0x7C, GST_MTS_DESC_DVB_XAIT_LOCATION = 0x7D, GST_MTS_DESC_DVB_FTA_CONTENT_MANAGEMENT = 0x7E, GST_MTS_DESC_DVB_EXTENSION = 0x7F, } GstMpegtsDVBDescriptorType; /* audio codec types(using in seure case. copy from aml_aucpu.h) */ typedef enum { MEDIA_UNKNOWN = 0, /* unknown media */ MEDIA_MPX = 1, /* mpeg audio MP2/MP3 */ MEDIA_AC3 = 2, /* Dolby AC3/EAC3 */ MEDIA_AAC_ADTS = 3, /* AAC-ADTS */ MEDIA_AAC_LOAS = 4, /* AAC-LOAS */ MEDIA_DTS = 5, /* DTS */ MEDIA_TS_SYS = 6, /* TS System information (PAT, PMT, etc) */ MEDIA_PES_SUB = 7, /* PES format subtitle/audio stream */ MEDIA_PTS_PACK = 8, /* PTS pack in proprietary format */ MEDIA_MAX, } GstAucpuStreamType; #endif /* __GST_AML_DEFS_H__ */