Files
2026-08-24 10:03:24 +08:00

350 lines
15 KiB
C

/* GStreamer
* Copyright (C) 2023 <[email protected]>
*
* 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__ */