255 lines
10 KiB
C
255 lines
10 KiB
C
/*
|
|
* 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 MEDIA_SYNC_INTERFACE_H_
|
|
#define MEDIA_SYNC_INTERFACE_H_
|
|
#include <stdint.h>
|
|
|
|
typedef enum {
|
|
MEDIA_SYNC_VMASTER = 0,
|
|
MEDIA_SYNC_AMASTER = 1,
|
|
MEDIA_SYNC_PCRMASTER = 2,
|
|
MEDIA_SYNC_MODE_MAX = 255,
|
|
}sync_mode;
|
|
|
|
typedef enum {
|
|
MEDIA_VIDEO = 0,
|
|
MEDIA_AUDIO = 1,
|
|
MEDIA_DMXPCR = 2,
|
|
MEDIA_SUBTITLE = 3,
|
|
MEDIA_COMMON = 4,
|
|
MEDIA_TYPE_MAX = 255,
|
|
}sync_stream_type;
|
|
|
|
typedef enum {
|
|
MEDIA_SYNC_NOSYNC = 0,
|
|
MEDIA_SYNC_PAUSED = 1,
|
|
MEDIA_SYNC_DISCONTINUE = 2,
|
|
MEDIA_SYNC_STATUS_MAX = 255,
|
|
}sync_status;
|
|
|
|
typedef enum {
|
|
AM_MEDIASYNC_OK = 0, // OK
|
|
AM_MEDIASYNC_ERROR_INVALID_PARAMS = -1, // Parameters invalid
|
|
AM_MEDIASYNC_ERROR_INVALID_OPERATION = -2, // Operation invalid
|
|
AM_MEDIASYNC_ERROR_INVALID_OBJECT = -3, // Object invalid
|
|
AM_MEDIASYNC_ERROR_RETRY = -4, // Retry
|
|
AM_MEDIASYNC_ERROR_BUSY = -5, // Device busy
|
|
AM_MEDIASYNC_ERROR_END_OF_STREAM = -6, // End of stream
|
|
AM_MEDIASYNC_ERROR_IO = -7, // Io error
|
|
AM_MEDIASYNC_ERROR_WOULD_BLOCK = -8, // Blocking error
|
|
AM_MEDIASYNC_ERROR_MAX = -254
|
|
} mediasync_result;
|
|
|
|
typedef enum {
|
|
MEDIA_WORK_DEFAULT = 0,
|
|
MEDIA_VIDEO_WORK_DTV = 1, //video on DTV mode
|
|
MEDIA_VIDEO_WORK_MM = 2, //video on MM mode
|
|
MEDIA_AUDIO_WORK_DTV = 3, //audio on DTV mode
|
|
MEDIA_AUDIO_WORK_MM = 4, //audio on MM mode
|
|
} mediasync_av_scenario;
|
|
|
|
typedef enum {
|
|
MEDIASYNC_KEY_HASAUDIO = 0,
|
|
MEDIASYNC_KEY_HASVIDEO,
|
|
MEDIASYNC_KEY_VIDEOLATENCY, //us
|
|
MEDIASYNC_KEY_AUDIOFORMAT,
|
|
MEDIASYNC_KEY_STARTTHRESHOLD,
|
|
MEDIASYNC_KEY_ISOMXTUNNELMODE,
|
|
MEDIASYNC_KEY_AUDIOCACHE,
|
|
MEDIASYNC_KEY_VIDEOWORKMODE,
|
|
MEDIASYNC_KEY_AUDIOMUTE,
|
|
MEDIASYNC_KEY_SOURCETYPE,
|
|
MEDIASYNC_KEY_ALSAREADY,
|
|
MEDIASYNC_KEY_VSYNC_INTERVAL_MS,
|
|
MEDIASYNC_KEY_VIDEOFRAME, //set video frame rate with mediasync_fraction point
|
|
MEDIASYNC_KEY_VIDEOTRICKMODE,
|
|
MEDIASYNC_KEY_VIDEO_FREERUN,
|
|
MEDIASYNC_KEY_AUDIO_FREERUN,
|
|
MEDIASYNC_KEY_VIDEO_SYNC_THRESHOLD, //us
|
|
MEDIASYNC_KEY_AUDIO_SYNC_THRESHOLD, //us
|
|
MEDIASYNC_KEY_VIDEO_DURING_SLOW_SYNC,
|
|
MEDIASYNC_KEY_VIDEO_FRAME_ADVANCE,
|
|
MEDIASYNC_KEY_AUDIO_EQUIPMENT,
|
|
MEDIASYNC_KEY_VIDEO_DRIVER_LAYER_SYNC,
|
|
MEDIASYNC_KEY_SHOW_FIRST_FRAME_NOSYNC,
|
|
MEDIASYNC_KEY_SLOWSYNC_ENABLE,
|
|
MEDIASYNC_KEY_SLOWSYNC_PREROLL_RATE,
|
|
MEDIASYNC_KEY_SLOWSYNC_AV_TOLERANCE,
|
|
MEDIASYNC_KEY_START_STRATEGY,
|
|
MEDIASYNC_KEY_RESUME_PLAYING_PTS,
|
|
MEDIASYNC_KEY_VIDEO_HOLD,
|
|
MEDIASYNC_KEY_VIDEO_HWC_LATENCY, //vsync count
|
|
MEDIASYNC_KEY_SHOWFRAME_BEFORE_AVSYNC_STAGE,//set output first frame before av sync stage.
|
|
MEDIASYNC_KEY_RESET_VIDEO_STATE_MACHINE,
|
|
MEDIASYNC_KEY_AUDIO_WAIT_BIND_THRESHOLD, //us
|
|
MEDIASYNC_KEY_VIDEO_WAIT_BIND_THRESHOLD, //us
|
|
MEDIASYNC_KEY_AUDIO_WAIT_VIDEO_THRESHOLD, //us
|
|
MEDIASYNC_KEY_VIDEO_WAIT_AUDIO_THRESHOLD, //us
|
|
MEDIASYNC_KEY_AV_WORK_SCENARIO, // set audio video work scenario: DTV or MM with mediasync_av_scenario
|
|
MEDIASYNC_KEY_MAX = 255,
|
|
} mediasync_parameter;
|
|
|
|
typedef enum {
|
|
MEDIASYNC_UNIT_MS = 0,
|
|
MEDIASYNC_UNIT_US,
|
|
MEDIASYNC_UNIT_PTS,
|
|
MEDIASYNC_UNIT_MAX,
|
|
} mediasync_time_unit;
|
|
|
|
typedef enum {
|
|
MEDIASYNC_AUDIO_UNKNOWN = 0,
|
|
MEDIASYNC_AUDIO_NORMAL_OUTPUT,
|
|
MEDIASYNC_AUDIO_DROP_PCM,
|
|
MEDIASYNC_AUDIO_INSERT,
|
|
MEDIASYNC_AUDIO_HOLD,
|
|
MEDIASYNC_AUDIO_MUTE,
|
|
MEDIASYNC_AUDIO_RESAMPLE,
|
|
MEDIASYNC_AUDIO_ADJUST_CLOCK,
|
|
MEDIASYNC_AUDIO_EXIT,
|
|
} audio_policy;
|
|
|
|
typedef enum {
|
|
MEDIASYNC_VIDEO_UNKNOWN = 0,
|
|
MEDIASYNC_VIDEO_NORMAL_OUTPUT,
|
|
MEDIASYNC_VIDEO_HOLD,
|
|
MEDIASYNC_VIDEO_DROP,
|
|
MEDIASYNC_VIDEO_EXIT,
|
|
} video_policy;
|
|
|
|
/*Video trick mode*/
|
|
typedef enum {
|
|
VIDEO_TRICK_MODE_NONE = 0, // Disable trick mode
|
|
VIDEO_TRICK_MODE_PAUSE = 1, // Pause the video decoder
|
|
VIDEO_TRICK_MODE_PAUSE_NEXT = 2, // Pause the video decoder when a new frame displayed
|
|
VIDEO_TRICK_MODE_IONLY = 3, // Decoding and Out I frame only
|
|
VIDEO_TRICK_MODE_IONLY_SYNC_BYPASS = 4, // Decoding and Out I frame only, bypass mediasync to playback
|
|
} mediasync_video_trick_mode;
|
|
|
|
struct mediasync_audio_policy {
|
|
audio_policy audiopolicy;
|
|
int32_t param1;
|
|
int32_t param2;
|
|
};
|
|
|
|
struct mediasync_video_policy {
|
|
video_policy videopolicy;
|
|
int64_t param1;
|
|
int32_t param2;
|
|
};
|
|
|
|
struct mediasync_audio_format {
|
|
int samplerate;
|
|
int datawidth;
|
|
int channels;
|
|
int format;
|
|
};
|
|
|
|
typedef enum {
|
|
MEDIA_VIDEO_TIME = 0,
|
|
MEDIA_AUDIO_TIME = 1,
|
|
MEDIA_DMXPCR_TIME = 2,
|
|
MEDIA_STC_TIME = 3,
|
|
MEDIA_TIME_TYPE_MAX = 255,
|
|
} media_time_type;
|
|
|
|
typedef struct audioinfo{
|
|
int cacheSize;
|
|
int cacheDuration;
|
|
}mediasync_audioinfo;
|
|
|
|
typedef struct videoinfo{
|
|
int cacheSize;
|
|
int specialSizeCount;
|
|
int cacheDuration;
|
|
}mediasync_videoinfo;
|
|
|
|
struct mediasync_audio_queue_info{
|
|
int64_t apts;
|
|
int size;
|
|
int duration;
|
|
mediasync_time_unit tunit;
|
|
bool isworkingchannel;
|
|
bool isneedupdate;
|
|
};
|
|
|
|
typedef struct frameinfo{
|
|
int64_t framePts;
|
|
int64_t frameSystemTime;
|
|
}mediasync_frameinfo;
|
|
|
|
typedef struct {
|
|
int num; //numerator
|
|
int denom; //denominator
|
|
} mediasync_fraction;
|
|
|
|
typedef struct vsync_info{
|
|
int64_t lastVsyncTime;
|
|
int vsyncIntervalUs;
|
|
} mediasync_vsync_info;
|
|
|
|
extern void* MediaSync_create();
|
|
|
|
extern mediasync_result MediaSync_allocInstance(void* handle, int32_t DemuxId,
|
|
int32_t PcrPid,
|
|
int32_t *SyncInsId);
|
|
|
|
extern mediasync_result MediaSync_bindInstance(void* handle, uint32_t SyncInsId,
|
|
sync_stream_type streamtype);
|
|
extern mediasync_result MediaSync_bindStaticInstance(void* handle, uint32_t SyncInsId,
|
|
sync_stream_type streamtype);
|
|
extern mediasync_result MediaSync_setPlayerInsNumber(void* handle, int32_t number);
|
|
extern mediasync_result MediaSync_setSyncMode(void* handle, sync_mode mode);
|
|
extern mediasync_result MediaSync_getSyncMode(void* handle, sync_mode *mode);
|
|
extern mediasync_result MediaSync_setPause(void* handle, bool pause);
|
|
extern mediasync_result MediaSync_getPause(void* handle, bool *pause);
|
|
extern mediasync_result MediaSync_setStartingTimeMedia(void* handle, int64_t startingTimeMediaUs);
|
|
extern mediasync_result MediaSync_clearAnchor(void* handle);
|
|
extern mediasync_result MediaSync_updateAnchor(void* handle, int64_t anchorTimeMediaUs,
|
|
int64_t anchorTimeRealUs,
|
|
int64_t maxTimeMediaUs);
|
|
extern mediasync_result MediaSync_setPlaybackRate(void* handle, float rate);
|
|
extern mediasync_result MediaSync_getPlaybackRate(void* handle, float *rate);
|
|
extern mediasync_result MediaSync_getMediaTime(void* handle, int64_t realUs,
|
|
int64_t *outMediaUs,
|
|
bool allowPastMaxTime);
|
|
extern mediasync_result MediaSync_getRealTimeFor(void* handle, int64_t targetMediaUs, int64_t *outRealUs);
|
|
extern mediasync_result MediaSync_getRealTimeForNextVsync(void* handle, int64_t *outRealUs);
|
|
extern mediasync_result MediaSync_getTrackMediaTime(void* handle, int64_t *outMediaUs);
|
|
extern mediasync_result MediaSync_setUpdateTimeThreshold(void* handle, int64_t updateTimeThreshold);
|
|
extern mediasync_result MediaSync_getUpdateTimeThreshold(void* handle, int64_t* updateTimeThreshold);
|
|
|
|
extern mediasync_result MediaSync_setStartThreshold(void* handle, int32_t startplaythreshold);
|
|
extern mediasync_result MediaSync_getStartThreshold(void* handle, int32_t* startplaythreshold);
|
|
|
|
extern mediasync_result mediasync_setParameter(void* handle, mediasync_parameter type, void* arg);
|
|
extern mediasync_result mediasync_getParameter(void* handle, mediasync_parameter type, void* arg);
|
|
extern mediasync_result MediaSync_queueAudioFrame(void* handle, struct mediasync_audio_queue_info* info);
|
|
extern mediasync_result MediaSync_queueVideoFrame(void* handle, int64_t vpts, int size, int duration, mediasync_time_unit tunit);
|
|
extern mediasync_result MediaSync_AudioProcess(void* handle, int64_t apts, int64_t cur_apts, mediasync_time_unit tunit, struct mediasync_audio_policy* asyncPolicy);
|
|
extern mediasync_result MediaSync_VideoProcess(void* handle, int64_t vpts, int64_t cur_vpts, mediasync_time_unit tunit, struct mediasync_video_policy* vsyncPolicy);
|
|
extern mediasync_result MediaSync_getFirstAudioFrameInfo(void* handle, mediasync_frameinfo* info);
|
|
extern mediasync_result MediaSync_getCurAudioFrameInfo(void* handle, mediasync_frameinfo* info);
|
|
extern mediasync_result MediaSync_GetMediaTimeByType(void* handle, media_time_type mediaTimeType,mediasync_time_unit tunit,int64_t* mediaTime);
|
|
extern mediasync_result MediaSync_getFirstVideoFrameInfo(void* handle, mediasync_frameinfo * arg);
|
|
extern mediasync_result MediaSync_GetFirstQueueVideoInfo(void* handle, mediasync_frameinfo *info);
|
|
extern mediasync_result MediaSync_GetQueueVideoInfo(void* handle, mediasync_frameinfo *info);
|
|
extern mediasync_result MediaSync_GetVideoInfo(void* handle, mediasync_videoinfo *info);
|
|
extern mediasync_result MediaSync_GetFirstQueueAudioInfo(void* handle, mediasync_frameinfo *info);
|
|
extern mediasync_result MediaSync_GetQueueAudioInfo(void* handle, mediasync_frameinfo *info);
|
|
extern mediasync_result MediaSync_GetAudioInfo(void* handle, mediasync_audioinfo *info);
|
|
extern mediasync_result MediaSync_RegisterCb(void* handle,int type,void* pfunc,void *cbHandle);
|
|
extern mediasync_result MediaSync_setPcrAndDmxId(void* handle, int32_t DemuxId, int32_t PcrPid);
|
|
extern mediasync_result MediaSync_reset(void* handle);
|
|
extern mediasync_result MediaSync_audioSwitch(void* handle, bool start, int64_t pts);
|
|
extern void MediaSync_destroy(void* handle);
|
|
|
|
|
|
#endif // MEDIA_CLOCK_H_
|