350 lines
15 KiB
C
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__ */ |