Files
BPI-CM9-Linux/aml-comp/multimedia/aml_mp_sdk/include/Aml_MP/Common.h
T
2026-08-24 10:03:24 +08:00

998 lines
36 KiB
C
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* Copyright (c) 2020 Amlogic, Inc. All rights reserved.
*
* This source code is subject to the terms and conditions defined in the
* file 'LICENSE' which is part of this source code package.
*
* Description:
*/
#ifndef _AML_MP_COMMON_H_
#define _AML_MP_COMMON_H_
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <errno.h>
///////////////////////////////////////////////////////////////////////////////
//typedef void* AML_MP_HANDLE;
#define AML_MP_INVALID_HANDLE (0)
#define AML_MP_INVALID_PID (0x1FFF)
#define AML_MP_MAX_PATH_SIZE 512
#define AML_MP_MAX_CODEC_CAPABILITY_STRING_SIZE (1024)
#ifndef AML_MP_DEPRECATED
#define AML_MP_DEPRECATED __attribute((deprecated))
#endif
#ifndef __AML_MP_RESERVE_ALIGNED
#define __AML_MP_RESERVE_ALIGNED __attribute((aligned(sizeof(long))))
#endif
typedef void* AML_MP_PLAYER;
typedef void* AML_MP_DVRRECORDER;
typedef void* AML_MP_DVRPLAYER;
typedef void* AML_MP_CASSESSION;
typedef void* AML_MP_SECMEM;
///////////////////////////////////////////////////////////////////////////////
typedef enum {
AML_MP_CHANNEL_ID_AUTO = 0,
AML_MP_CHANNEL_ID_MAIN,
AML_MP_CHANNEL_ID_PIP,
} Aml_MP_ChannelId;
typedef enum {
AML_MP_DEMUX_ID_DEFAULT = -1,
AML_MP_HW_DEMUX_ID_0 = 0,
AML_MP_HW_DEMUX_ID_1,
AML_MP_HW_DEMUX_ID_2,
AML_MP_HW_DEMUX_ID_3,
AML_MP_HW_DEMUX_ID_4,
AML_MP_HW_DEMUX_ID_5,
AML_MP_HW_DEMUX_ID_6,
AML_MP_HW_DEMUX_ID_7,
AML_MP_HW_DEMUX_ID_MAX,
AML_MP_HW_DEMUX_NB = (AML_MP_HW_DEMUX_ID_MAX - AML_MP_HW_DEMUX_ID_0),
} Aml_MP_DemuxId;
typedef enum {
AML_MP_DEMUX_SOURCE_TS0, /**< Hardware TS input port 0.*/
AML_MP_DEMUX_SOURCE_TS1, /**< Hardware TS input port 1.*/
AML_MP_DEMUX_SOURCE_TS2, /**< Hardware TS input port 2.*/
AML_MP_DEMUX_SOURCE_TS3, /**< Hardware TS input port 3.*/
AML_MP_DEMUX_SOURCE_TS4, /**< Hardware TS input port 4.*/
AML_MP_DEMUX_SOURCE_TS5, /**< Hardware TS input port 5.*/
AML_MP_DEMUX_SOURCE_TS6, /**< Hardware TS input port 6.*/
AML_MP_DEMUX_SOURCE_TS7, /**< Hardware TS input port 7.*/
AML_MP_DEMUX_SOURCE_DMA0, /**< DMA input port 0.*/
AML_MP_DEMUX_SOURCE_DMA1, /**< DMA input port 1.*/
AML_MP_DEMUX_SOURCE_DMA2, /**< DMA input port 2.*/
AML_MP_DEMUX_SOURCE_DMA3, /**< DMA input port 3.*/
AML_MP_DEMUX_SOURCE_DMA4, /**< DMA input port 4.*/
AML_MP_DEMUX_SOURCE_DMA5, /**< DMA input port 5.*/
AML_MP_DEMUX_SOURCE_DMA6, /**< DMA input port 6.*/
AML_MP_DEMUX_SOURCE_DMA7, /**< DMA input port 7.*/
AML_MP_DEMUX_SECSOURCE_DMA0, /**< DMA secure port 0.*/
AML_MP_DEMUX_SECSOURCE_DMA1, /**< DMA secure port 1.*/
AML_MP_DEMUX_SECSOURCE_DMA2, /**< DMA secure port 2.*/
AML_MP_DEMUX_SECSOURCE_DMA3, /**< DMA secure port 3.*/
AML_MP_DEMUX_SECSOURCE_DMA4, /**< DMA secure port 4.*/
AML_MP_DEMUX_SECSOURCE_DMA5, /**< DMA secure port 5.*/
AML_MP_DEMUX_SECSOURCE_DMA6, /**< DMA secure port 6.*/
AML_MP_DEMUX_SECSOURCE_DMA7, /**< DMA secure port 7.*/
AML_MP_DEMUX_SOURCE_DMA0_1, /**< DMA input port 0_1.*/
AML_MP_DEMUX_SOURCE_DMA1_1, /**< DMA input port 1_1.*/
AML_MP_DEMUX_SOURCE_DMA2_1, /**< DMA input port 2_1.*/
AML_MP_DEMUX_SOURCE_DMA3_1, /**< DMA input port 3_1.*/
AML_MP_DEMUX_SOURCE_DMA4_1, /**< DMA input port 4_1.*/
AML_MP_DEMUX_SOURCE_DMA5_1, /**< DMA input port 5_1.*/
AML_MP_DEMUX_SOURCE_DMA6_1, /**< DMA input port 6_1.*/
AML_MP_DEMUX_SOURCE_DMA7_1, /**< DMA input port 7_1.*/
AML_MP_DEMUX_SECSOURCE_DMA0_1, /**< DMA secure port 0_1.*/
AML_MP_DEMUX_SECSOURCE_DMA1_1, /**< DMA secure port 1_1.*/
AML_MP_DEMUX_SECSOURCE_DMA2_1, /**< DMA secure port 2_1.*/
AML_MP_DEMUX_SECSOURCE_DMA3_1, /**< DMA secure port 3_1.*/
AML_MP_DEMUX_SECSOURCE_DMA4_1, /**< DMA secure port 4_1.*/
AML_MP_DEMUX_SECSOURCE_DMA5_1, /**< DMA secure port 5_1.*/
AML_MP_DEMUX_SECSOURCE_DMA6_1, /**< DMA secure port 6_1.*/
AML_MP_DEMUX_SECSOURCE_DMA7_1, /**< DMA secure port 7_1.*/
AML_MP_DEMUX_SOURCE_TS0_1, /**< DMA secure port 0_1.*/
AML_MP_DEMUX_SOURCE_TS1_1, /**< DMA secure port 1_1.*/
AML_MP_DEMUX_SOURCE_TS2_1, /**< DMA secure port 2_1.*/
AML_MP_DEMUX_SOURCE_TS3_1, /**< DMA secure port 3_1.*/
AML_MP_DEMUX_SOURCE_TS4_1, /**< DMA secure port 4_1.*/
AML_MP_DEMUX_SOURCE_TS5_1, /**< DMA secure port 5_1.*/
AML_MP_DEMUX_SOURCE_TS6_1, /**< DMA secure port 6_1.*/
AML_MP_DEMUX_SOURCE_TS7_1, /**< DMA secure port 7_1.*/
} Aml_MP_DemuxSource;
typedef enum {
AML_MP_DEMUX_MEM_SEC_NONE = 0,
AML_MP_DEMUX_MEM_SEC_LEVEL1 = (1 << 10),
AML_MP_DEMUX_MEM_SEC_LEVEL2 = (2 << 10),
AML_MP_DEMUX_MEM_SEC_LEVEL3 = (3 << 10),
AML_MP_DEMUX_MEM_SEC_LEVEL4 = (4 << 10),
AML_MP_DEMUX_MEM_SEC_LEVEL5 = (5 << 10),
AML_MP_DEMUX_MEM_SEC_LEVEL6 = (6 << 10),
AML_MP_DEMUX_MEM_SEC_LEVEL7 = (7 << 10),
} Aml_MP_DemuxMemSecLevel;
///////////////////////////////////////////////////////////////////////////////
typedef enum {
AML_MP_INPUT_SOURCE_TS_DEMOD,
AML_MP_INPUT_SOURCE_TS_MEMORY,
AML_MP_INPUT_SOURCE_ES_MEMORY,
AML_MP_INPUT_SOURCE_USBCAM,
} Aml_MP_InputSourceType;
typedef enum {
AML_MP_INPUT_STREAM_NORMAL,
AML_MP_INPUT_STREAM_ENCRYPTED,
AML_MP_INPUT_STREAM_SECURE_MEMORY,
} Aml_MP_InputStreamType;
/**
* @brief Aml_MP_Option
*
* \param AML_MP_OPTION_PREFER_TUNER_HAL
* playing through TunerHal, playbackpipeline is:
* TunerHal + MediaCodec + AudioTrack
* \param AML_MP_OPTION_MONITOR_PID_CHANGE
* monitor A/V pid change when playing, and report
* AML_MP_PLAYER_EVENT_PID_CHANGED when pid changed
* \param AML_MP_OPTION_PREFER_CTC
* choose liveplayer internally
* \param AML_MP_OPTION_REPORT_SUBTITLE_DATA
* report subtitle data
* \param AML_MP_OPTION_RETAIN_RESOURCE_IN_STOP
* retain resource don't been released when stop player
* \param AML_MP_OPTION_DVR_PLAYBACK
* playing pvr case
*/
typedef enum {
AML_MP_OPTION_PREFER_TUNER_HAL = 1 << 0,
AML_MP_OPTION_MONITOR_PID_CHANGE = 1 << 1,
AML_MP_OPTION_PREFER_CTC = 1 << 2,
AML_MP_OPTION_REPORT_SUBTITLE_DATA = 1 << 3,
AML_MP_OPTION_RETAIN_RESOURCE_IN_STOP = 1 << 4,
AML_MP_OPTION_DVR_PLAYBACK = 1 << 31,
} Aml_MP_Option;
typedef enum {
AML_MP_INPUT_BUFFER_TYPE_NORMAL,
AML_MP_INPUT_BUFFER_TYPE_SECURE,
AML_MP_INPUT_BUFFER_TYPE_TVP,
} Aml_MP_InputBufferType;
typedef struct {
Aml_MP_InputBufferType type;
uint8_t* address;
size_t size;
} Aml_MP_Buffer;
////////////////////////////////////////
typedef enum {
AML_MP_CODEC_UNKNOWN = -1,
AML_MP_VIDEO_CODEC_BASE = 0,
AML_MP_VIDEO_CODEC_MPEG12,
AML_MP_VIDEO_CODEC_MPEG4,
AML_MP_VIDEO_CODEC_H264,
AML_MP_VIDEO_CODEC_VC1,
AML_MP_VIDEO_CODEC_AVS,
AML_MP_VIDEO_CODEC_HEVC,
AML_MP_VIDEO_CODEC_VP9,
AML_MP_VIDEO_CODEC_AVS2,
AML_MP_VIDEO_CODEC_MJPEG,
AML_MP_VIDEO_CODEC_AV1,
AML_MP_VIDEO_CODEC_DVES_AVC, // DVES_AVC
AML_MP_VIDEO_CODEC_DVES_HEVC, // DVES_HEVC
AML_MP_VIDEO_CODEC_VVC,
AML_MP_VIDEO_CODEC_AVS3,
AML_MP_VIDEO_CODEC_MAX,
AML_MP_AUDIO_CODEC_BASE = 1000,
AML_MP_AUDIO_CODEC_MP2, // MPEG audio
AML_MP_AUDIO_CODEC_MP3, // MP3
AML_MP_AUDIO_CODEC_AC3, // AC3
AML_MP_AUDIO_CODEC_EAC3, // DD PLUS
AML_MP_AUDIO_CODEC_DTS, // DD PLUS
AML_MP_AUDIO_CODEC_AAC, // AAC
AML_MP_AUDIO_CODEC_LATM, // AAC LATM
AML_MP_AUDIO_CODEC_PCM, // PCM
AML_MP_AUDIO_CODEC_AC4, // AC4
AML_MP_AUDIO_CODEC_FLAC, // FLAC
AML_MP_AUDIO_CODEC_VORBIS, // VORBIS
AML_MP_AUDIO_CODEC_OPUS, // OPUS
AML_MP_AUDIO_CODEC_PCM_ADPCM_IMA_WAV, // ADPCM
AML_MP_AUDIO_CODEC_HEAAC_V1, // HEAAC V1
AML_MP_AUDIO_CODEC_HEAAC_V2, // HEAAC V2
AML_MP_AUDIO_CODEC_MPEGH, // MPEGH
AML_MP_AUDIO_CODEC_MAX,
AML_MP_SUBTITLE_CODEC_BASE = 2000,
AML_MP_SUBTITLE_CODEC_CC,
AML_MP_SUBTITLE_CODEC_SCTE27,
AML_MP_SUBTITLE_CODEC_DVB,
AML_MP_SUBTITLE_CODEC_TELETEXT,
AML_MP_SUBTITLE_CODEC_TTML, //TTML Subtitle Support
AML_MP_SUBTITLE_CODEC_ASS,
AML_MP_SUBTITLE_CODEC_SUBRIP,
AML_MP_SUBTITLE_CODEC_MAX,
} Aml_MP_CodecID;
typedef struct {
uint16_t pid;
Aml_MP_CodecID videoCodec;
uint32_t width;
uint32_t height;
uint32_t frameRate;
uint8_t extraData[512];
uint32_t extraDataSize;
Aml_MP_DemuxMemSecLevel secureLevel;
long reserved[8];
} Aml_MP_VideoParams;
typedef struct {
uint16_t pid;
Aml_MP_CodecID audioCodec;
uint32_t nChannels;
uint32_t nSampleRate;
uint8_t extraData[512];
uint32_t extraDataSize;
Aml_MP_DemuxMemSecLevel secureLevel;
long reserved[8];
} Aml_MP_AudioParams;
////////////////////////////////////////
typedef struct {
int pid;
Aml_MP_CodecID subtitleCodec;
Aml_MP_CodecID videoFormat; //cc
int channelId; //cc
int ancillaryPageId; //dvb
int compositionPageId; //dvb
int flag; //1: use secure memory, 0:use normal memory
int demuxId;
long reserved[6];
} Aml_MP_SubtitleParams;
////////////////////////////////////////
// userData parameter would be set to casSession handle if it's CAS HAL plugin
typedef int (*Aml_MP_CAS_EventCallback)(void* userData, const char *json);
/**\brief Service type of the program*/
typedef enum {
AML_MP_CAS_SERVICE_LIVE_PLAY, /**< Live playing.*/
AML_MP_CAS_SERVICE_PVR_RECORDING, /**< PVR recording.*/
AML_MP_CAS_SERVICE_PVR_PLAY, /**< PVR playback.*/
AML_MP_CAS_SERVICE_PVR_TIMESHIFT_RECORDING, /**< PVR recording for timeshift.*/
AML_MP_CAS_SERVICE_PVR_TIMESHIFT_PLAY, /**< PVR play for timeshift.*/
AML_MP_CAS_SERVICE_TYPE_IPTV = 0x80,
AML_MP_CAS_SERVICE_VERIMATRIX_IPTV, /**< Verimatrix IPTV*/
AML_MP_CAS_SERVICE_VERIMATRIX_WEB, /**<verimatrix WEB*/
AML_MP_CAS_SERVICE_WIDEVINE, /**<widevine*/
AML_MP_CAS_SERVICE_NAGRA_WEB, /**<Nagra web drm play*/
AML_MP_CAS_SERVICE_TYPE_INVALID = 0xFF, /**< Invalid type.*/
} Aml_MP_CASServiceType;
//add for get url info from setdatasource,such as wv
typedef struct {
char license_url[AML_MP_MAX_PATH_SIZE];
char provision_url[AML_MP_MAX_PATH_SIZE];
char request_header[AML_MP_MAX_PATH_SIZE];
char request_body[AML_MP_MAX_PATH_SIZE];
char content_type[AML_MP_MAX_PATH_SIZE];
}Aml_MP_IptvCasHeaders;
#define MAX_ECM_PIDS_NUM 3
typedef struct {
Aml_MP_CodecID videoCodec;
Aml_MP_CodecID audioCodec;
unsigned int caSystemId;
int videoPid;
int audioPid;
int ecmPid[MAX_ECM_PIDS_NUM];
#define AUDIO_ECM_PID_INDEX 0
#define VIDEO_ECM_PID_INDEX 1
Aml_MP_DemuxId demuxId;
//add for vmx get url info
char serverAddress[AML_MP_MAX_PATH_SIZE];
int serverPort;
char keyPath[AML_MP_MAX_PATH_SIZE];
//add for private data to cas
//should care audio and video not same
uint8_t private_data[AML_MP_MAX_PATH_SIZE];
size_t private_size;
Aml_MP_IptvCasHeaders headers;
long reserved[8];
} Aml_MP_IptvCASParams;
////////////////////////////////////////
// Deprecated begin
typedef enum {
AML_MP_CAS_UNKNOWN,
AML_MP_CAS_VERIMATRIX_IPTV,
AML_MP_CAS_WIDEVINE,
AML_MP_CAS_VERIMATRIX_WEB,
} Aml_MP_CASType;
typedef struct {
Aml_MP_CodecID videoCodec;
Aml_MP_CodecID audioCodec;
int videoPid;
int audioPid;
int ecmPid;
Aml_MP_DemuxId demuxId;
char serverAddress[100];
int serverPort;
char keyPath[100];
} Aml_MP_IptvCasParam;
typedef struct {
Aml_MP_CASType type;
union {
Aml_MP_IptvCasParam iptvCasParam;
struct {
uint8_t data[1024];
size_t size;
} casParam;
} u;
} Aml_MP_CASParams AML_MP_DEPRECATED;
// Deprecated end
////////////////////////////////////////
typedef enum {
AML_MP_STREAM_TYPE_UNKNOWN = 0,
AML_MP_STREAM_TYPE_VIDEO,
AML_MP_STREAM_TYPE_AUDIO,
AML_MP_STREAM_TYPE_AD,
AML_MP_STREAM_TYPE_SUBTITLE,
AML_MP_STREAM_TYPE_TELETEXT,
AML_MP_STREAM_TYPE_ECM,
AML_MP_STREAM_TYPE_EMM,
AML_MP_STREAM_TYPE_SECTION,
AML_MP_STREAM_TYPE_PCR,
AML_MP_STREAM_TYPE_STC,
AML_MP_STREAM_TYPE_NB,
} Aml_MP_StreamType;
/* information acquisition flags for audio and video */
typedef enum {
AML_MP_STREAM_TYPE_MASK_VIDEO = 1 << AML_MP_STREAM_TYPE_VIDEO,
AML_MP_STREAM_TYPE_MASK_AUDIO = 1 << AML_MP_STREAM_TYPE_AUDIO,
AML_MP_STREAM_TYPE_MASK_AD = 1 << AML_MP_STREAM_TYPE_AD,
AML_MP_STREAM_TYPE_MASK_SUBTITLE = 1 << AML_MP_STREAM_TYPE_SUBTITLE,
}Aml_MP_StreamTypeMask;
typedef struct {
uint8_t *data; // Caller to provide buffer pointer
size_t dataLength; // The length of the buffer.
size_t actualLength; // Copy the length of the actual json
uint32_t streamTypeMask; // value from Aml_MP_StreamTypeMask
} Aml_MP_AvInfo;
typedef Aml_MP_AvInfo Aml_MP_AvStat;
typedef enum {
AML_MP_DECODING_STATE_STOPPED = 0,
AML_MP_DECODING_STATE_START_PENDING = 1,
AML_MP_DECODING_STATE_STARTED = 2,
AML_MP_DECODING_STATE_PAUSED = 3,
} AML_MP_DecodingState;
////////////////////////////////////////
typedef struct {
int size;
int dataLen;
int bufferedMs;
long reserved[8];
} Aml_MP_BufferItem;
typedef struct {
Aml_MP_BufferItem audioBuffer;
Aml_MP_BufferItem videoBuffer;
Aml_MP_BufferItem subtitleBuffer;
} Aml_MP_BufferStat;
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
typedef enum {
//set/get
AML_MP_PLAYER_PARAMETER_SET_BASE = 0x1000,
AML_MP_PLAYER_PARAMETER_VIDEO_DISPLAY_MODE, //setVideoDisplayMode(Aml_MP_VideoDisplayMode*)
AML_MP_PLAYER_PARAMETER_BLACK_OUT, //setVideoBlackOut(bool*)
AML_MP_PLAYER_PARAMETER_VIDEO_DECODE_MODE, //setVideoDecodeMode(Aml_MP_VideoDecodeMode*)
AML_MP_PLAYER_PARAMETER_VIDEO_PTS_OFFSET, //setVideoPtsOffset(int* ms)
AML_MP_PLAYER_PARAMETER_AUDIO_OUTPUT_MODE, //setAudioOutputMode(Aml_MP_AudioOutputMode*)
AML_MP_PLAYER_PARAMETER_AUDIO_OUTPUT_DEVICE, //setAudioOutputDevice(Aml_MP_AudioOutputDevice*)
AML_MP_PLAYER_PARAMETER_AUDIO_PTS_OFFSET, //setAudioPtsOffset(int* ms)
AML_MP_PLAYER_PARAMETER_AUDIO_BALANCE, //setAudioBalance(Aml_MP_AudioBalance*)
AML_MP_PLAYER_PARAMETER_AUDIO_MUTE, //setAudioMute(bool*)
AML_MP_PLAYER_PARAMETER_CREATE_PARAMS, //setCreateParams(Aml_MP_PlayerCreateParams*)
AML_MP_PLAYER_PARAMETER_NETWORK_JITTER, //setNetworkJitter(int* ms)
AML_MP_PLAYER_PARAMETER_AD_STATE, //setADState(int*)
AML_MP_PLAYER_PARAMETER_AD_MIX_LEVEL, //setADMixLevel(Aml_MP_ADVolume*)
AML_MP_PLAYER_PARAMETER_WORK_MODE, //setWorkMode(Aml_MP_PlayerWorkMode*)
AML_MP_PLAYER_PARAMETER_VIDEO_WINDOW_ZORDER, //setZorder(int*)
AML_MP_PLAYER_PARAMETER_TELETEXT_CONTROL, //amlsub_TeletextControl(AML_MP_TeletextCtrlParam*)
AML_MP_PLAYER_PARAMETER_VENDOR_ID, //setVendorID(int*)
AML_MP_PLAYER_PARAMETER_VIDEO_TUNNEL_ID, //setVideoTunnelID(int*)
AML_MP_PLAYER_PARAMETER_SURFACE_HANDLE, //setSurface(void*)
AML_MP_PLAYER_PARAMETER_AUDIO_PRESENTATION_ID, //setPresentationId(int*)
AML_MP_PLAYER_PARAMETER_USE_TIF, //setUseTif(bool*)
AML_MP_PLAYER_PARAMETER_SPDIF_PROTECTION, //SetSPDIFProtection(int*)
AML_MP_PLAYER_PARAMETER_VIDEO_CROP, //setVideoCrop(Aml_MP_Rect*)
AML_MP_PLAYER_PARAMETER_VIDEO_ERROR_RECOVERY_MODE, //setVideoErrorRecoveryMode(Aml_MP_VideoErrorRecoveryMode*)
AML_MP_PLAYER_PARAMETER_AUDIO_LANGUAGE, //setAudioLanguage(Aml_MP_AudioLanguage*)
AML_MP_PLAYER_PARAMETER_VIDEO_AFD_ASPECT_MODE, //setVideoAFDAspectMode(Aml_MP_VideoAFDAspectMode *)
AML_MP_PLAYER_PARAMETER_LIBDVR_FAKE_PID, //setLibDvrFakePID(int*)
AML_MP_PLAYER_PARAMETER_AUDIO_BLOCK_ALIGN, //setAudioBlockAlign(int*)
AML_MP_PLAYER_PARAMETER_AUDIO_PATCH_ADDRESS, //setAudioPatchAddress(int*)
//get only
AML_MP_PLAYER_PARAMETER_GET_BASE = 0x2000,
AML_MP_PLAYER_PARAMETER_VIDEO_INFO, //getVideoInfo(Aml_MP_VideoInfo*)
AML_MP_PLAYER_PARAMETER_VIDEO_DECODE_STAT, //getVdecStat(Aml_MP_VdecStat*)
AML_MP_PLAYER_PARAMETER_AUDIO_INFO, //getAudioInfo(Aml_MP_AudioInfo*)
AML_MP_PLAYER_PARAMETER_AUDIO_DECODE_STAT, //getAudioDecStat(Aml_MP_AdecStat*)
AML_MP_PLAYER_PARAMETER_SUBTITLE_INFO, //getSubtitleInfo(Aml_MP_SubtitleInfo*)
AML_MP_PLAYER_PARAMETER_SUBTITLE_DECODE_STAT, //getSubtitleDecStat(Aml_MP_SubDecStat*)
AML_MP_PLAYER_PARAMETER_AD_INFO, //getADInfo(Aml_MP_AudioInfo*)
AML_MP_PLAYER_PARAMETER_AD_DECODE_STAT, //getADDecodeStat(Aml_MP_AdecStat*)
AML_MP_PLAYER_PARAMETER_INSTANCE_ID, //getInstanceId(uint32_t*)
AML_MP_PLAYER_PARAMETER_SYNC_ID, //getSyncId(int32_t*)
AML_MP_PLAYER_PARAMETER_VIDEO_SHOW_STATE, //getVideoShowState(bool*)
AML_MP_PLAYER_PARAMETER_AV_INFO_JSON, //getAVInfo(Aml_MP_AvInfo*)
AML_MP_PLAYER_PARAMETER_TSPLAYER_HANDLE, //getTsPlayerHandle(am_tsplayer_handle*)
AML_MP_PLAYER_PARAMETER_AV_STAT_JSON, //getAVStat(Aml_MP_AvStat*)
} Aml_MP_PlayerParameterKey;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_VIDEO_DISPLAY_MODE
typedef enum {
AML_MP_VIDEO_DISPLAY_MODE_NORMAL,
AML_MP_VIDEO_DISPLAY_MODE_FULLSCREEN,
AML_MP_VIDEO_DISPLAY_MODE_LETTER_BOX,
AML_MP_VIDEO_DISPLAY_MODE_PAN_SCAN,
AML_MP_VIDEO_DISPLAY_MODE_COMBINED,
AML_MP_VIDEO_DISPLAY_MODE_WIDTHFULL,
AML_MP_VIDEO_DISPLAY_MODE_HEIGHTFULL,
AML_MP_VIDEO_DISPLAY_MODE_4_3_LETTER_BOX,
AML_MP_VIDEO_DISPLAY_MODE_4_3_PAN_SCAN,
AML_MP_VIDEO_DISPLAY_MODE_4_3_COMBINED,
AML_MP_VIDEO_DISPLAY_MODE_16_9_IGNORE,
AML_MP_VIDEO_DISPLAY_MODE_16_9_LETTER_BOX,
AML_MP_VIDEO_DISPLAY_MODE_16_9_PAN_SCAN,
AML_MP_VIDEO_DISPLAY_MODE_16_9_COMBINED,
AML_MP_VIDEO_DISPLAY_MODE_CUSTOM,
} Aml_MP_VideoDisplayMode;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_VIDEO_DECODE_MODE
typedef enum {
AML_MP_VIDEO_DECODE_MODE_NONE,
AML_MP_VIDEO_DECODE_MODE_IONLY,
AML_MP_VIDEO_DECODE_MODE_PAUSE,
AML_MP_VIDEO_DECODE_MODE_PAUSE_NEXT,
// this mode should only be used with Aml_MP_Player_SetPlaybackRate2 API,
// to conduct a fast mode playback base on iframe only decode and sync render
AML_MP_VIDEO_DECODE_MODE_IONLY_SYNC
} Aml_MP_VideoDecodeMode;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_PLAYER_WORK_MODE
typedef enum {
AML_MP_PLAYER_MODE_NORMAL = 0, // Normal mode
AML_MP_PLAYER_MODE_CACHING_ONLY = 1, // Only caching data, do not decode. Used in FCC
AML_MP_PLAYER_MODE_DECODE_ONLY = 2 // Decode data but do not output
} Aml_MP_PlayerWorkMode;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_AUDIO_OUTPUT_MODE
typedef enum {
AML_MP_AUDIO_OUTPUT_PCM,
AML_MP_AUDIO_OUTPUT_PASSTHROUGH,
AML_MP_AUDIO_OUTPUT_AUTO,
} Aml_MP_AudioOutputMode;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_AUDIO_OUTPUT_DEVICE
typedef enum {
AML_MP_AUDIO_OUTPUT_DEVICE_NORMAL,
AML_MP_AUDIO_OUTPUT_DEVICE_BT,
} Aml_MP_AudioOutputDevice;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_AUDIO_BALANCE
typedef enum {
AML_MP_AUDIO_BALANCE_STEREO,
AML_MP_AUDIO_BALANCE_LEFT,
AML_MP_AUDIO_BALANCE_RIGHT,
AML_MP_AUDIO_BALANCE_SWAP,
AML_MP_AUDIO_BALANCE_LRMIX,
} Aml_MP_AudioBalance;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_AD_MIX_LEVEL
typedef struct {
int masterVolume;
int slaveVolume;
} Aml_MP_ADVolume;
////////////////////////////////////////
typedef enum {
AML_MP_RATIO_4_3,
AML_MP_RATIO_16_9,
AML_MP_RATIO_UNDEFINED = 255
} Aml_MP_VideoRatio;
////////////////////////////////////////
typedef enum {
AML_MP_VIDEO_AFD_ASPECT_MODE_NONE = -1,
AML_MP_VIDEO_AFD_ASPECT_MODE_AUTO,
AML_MP_VIDEO_AFD_ASPECT_MODE_4_3, /* 16:9 video, on 4:3 display/scene -> Centre Cut-Out */
AML_MP_VIDEO_AFD_ASPECT_MODE_16_9, /* 16:9 video, on 4:3 display/scene -> Letter Box */
AML_MP_VIDEO_AFD_ASPECT_MODE_14_9,
AML_MP_VIDEO_AFD_ASPECT_MODE_ZOOM,
AML_MP_VIDEO_AFD_ASPECT_MODE_CUSTOM,
AML_MP_VIDEO_AFD_ASPECT_MODE_MAX,
} Aml_MP_VideoAFDAspectMode;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_VIDEO_INFO
typedef struct {
long numerator;
long denominator;
} Aml_MP_Rational;
typedef struct {
int width;
int height;
int frameRate;
int bitrate;
Aml_MP_VideoRatio ratio64;
Aml_MP_Rational dar __AML_MP_RESERVE_ALIGNED;
long reserved[6];
} Aml_MP_VideoInfo;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_VIDEO_DECODE_STAT
typedef struct {
uint32_t num;
uint32_t type;
uint32_t size;
uint32_t pts;
uint32_t max_qp;
uint32_t avg_qp;
uint32_t min_qp;
uint32_t max_skip;
uint32_t avg_skip;
uint32_t min_skip;
uint32_t max_mv;
uint32_t min_mv;
uint32_t avg_mv;
uint32_t decode_buffer;
} Aml_MP_VideoQos;
typedef struct {
Aml_MP_VideoQos qos;
uint32_t decode_time_cost;/*us*/
uint32_t frame_width;
uint32_t frame_height;
uint32_t frame_rate;
uint32_t bit_depth_luma;//original bit_rate;
uint32_t frame_dur;
uint32_t bit_depth_chroma;//original frame_data;
uint32_t error_count;
uint32_t status;
uint32_t frame_count;
uint32_t error_frame_count;
uint32_t drop_frame_count;
uint64_t total_data;
uint32_t double_write_mode;//original samp_cnt;
uint32_t offset;
uint32_t ratio_control;
uint32_t vf_type;
uint32_t signal_type;
uint32_t pts;
uint64_t pts_us64;
#if 0 // For av param report
uint32_t i_decoded_frames; //i frames decoded
uint32_t i_lost_frames;//i frames can not be decoded
uint32_t i_concealed_frames;//i frames decoded but have some error
uint32_t p_decoded_frames;
uint32_t p_lost_frames;
uint32_t p_concealed_frames;
uint32_t b_decoded_frames;
uint32_t b_lost_frames;
uint32_t b_concealed_frames;
uint32_t av_resynch_counter;
#endif
long reserved[16];
} Aml_MP_VdecStat;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_AUDIO_INFO
typedef struct {
uint32_t sample_rate; // Audio sample rate
uint32_t channels; // Audio channels
uint32_t channel_mask; // Audio channel mask
uint32_t bitrate; // Audio bit rate
long reserved[8];
} Aml_MP_AudioInfo;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_AUDIO_DECODE_STAT
typedef struct {
uint32_t frame_count;
uint32_t error_frame_count;
uint32_t drop_frame_count;
long reserved[8];
} Aml_MP_AdecStat;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_SUBTITLE_INFO
//AML_MP_PLAYER_EVENT_SUBTITLE_INFO
typedef struct {
int what;
int extra;
long reserved[8];
}Aml_MP_SubtitleInfo;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_SUBTITLE_DECODE_STAT
typedef struct {
uint32_t frameCount;
uint32_t errorFrameCount;
uint32_t dropFrameCount;
long reserved[8];
} Aml_MP_SubDecStat;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_TELETEXT_CONTROL
typedef enum {
AML_MP_TT_EVENT_INVALID = -1,
// These are the four FastText shortcuts, usually represented by red, green,
// yellow and blue keys on the handset.
AML_MP_TT_EVENT_QUICK_NAVIGATE_RED = 0,
AML_MP_TT_EVENT_QUICK_NAVIGATE_GREEN,
AML_MP_TT_EVENT_QUICK_NAVIGATE_YELLOW,
AML_MP_TT_EVENT_QUICK_NAVIGATE_BLUE,
// The ten numeric keys used to input page indexes.
AML_MP_TT_EVENT_0,
AML_MP_TT_EVENT_1,
AML_MP_TT_EVENT_2,
AML_MP_TT_EVENT_3,
AML_MP_TT_EVENT_4,
AML_MP_TT_EVENT_5,
AML_MP_TT_EVENT_6,
AML_MP_TT_EVENT_7,
AML_MP_TT_EVENT_8,
AML_MP_TT_EVENT_9,
// This is the home key, which returns to the nominated index page for this service.
AML_MP_TT_EVENT_INDEXPAGE,
// These are used to quickly increment/decrement the page index.
AML_MP_TT_EVENT_NEXTPAGE,
AML_MP_TT_EVENT_PREVIOUSPAGE,
// These are used to navigate the sub-pages when in 'hold' mode.
AML_MP_TT_EVENT_NEXTSUBPAGE,
AML_MP_TT_EVENT_PREVIOUSSUBPAGE,
// These are used to traverse the page history (if caching requested).
AML_MP_TT_EVENT_BACKPAGE,
AML_MP_TT_EVENT_FORWARDPAGE,
// This is used to toggle hold on the current page.
AML_MP_TT_EVENT_HOLD,
// Reveal hidden page content (as defined in EBU specification)
AML_MP_TT_EVENT_REVEAL,
// This key toggles 'clear' mode (page hidden until updated)
AML_MP_TT_EVENT_CLEAR,
// This key toggles 'clock only' mode (page hidden until updated)
AML_MP_TT_EVENT_CLOCK,
// Used to toggle transparent background ('video mix' mode)
AML_MP_TT_EVENT_MIX_VIDEO,
// Used to toggle double height top / double-height bottom / normal height display.
AML_MP_TT_EVENT_DOUBLE_HEIGHT,
// Functional enhancement may offer finer scrolling of double-height display.
AML_MP_TT_EVENT_DOUBLE_SCROLL_UP,
AML_MP_TT_EVENT_DOUBLE_SCROLL_DOWN,
// Used to initiate/cancel 'timer' mode (clear and re-display page at set time)
AML_MP_TT_EVENT_TIMER,
AML_MP_TT_EVENT_GO_TO_PAGE,
AML_MP_TT_EVENT_GO_TO_SUBTITLE
} Aml_MP_TeletextEvent;
typedef struct {
int magazine;
int page;
Aml_MP_TeletextEvent event;
char iso639_lang[4] __AML_MP_RESERVE_ALIGNED;
long reserved[7];
} AML_MP_TeletextCtrlParam;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_VIDEO_CROP
typedef struct {
int32_t left;
int32_t top;
int32_t right;
int32_t bottom;
} Aml_MP_Rect;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_VIDEO_ERROR_RECOVERY_MODE
typedef enum {
AML_MP_VIDEO_ERROR_RECOVERY_DEFAULT, //Use decoder default setting to process error frame
AML_MP_VIDEO_ERROR_RECOVERY_DROP, //Drop frame if any error detected
AML_MP_VIDEO_ERROR_RECOVERY_NONE, //Do nothing after decoding error frame
} Aml_MP_VideoErrorRecoveryMode;
////////////////////////////////////////
//AML_MP_PLAYER_PARAMETER_AUDIO_LANGUAGE
typedef struct {
uint32_t firstLanguage;
uint32_t secondLanguage;
long reserved[8];
} Aml_MP_AudioLanguage;
///////////////////////////////////////////////////////////////////////////////
typedef enum {
AML_MP_AVSYNC_SOURCE_DEFAULT,
AML_MP_AVSYNC_SOURCE_VIDEO,
AML_MP_AVSYNC_SOURCE_AUDIO,
AML_MP_AVSYNC_SOURCE_PCR,
AML_MP_AVSYNC_SOURCE_NOSYNC,
} Aml_MP_AVSyncSource;
///////////////////////////////////////////////////////////////////////////////
enum {
AML_MP_OK = 0,
AML_MP_ERROR = (-2147483647-1),
AML_MP_ERROR_NO_MEMORY = -ENOMEM, // Not enough space
AML_MP_ERROR_INVALID_OPERATION = -ENOSYS, // Function not implemented
AML_MP_ERROR_BAD_VALUE = -EINVAL, // Invalid argument
AML_MP_ERROR_BAD_TYPE = (AML_MP_ERROR+1),
AML_MP_ERROR_NAME_NOT_FOUND = -ENOENT, // No such file or directory
AML_MP_ERROR_PERMISSION_DENIED = -EPERM, // Operation not permitted
AML_MP_ERROR_NO_INIT = -ENODEV, // No such device
AML_MP_ERROR_ALREADY_EXISTS = -EEXIST, // File exists
AML_MP_ERROR_DEAD_OBJECT = -EPIPE, // Broken pipe
AML_MP_ERROR_FAILED_TRANSACTION = (AML_MP_ERROR+2),
AML_MP_ERROR_BAD_INDEX = -EOVERFLOW, // Value too large to be stored in data type
AML_MP_ERROR_NOT_ENOUGH_DATA = -ENODATA, // No message is available on the STREAM head read queue
AML_MP_ERROR_WOULD_BLOCK = -EWOULDBLOCK, // Operation would block
AML_MP_ERROR_TIMED_OUT = -ETIMEDOUT, // Connection timed out
AML_MP_ERROR_UNKNOWN_TRANSACTION = -EBADMSG, // Bad message
AML_MP_ERROR_FDS_NOT_ALLOWED = (AML_MP_ERROR+3),
AML_MP_ERROR_UNEXPECTED_NULL = (AML_MP_ERROR+4),
};
///////////////////////////////////////////////////////////////////////////////
typedef enum {
AML_MP_MISC_FLAG_SCRAMBLED = 0x1,
} Aml_MP_MiscFlags;
///////////////////////////////////////////////////////////////////////////////
#define AML_MP_DVR_STREAMS_COUNT 32
typedef struct {
Aml_MP_StreamType type;
int pid;
Aml_MP_CodecID codecId;
Aml_MP_DemuxMemSecLevel secureLevel;
Aml_MP_MiscFlags miscFlags;
long reserved[7];
} Aml_MP_DVRStream;
typedef struct {
int nbStreams;
Aml_MP_DVRStream streams[AML_MP_DVR_STREAMS_COUNT];
#define AML_MP_DVR_VIDEO_INDEX 0
#define AML_MP_DVR_AUDIO_INDEX 1
#define AML_MP_DVR_AD_INDEX 2
#define AML_MP_DVR_SUBTITLE_INDEX 3
#define AML_MP_DVR_PCR_INDEX 4
#define AML_MP_DVR_STREAM_NB 5
} Aml_MP_DVRStreamArray;
typedef struct {
//coverity[declaration_with_small_time_t]
time_t time; /**< time duration, unit on ms*/
loff_t size; /**< size*/
uint32_t pkts; /**< number of ts packets*/
long reserved[8];
} Aml_MP_DVRSourceInfo;
///////////////////////////////////////////////////////////////////////////////
typedef enum {
AML_MP_EVENT_UNKNOWN = 0x0000,
AML_MP_PLAYER_EVENT_FIRST_FRAME = 0x0001,
AML_MP_PLAYER_EVENT_AV_SYNC_DONE = 0x0002,
AML_MP_PLAYER_EVENT_DATA_LOSS = 0x0003, //Demod data loss
AML_MP_PLAYER_EVENT_DATA_RESUME = 0x0004, //Demod data loss
AML_MP_PLAYER_EVENT_SCRAMBLING = 0x0005,
AML_MP_PLAYER_EVENT_USERDATA_AFD = 0x0006,
AML_MP_PLAYER_EVENT_USERDATA_CC = 0x0007,
AML_MP_PLAYER_EVENT_PID_CHANGED = 0x0008, //param: Aml_MP_PlayerEventPidChangeInfo
AML_MP_PLAYER_EVENT_DECODER_DATA_LOSS = 0x0009, //Decoder data loss
AML_MP_PLAYER_EVENT_DECODER_DATA_RESUME = 0x000A, //Decoder data resume
// DVR player
AML_MP_DVRPLAYER_EVENT_ERROR = 0x1000, /**< Signal a critical playback error*/
AML_MP_DVRPLAYER_EVENT_TRANSITION_OK, /**< transition ok*/
AML_MP_DVRPLAYER_EVENT_TRANSITION_FAILED, /**< transition failed*/
AML_MP_DVRPLAYER_EVENT_KEY_FAILURE, /**< key failure*/
AML_MP_DVRPLAYER_EVENT_NO_KEY, /**< no key*/
AML_MP_DVRPLAYER_EVENT_REACHED_BEGIN, /**< reached begin*/
AML_MP_DVRPLAYER_EVENT_REACHED_END, /**< reached end*/
AML_MP_DVRPLAYER_EVENT_NOTIFY_PLAYTIME, /**< notify play cur segment time ms*/
AML_MP_DVRPLAYER_EVENT_TIMESHIFT_FR_REACHED_BEGIN = 0x100b,
AML_MP_DVRPLAYER_EVENT_TIMESHIFT_FF_REACHED_END,
AML_MP_DVRPLAYER_EVENT_AUTO_RESUMED,
// Video event
AML_MP_PLAYER_EVENT_VIDEO_BASE = 0x2000,
AML_MP_PLAYER_EVENT_VIDEO_CHANGED,
AML_MP_PLAYER_EVENT_VIDEO_DECODE_FIRST_FRAME,
AML_MP_PLAYER_EVENT_VIDEO_OVERFLOW,
AML_MP_PLAYER_EVENT_VIDEO_UNDERFLOW,
AML_MP_PLAYER_EVENT_VIDEO_INVALID_TIMESTAMP,
AML_MP_PLAYER_EVENT_VIDEO_INVALID_DATA,
AML_MP_PLAYER_EVENT_VIDEO_ERROR_FRAME_COUNT,
AML_MP_PLAYER_EVENT_VIDEO_UNSUPPORT,
AML_MP_PLAYER_EVENT_VIDEO_INPUT_BUFFER_DONE,
// Audio event
AML_MP_PLAYER_EVENT_AUDIO_BASE = 0x3000,
AML_MP_PLAYER_EVENT_AUDIO_CHANGED,
AML_MP_PLAYER_EVENT_AUDIO_DECODE_FIRST_FRAME,
AML_MP_PLAYER_EVENT_AUDIO_OVERFLOW,
AML_MP_PLAYER_EVENT_AUDIO_UNDERFLOW,
AML_MP_PLAYER_EVENT_AUDIO_INVALID_TIMESTAMP,
AML_MP_PLAYER_EVENT_AUDIO_INVALID_DATA,
AML_MP_PLAYER_EVENT_AUDIO_INPUT_BUFFER_DONE,
// Subtitle event
AML_MP_PLAYER_EVENT_SUBTITLE_BASE = 0x4000,
AML_MP_PLAYER_EVENT_SUBTITLE_DATA, //param: Aml_MP_SubtitleData*
AML_MP_PLAYER_EVENT_SUBTITLE_AVAIL, //param: int*
AML_MP_PLAYER_EVENT_SUBTITLE_DIMENSION, //param: Aml_MP_SubtitleDimension*
AML_MP_PLAYER_EVENT_SUBTITLE_AFD_EVENT, //param: int*
AML_MP_PLAYER_EVENT_SUBTITLE_CHANNEL_UPDATE, //param: Aml_MP_SubtitleChannelUpdate*
AML_MP_PLAYER_EVENT_SUBTITLE_LANGUAGE, //param: char[4]
AML_MP_PLAYER_EVENT_SUBTITLE_INFO, //param: Aml_MP_SubtitleInfo*
AML_MP_PLAYER_EVENT_SUBTITLE_LOSEDATA,
AML_MP_PLAYER_EVENT_SUBTITLE_TIMEOUT,
AML_MP_PLAYER_EVENT_SUBTITLE_INVALID_TIMESTAMP,
AML_MP_PLAYER_EVENT_SUBTITLE_INVALID_DATA,
//medialayer
AML_MP_MEDIAPLAYER_EVENT_BASE = 0x5000,
AML_MP_MEDIAPLAYER_EVENT_PLAYBACK_COMPLETE,
AML_MP_MEDIAPLAYER_EVENT_PLAYBACK_SOF,
AML_MP_MEDIAPLAYER_EVENT_PREPARED,
AML_MP_MEDIAPLAYER_EVENT_STOPPED,
AML_MP_MEDIAPLAYER_EVENT_MEDIA_ERROR,
AML_MP_MEDIAPLAYER_EVENT_FIRST_FRAME_TOGGLED,
AML_MP_MEDIAPLAYER_EVENT_BUFFERING_START,
AML_MP_MEDIAPLAYER_EVENT_BUFFERING_END,
AML_MP_MEDIAPLAYER_EVENT_VIDEO_UNSUPPORT,
AML_MP_MEDIAPLAYER_EVENT_AUDIO_UNSUPPORT,
} Aml_MP_PlayerEventType;
//AML_MP_PLAYER_EVENT_VIDEO_CHANGED,
typedef struct {
uint32_t frame_width;
uint32_t frame_height;
uint32_t frame_rate;
uint32_t frame_aspectratio;
long reserved[8];
} Aml_MP_PlayerEventVideoFormat;
//AML_MP_PLAYER_EVENT_AUDIO_CHANGED,
typedef struct {
uint32_t sample_rate;
uint32_t channels;
uint32_t channel_mask;
Aml_MP_CodecID audio_codec __AML_MP_RESERVE_ALIGNED;
long reserved[7];
} Aml_MP_PlayerEventAudioFormat;
//AML_MP_PLAYER_EVENT_SCRAMBLING,
typedef struct {
Aml_MP_StreamType type;
char scramling;
long reserved[8];
} Aml_MP_PlayerEventScrambling;
//AML_MP_PLAYER_EVENT_PID_CHANGED
typedef struct {
int programPid;
int programNumber;
Aml_MP_StreamType type;
int oldStreamPid;
int newStreamPid;
union {
Aml_MP_VideoParams videoParams;
Aml_MP_AudioParams audioParams;
Aml_MP_SubtitleParams subtitleParams;
} u;
long reserved[8];
} Aml_MP_PlayerEventPidChangeInfo;
//AML_MP_PLAYER_EVENT_USERDATA_AFD,
//AML_MP_PLAYER_EVENT_USERDATA_CC,
typedef struct {
uint8_t *data;
size_t len;
long reserved[8];
} Aml_MP_PlayerEventMpegUserData;
////////////////////////////////////////
//AML_MP_PLAYER_EVENT_SUBTITLE_DATA
typedef enum {
AML_MP_SUB_DATA_TYPE_STRING = 0,
AML_MP_SUB_DATA_TYPE_CC_JSON = 1,
AML_MP_SUB_DATA_TYPE_BITMAP = 2,
AML_MP_SUB_DATA_TYPE_POSITON_BITMAP = 4,
AML_MP_SUB_DATA_TYPE_POSITION_BITMAP = 4,
AML_MP_SUB_DATA_TYPE_UNKNOWN = 0xFF,
}AML_MP_SubtitleDataType;
typedef struct {
const char *data;
int size;
AML_MP_SubtitleDataType type;
int x;
int y;
int width;
int height;
int videoWidth;
int videoHeight;
int showing;
long reserved[8];
}Aml_MP_SubtitleData;
////////////////////////////////////////
//AML_MP_PLAYER_EVENT_SUBTITLE_DIMENSION
typedef struct {
uint32_t width;
uint32_t height;
long reserved[8];
} Aml_MP_SubtitleDimension;
////////////////////////////////////////
//AML_MP_PLAYER_EVENT_SUBTITLE_CHANNEL_UPDATE
typedef struct {
int event;
int id;
long reserved[8];
}Aml_MP_SubtitleChannelUpdate;
typedef void (*Aml_MP_PlayerEventCallback)(void* userData, Aml_MP_PlayerEventType event, int64_t param);
typedef struct ANativeWindow ANativeWindow;
#endif