mirror of
https://github.com/tuxbox-neutrino/libstb-hal.git
synced 2025-08-26 15:02:58 +02:00
- libeplayer3: sync with max_10
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
static inline int HasADTSHeader(uint8_t *data, int size)
|
||||
{
|
||||
if (size >= AAC_HEADER_LENGTH && 0xFF == data[0] && 0xF0 == (0xF0 & data[1]) &&
|
||||
size == ((data[3] & 0x3) << 11 | data[4] << 3 | data[5] >> 5))
|
||||
size == ((data[3] & 0x3) << 11 | data[4] << 3 | data[5] >> 5))
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
@@ -52,9 +52,12 @@ typedef enum
|
||||
STREAMTYPE_DIVX311 = 13,
|
||||
STREAMTYPE_DIVX4 = 14,
|
||||
STREAMTYPE_DIVX5 = 15,
|
||||
STREAMTYPE_VB6 = 18,
|
||||
STREAMTYPE_VB6 = 18, /* 17 is also valid for ZGEMMA STBs*/
|
||||
STREAMTYPE_SPARK = 21,
|
||||
STREAMTYPE_MJPEG = 30
|
||||
STREAMTYPE_MJPEG = 30,
|
||||
STREAMTYPE_RV30 = 31, /* rv30: RealVideo 8, suspected to based largely on an early draft of H.264 (included with RealPlayer 8)*/
|
||||
STREAMTYPE_RV40 = 32, /* RealVideo 9, RealVideo 10*/
|
||||
STREAMTYPE_AVS2 = 40
|
||||
} video_stream_type_t;
|
||||
|
||||
typedef enum
|
||||
@@ -73,6 +76,8 @@ typedef enum
|
||||
AUDIOTYPE_WMA_PRO = 0x21,
|
||||
AUDIOTYPE_AC3_PLUS = 0x22,
|
||||
AUDIOTYPE_AMR = 0x23,
|
||||
AUDIOTYPE_OPUS = 0x24,
|
||||
AUDIOTYPE_VORBIS = 0x25,
|
||||
AUDIOTYPE_RAW = 0x30
|
||||
} audio_stream_type_t;
|
||||
|
||||
|
@@ -31,4 +31,12 @@ typedef struct Context_s
|
||||
|
||||
int container_ffmpeg_update_tracks(Context_t *context, char *filename, int initial);
|
||||
|
||||
const char *GetGraphicSubPath();
|
||||
int32_t GetGraphicWindowWidth();
|
||||
int32_t GetGraphicWindowHeight();
|
||||
|
||||
void E2iSendMsg(const char *format, ...);
|
||||
void E2iStartMsg(void);
|
||||
void E2iEndMsg(void);
|
||||
|
||||
#endif
|
||||
|
@@ -545,3 +545,39 @@
|
||||
#else
|
||||
#define mjpeg_err(...)
|
||||
#endif
|
||||
|
||||
/*******************************************
|
||||
* bcma
|
||||
*******************************************/
|
||||
#define BCMA_DEBUG_LEVEL 0
|
||||
#define BCMA_SILENT
|
||||
|
||||
#if BCMA_DEBUG_LEVEL
|
||||
#define bcma_printf(...) log_printf(BCMA_DEBUG_LEVEL, __VA_ARGS__)
|
||||
#else
|
||||
#define bcma_printf(...)
|
||||
#endif
|
||||
|
||||
#ifndef BCMA_SILENT
|
||||
#define bcma_err(...) log_error(__VA_ARGS__)
|
||||
#else
|
||||
#define bcma_err(...)
|
||||
#endif
|
||||
|
||||
/*******************************************
|
||||
* plugin
|
||||
*******************************************/
|
||||
#define PLUGIN_DEBUG_LEVEL 0
|
||||
#define PLUGIN_SILENT
|
||||
|
||||
#if PLUGIN_DEBUG_LEVEL
|
||||
#define plugin_printf(...) log_printf(PLUGIN_DEBUG_LEVEL, __VA_ARGS__)
|
||||
#else
|
||||
#define plugin_printf(...)
|
||||
#endif
|
||||
|
||||
#ifndef PLUGIN_SILENT
|
||||
#define plugin_err(...) log_error(__VA_ARGS__)
|
||||
#else
|
||||
#define plugin_err(...)
|
||||
#endif
|
||||
|
@@ -64,16 +64,15 @@ static inline char *getExtension(char *name)
|
||||
static inline uint32_t ReadUint32(uint8_t *buffer)
|
||||
{
|
||||
uint32_t num = (uint32_t)buffer[0] << 24 |
|
||||
(uint32_t)buffer[1] << 16 |
|
||||
(uint32_t)buffer[2] << 8 |
|
||||
(uint32_t)buffer[3];
|
||||
(uint32_t)buffer[1] << 16 |
|
||||
(uint32_t)buffer[2] << 8 |
|
||||
(uint32_t)buffer[3];
|
||||
return num;
|
||||
}
|
||||
|
||||
static inline uint16_t ReadUInt16(uint8_t *buffer)
|
||||
{
|
||||
uint16_t num = (uint16_t)buffer[0] << 8 |
|
||||
(uint16_t)buffer[1];
|
||||
uint16_t num = (uint16_t)buffer[0] << 8 | (uint16_t)buffer[1];
|
||||
return num;
|
||||
}
|
||||
|
||||
|
@@ -60,9 +60,16 @@ typedef struct
|
||||
uint8_t *data;
|
||||
uint32_t len;
|
||||
|
||||
uint8_t *extradata;
|
||||
uint32_t extralen;
|
||||
|
||||
int64_t pts;
|
||||
int64_t dts;
|
||||
int64_t durationMS; // duration in miliseconds
|
||||
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
|
||||
char *type;
|
||||
} SubtitleOut_t;
|
||||
|
||||
|
@@ -31,6 +31,14 @@ typedef struct pcmPrivateData_s
|
||||
int32_t bits_per_coded_sample;
|
||||
int32_t sample_rate;
|
||||
int32_t bit_rate;
|
||||
int32_t ffmpeg_codec_id;
|
||||
|
||||
int32_t block_align;
|
||||
int32_t frame_size;
|
||||
|
||||
int32_t codec_id;
|
||||
|
||||
uint8_t *private_data;
|
||||
uint32_t private_size;
|
||||
} pcmPrivateData_t;
|
||||
|
||||
#endif
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#ifndef pes_123
|
||||
#define pes_123
|
||||
|
||||
#define PES_HEADER_SIZE 9 ///< size of pes header
|
||||
#define PES_HEADER_SIZE 9 ///< size of pes header
|
||||
#define PES_MAX_HEADER_SIZE (PES_HEADER_SIZE + 256) ///< maximal header size
|
||||
#define PES_PRIVATE_DATA_FLAG 0x80
|
||||
#define PES_PRIVATE_DATA_LENGTH 8
|
||||
@@ -13,10 +13,8 @@
|
||||
#define PES_START_CODE_RESERVED_4 0xfd
|
||||
#define PES_VERSION_FAKE_START_CODE 0x31
|
||||
|
||||
|
||||
#define MAX_PES_PACKET_SIZE (65535)
|
||||
|
||||
|
||||
/* start codes */
|
||||
#define PCM_PES_START_CODE 0xbd
|
||||
#define PRIVATE_STREAM_1_PES_START_CODE 0xbd
|
||||
|
@@ -92,7 +92,6 @@ typedef enum
|
||||
VIDEO_ENCODING_PRIVATE
|
||||
} video_encoding_t;
|
||||
|
||||
|
||||
/*
|
||||
* List of possible audio encodings - used to select frame parser and codec.
|
||||
*/
|
||||
@@ -199,93 +198,91 @@ typedef struct dvb_play_info_s
|
||||
typedef dvb_play_info_t video_play_info_t;
|
||||
typedef dvb_play_info_t audio_play_info_t;
|
||||
|
||||
|
||||
typedef enum
|
||||
{
|
||||
#define DVB_OPTION_VALUE_DISABLE 0
|
||||
#define DVB_OPTION_VALUE_ENABLE 1
|
||||
#define DVB_OPTION_VALUE_DISABLE 0
|
||||
#define DVB_OPTION_VALUE_ENABLE 1
|
||||
|
||||
DVB_OPTION_TRICK_MODE_AUDIO = 0,
|
||||
DVB_OPTION_PLAY_24FPS_VIDEO_AT_25FPS = 1,
|
||||
DVB_OPTION_TRICK_MODE_AUDIO = 0,
|
||||
DVB_OPTION_PLAY_24FPS_VIDEO_AT_25FPS = 1,
|
||||
|
||||
#define DVB_OPTION_VALUE_VIDEO_CLOCK_MASTER 0
|
||||
#define DVB_OPTION_VALUE_AUDIO_CLOCK_MASTER 1
|
||||
#define DVB_OPTION_VALUE_SYSTEM_CLOCK_MASTER 2
|
||||
DVB_OPTION_MASTER_CLOCK = 2,
|
||||
#define DVB_OPTION_VALUE_VIDEO_CLOCK_MASTER 0
|
||||
#define DVB_OPTION_VALUE_AUDIO_CLOCK_MASTER 1
|
||||
#define DVB_OPTION_VALUE_SYSTEM_CLOCK_MASTER 2
|
||||
DVB_OPTION_MASTER_CLOCK = 2,
|
||||
|
||||
DVB_OPTION_EXTERNAL_TIME_MAPPING = 3,
|
||||
DVB_OPTION_EXTERNAL_TIME_MAPPING_VSYNC_LOCKED = 31,
|
||||
DVB_OPTION_AV_SYNC = 4,
|
||||
DVB_OPTION_DISPLAY_FIRST_FRAME_EARLY = 5,
|
||||
DVB_OPTION_VIDEO_BLANK = 6,
|
||||
DVB_OPTION_STREAM_ONLY_KEY_FRAMES = 7,
|
||||
DVB_OPTION_STREAM_SINGLE_GROUP_BETWEEN_DISCONTINUITIES = 8,
|
||||
DVB_OPTION_CLAMP_PLAYBACK_INTERVAL_ON_PLAYBACK_DIRECTION_CHANGE = 9,
|
||||
DVB_OPTION_EXTERNAL_TIME_MAPPING = 3,
|
||||
DVB_OPTION_EXTERNAL_TIME_MAPPING_VSYNC_LOCKED = 31,
|
||||
DVB_OPTION_AV_SYNC = 4,
|
||||
DVB_OPTION_DISPLAY_FIRST_FRAME_EARLY = 5,
|
||||
DVB_OPTION_VIDEO_BLANK = 6,
|
||||
DVB_OPTION_STREAM_ONLY_KEY_FRAMES = 7,
|
||||
DVB_OPTION_STREAM_SINGLE_GROUP_BETWEEN_DISCONTINUITIES = 8,
|
||||
DVB_OPTION_CLAMP_PLAYBACK_INTERVAL_ON_PLAYBACK_DIRECTION_CHANGE = 9,
|
||||
|
||||
#define DVB_OPTION_VALUE_PLAYOUT 0
|
||||
#define DVB_OPTION_VALUE_DISCARD 1
|
||||
DVB_OPTION_PLAYOUT_ON_TERMINATE = 10,
|
||||
DVB_OPTION_PLAYOUT_ON_SWITCH = 11,
|
||||
DVB_OPTION_PLAYOUT_ON_DRAIN = 12,
|
||||
#define DVB_OPTION_VALUE_PLAYOUT 0
|
||||
#define DVB_OPTION_VALUE_DISCARD 1
|
||||
DVB_OPTION_PLAYOUT_ON_TERMINATE = 10,
|
||||
DVB_OPTION_PLAYOUT_ON_SWITCH = 11,
|
||||
DVB_OPTION_PLAYOUT_ON_DRAIN = 12,
|
||||
|
||||
DVB_OPTION_VIDEO_ASPECT_RATIO = 13,
|
||||
DVB_OPTION_VIDEO_DISPLAY_FORMAT = 14,
|
||||
DVB_OPTION_VIDEO_ASPECT_RATIO = 13,
|
||||
DVB_OPTION_VIDEO_DISPLAY_FORMAT = 14,
|
||||
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_AUTO 0
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DECODE_ALL 1
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DECODE_ALL_DEGRADE_NON_REFERENCE_FRAMES 2
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_START_DISCARDING_NON_REFERENCE_FRAMES 3
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DECODE_REFERENCE_FRAMES_DEGRADE_NON_KEY_FRAMES 4
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DECODE_KEY_FRAMES 5
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DISCONTINUOUS_KEY_FRAMES 6
|
||||
DVB_OPTION_TRICK_MODE_DOMAIN = 15,
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_AUTO 0
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DECODE_ALL 1
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DECODE_ALL_DEGRADE_NON_REFERENCE_FRAMES 2
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_START_DISCARDING_NON_REFERENCE_FRAMES 3
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DECODE_REFERENCE_FRAMES_DEGRADE_NON_KEY_FRAMES 4
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DECODE_KEY_FRAMES 5
|
||||
#define DVB_OPTION_VALUE_TRICK_MODE_DISCONTINUOUS_KEY_FRAMES 6
|
||||
DVB_OPTION_TRICK_MODE_DOMAIN = 15,
|
||||
|
||||
#define DVB_OPTION_VALUE_DISCARD_LATE_FRAMES_NEVER 0
|
||||
#define DVB_OPTION_VALUE_DISCARD_LATE_FRAMES_ALWAYS 1
|
||||
#define DVB_OPTION_VALUE_DISCARD_LATE_FRAMES_AFTER_SYNCHRONIZE 2
|
||||
DVB_OPTION_DISCARD_LATE_FRAMES = 16,
|
||||
DVB_OPTION_VIDEO_START_IMMEDIATE = 17,
|
||||
DVB_OPTION_REBASE_ON_DATA_DELIVERY_LATE = 18,
|
||||
DVB_OPTION_REBASE_ON_FRAME_DECODE_LATE = 19,
|
||||
DVB_OPTION_LOWER_CODEC_DECODE_LIMITS_ON_FRAME_DECODE_LATE = 20,
|
||||
DVB_OPTION_H264_ALLOW_NON_IDR_RESYNCHRONIZATION = 21,
|
||||
DVB_OPTION_MPEG2_IGNORE_PROGESSIVE_FRAME_FLAG = 22,
|
||||
DVB_OPTION_AUDIO_SPDIF_SOURCE = 23,
|
||||
#define DVB_OPTION_VALUE_DISCARD_LATE_FRAMES_NEVER 0
|
||||
#define DVB_OPTION_VALUE_DISCARD_LATE_FRAMES_ALWAYS 1
|
||||
#define DVB_OPTION_VALUE_DISCARD_LATE_FRAMES_AFTER_SYNCHRONIZE 2
|
||||
DVB_OPTION_DISCARD_LATE_FRAMES = 16,
|
||||
DVB_OPTION_VIDEO_START_IMMEDIATE = 17,
|
||||
DVB_OPTION_REBASE_ON_DATA_DELIVERY_LATE = 18,
|
||||
DVB_OPTION_REBASE_ON_FRAME_DECODE_LATE = 19,
|
||||
DVB_OPTION_LOWER_CODEC_DECODE_LIMITS_ON_FRAME_DECODE_LATE = 20,
|
||||
DVB_OPTION_H264_ALLOW_NON_IDR_RESYNCHRONIZATION = 21,
|
||||
DVB_OPTION_MPEG2_IGNORE_PROGESSIVE_FRAME_FLAG = 22,
|
||||
DVB_OPTION_AUDIO_SPDIF_SOURCE = 23,
|
||||
|
||||
DVB_OPTION_H264_ALLOW_BAD_PREPROCESSED_FRAMES = 24,
|
||||
DVB_OPTION_CLOCK_RATE_ADJUSTMENT_LIMIT_2_TO_THE_N_PARTS_PER_MILLION = 25, /* Value = N */
|
||||
DVB_OPTION_LIMIT_INPUT_INJECT_AHEAD = 26,
|
||||
DVB_OPTION_H264_ALLOW_BAD_PREPROCESSED_FRAMES = 24,
|
||||
DVB_OPTION_CLOCK_RATE_ADJUSTMENT_LIMIT_2_TO_THE_N_PARTS_PER_MILLION = 25, /* Value = N */
|
||||
DVB_OPTION_LIMIT_INPUT_INJECT_AHEAD = 26,
|
||||
|
||||
#define DVB_OPTION_VALUE_MPEG2_APPLICATION_MPEG2 0
|
||||
#define DVB_OPTION_VALUE_MPEG2_APPLICATION_ATSC 1
|
||||
#define DVB_OPTION_VALUE_MPEG2_APPLICATION_DVB 2
|
||||
DVB_OPTION_MPEG2_APPLICATION_TYPE = 27,
|
||||
#define DVB_OPTION_VALUE_MPEG2_APPLICATION_MPEG2 0
|
||||
#define DVB_OPTION_VALUE_MPEG2_APPLICATION_ATSC 1
|
||||
#define DVB_OPTION_VALUE_MPEG2_APPLICATION_DVB 2
|
||||
DVB_OPTION_MPEG2_APPLICATION_TYPE = 27,
|
||||
|
||||
#define DVB_OPTION_VALUE_DECIMATE_DECODER_OUTPUT_DISABLED 0
|
||||
#define DVB_OPTION_VALUE_DECIMATE_DECODER_OUTPUT_HALF 1
|
||||
#define DVB_OPTION_VALUE_DECIMATE_DECODER_OUTPUT_QUARTER 2
|
||||
DVB_OPTION_DECIMATE_DECODER_OUTPUT = 28,
|
||||
#define DVB_OPTION_VALUE_DECIMATE_DECODER_OUTPUT_DISABLED 0
|
||||
#define DVB_OPTION_VALUE_DECIMATE_DECODER_OUTPUT_HALF 1
|
||||
#define DVB_OPTION_VALUE_DECIMATE_DECODER_OUTPUT_QUARTER 2
|
||||
DVB_OPTION_DECIMATE_DECODER_OUTPUT = 28,
|
||||
|
||||
DVB_OPTION_PTS_FORWARD_JUMP_DETECTION_THRESHOLD = 29,
|
||||
DVB_OPTION_H264_TREAT_DUPLICATE_DPB_AS_NON_REFERENCE_FRAME_FIRST = 30,
|
||||
DVB_OPTION_PTS_FORWARD_JUMP_DETECTION_THRESHOLD = 29,
|
||||
DVB_OPTION_H264_TREAT_DUPLICATE_DPB_AS_NON_REFERENCE_FRAME_FIRST = 30,
|
||||
|
||||
DVB_OPTION_PIXEL_ASPECT_RATIO_CORRECTION = 32,
|
||||
DVB_OPTION_PIXEL_ASPECT_RATIO_CORRECTION = 32,
|
||||
|
||||
DVB_OPTION_H264_FORCE_PIC_ORDER_CNT_IGNORE_DPB_DISPLAY_FRAME_ORDERING = 33,
|
||||
|
||||
DVB_OPTION_PTS_SYMMETRIC_JUMP_DETECTION = 34,
|
||||
DVB_OPTION_PTS_SYMMETRIC_JUMP_DETECTION = 34,
|
||||
|
||||
DVB_OPTION_ALLOW_FRAME_DISCARD_AT_NORMAL_SPEED = 35,
|
||||
DVB_OPTION_ALLOW_FRAME_DISCARD_AT_NORMAL_SPEED = 35,
|
||||
|
||||
/* OPTION_MAX must always be one greater than largest option - currently DVB_OPTION_ALLOW_FRAME_DISCARD_AT_NORMAL_SPEED */
|
||||
|
||||
DVB_OPTION_MAX = 35
|
||||
DVB_OPTION_MAX = 35
|
||||
} dvb_option_t;
|
||||
|
||||
// Legacy typo correction
|
||||
#define DVP_OPTION_H264_FORCE_PIC_ORDER_CNT_IGNORE_DPB_DISPLAY_FRAME_ORDERING DVB_OPTION_H264_FORCE_PIC_ORDER_CNT_IGNORE_DPB_DISPLAY_FRAME_ORDERING
|
||||
|
||||
|
||||
typedef dvb_option_t video_option_t;
|
||||
|
||||
/* Decoder commands */
|
||||
@@ -296,7 +293,6 @@ typedef dvb_option_t video_option_t;
|
||||
#define VIDEO_CMD_SET_OPTION (4)
|
||||
#define VIDEO_CMD_GET_OPTION (5)
|
||||
|
||||
|
||||
/* Flags for VIDEO_CMD_FREEZE */
|
||||
#define VIDEO_CMD_FREEZE_TO_BLACK (1 << 0)
|
||||
|
||||
|
@@ -27,8 +27,6 @@ typedef struct
|
||||
WriteV_t WriteV;
|
||||
} WriterAVCallData_t;
|
||||
|
||||
|
||||
|
||||
typedef struct WriterCaps_s
|
||||
{
|
||||
char *name;
|
||||
@@ -61,8 +59,9 @@ extern Writer_t WriterAudioDTS;
|
||||
extern Writer_t WriterAudioWMA;
|
||||
extern Writer_t WriterAudioWMAPRO;
|
||||
extern Writer_t WriterAudioFLAC;
|
||||
extern Writer_t WriterAudioVORBIS;
|
||||
extern Writer_t WriterAudioAMR;
|
||||
extern Writer_t WriterAudioVORBIS;
|
||||
extern Writer_t WriterAudioOPUS;
|
||||
|
||||
extern Writer_t WriterVideoMPEG1;
|
||||
extern Writer_t WriterVideoMPEG2;
|
||||
@@ -84,6 +83,9 @@ extern Writer_t WriterVideoVP9;
|
||||
extern Writer_t WriterVideoMJPEG;
|
||||
extern Writer_t WriterFramebuffer;
|
||||
extern Writer_t WriterPipe;
|
||||
extern Writer_t WriterVideoRV30;
|
||||
extern Writer_t WriterVideoRV40;
|
||||
extern Writer_t WriterVideoAVS2;
|
||||
|
||||
Writer_t *getWriter(char *encoding);
|
||||
|
||||
@@ -96,4 +98,45 @@ ssize_t WriteWithRetry(Context_t *context, int pipefd, int fd, void *pDVBMtx, co
|
||||
void FlushPipe(int pipefd);
|
||||
|
||||
ssize_t WriteExt(WriteV_t _call, int fd, void *data, size_t size);
|
||||
|
||||
// Subtitles
|
||||
|
||||
typedef enum
|
||||
{
|
||||
SUBTITLE_CODEC_ID_UNKNOWN,
|
||||
SUBTITLE_CODEC_ID_SUBRIP,
|
||||
SUBTITLE_CODEC_ID_ASS,
|
||||
SUBTITLE_CODEC_ID_WEBVTT,
|
||||
SUBTITLE_CODEC_ID_PGS,
|
||||
SUBTITLE_CODEC_ID_DVB,
|
||||
SUBTITLE_CODEC_ID_XSUB
|
||||
} SubtitleCodecId_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SubtitleCodecId_t codecId;
|
||||
uint32_t trackId;
|
||||
uint8_t *data;
|
||||
uint32_t len;
|
||||
int64_t pts;
|
||||
int64_t dts;
|
||||
uint8_t *private_data;
|
||||
uint32_t private_size;
|
||||
|
||||
int64_t durationMS; // duration in miliseconds
|
||||
|
||||
int width;
|
||||
int height;
|
||||
} WriterSubCallData_t;
|
||||
|
||||
typedef struct SubWriter_s
|
||||
{
|
||||
int32_t (* open)(SubtitleCodecId_t codecId, uint8_t *extradata, int extradata_size);
|
||||
int32_t (* close)();
|
||||
int32_t (* reset)();
|
||||
int32_t (* write)(WriterSubCallData_t *);
|
||||
} SubWriter_t;
|
||||
|
||||
extern SubWriter_t WriterSubPGS;
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user