blob: 4e05e89855e678b822b33dacb31ac72f5cb2fe82 [file] [log] [blame]
#ifndef MEDIA_SYNC_HEAD_HH
#define MEDIA_SYNC_HEAD_HH
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/amlogic/cpu_version.h>
#define MIN_UPDATETIME_THRESHOLD_US 50000
typedef enum {
MEDIA_SYNC_VMASTER = 0,
MEDIA_SYNC_AMASTER = 1,
MEDIA_SYNC_PCRMASTER = 2,
MEDIA_SYNC_MODE_MAX = 255,
}sync_mode;
typedef struct speed{
u32 mNumerator;
u32 mDenominator;
}mediasync_speed;
typedef enum {
MEDIASYNC_INIT = 0,
MEDIASYNC_AUDIO_ARRIVED,
MEDIASYNC_VIDEO_ARRIVED,
MEDIASYNC_AV_ARRIVED,
MEDIASYNC_AV_SYNCED,
MEDIASYNC_RUNNING,
MEDIASYNC_LOST_SYNC,
MEDIASYNC_EXIT,
} avsync_state;
typedef enum {
UNKNOWN_CLOCK = 0,
AUDIO_CLOCK,
VIDEO_CLOCK,
PCR_CLOCK,
REF_CLOCK,
} mediasync_clocktype;
typedef struct frameinfo{
int64_t framePts;
int64_t frameSystemTime;
}mediasync_frameinfo;
typedef struct syncinfo {
avsync_state state;
mediasync_frameinfo firstAframeInfo;
mediasync_frameinfo firstVframeInfo;
mediasync_frameinfo firstDmxPcrInfo;
mediasync_frameinfo refClockInfo;
mediasync_frameinfo curAudioInfo;
mediasync_frameinfo curVideoInfo;
mediasync_frameinfo curDmxPcrInfo;
}mediasync_syncinfo;
typedef struct audioinfo{
int cacheSize;
int cacheDuration;
}mediasync_audioinfo;
typedef struct videoinfo{
int cacheSize;
int specialSizeCount;
int cacheDuration;
}mediasync_videoinfo;
typedef struct audioforamt{
int samplerate;
int datawidth;
int channels;
int format;
}mediasync_audio_format;
typedef enum
{
TS_DEMOD = 0, // TS Data input from demod
TS_MEMORY = 1, // TS Data input from memory
ES_MEMORY = 2, // ES Data input from memory
} aml_Source_Type;
typedef enum {
CLOCK_PROVIDER_NONE = 0,
CLOCK_PROVIDER_DISCONTINUE,
CLOCK_PROVIDER_NORMAL,
CLOCK_PROVIDER_LOST,
CLOCK_PROVIDER_RECOVERING,
} mediasync_clockprovider_state;
typedef struct instance{
s32 mSyncInsId;
s32 mDemuxId;
s32 mPcrPid;
s32 mPaused;
s32 mRef;
s32 mSyncMode;
s64 mLastStc;
s64 mLastRealTime;
s64 mLastMediaTime;
s64 mTrackMediaTime;
s64 mStartMediaTime;
mediasync_speed mSpeed;
mediasync_speed mPcrSlope;
s32 mSyncModeChange;
s64 mUpdateTimeThreshold;
int mHasAudio;
int mHasVideo;
int mute_flag;
int mStartThreshold;
int mPtsAdjust;
int mVideoWorkMode;
int mFccEnable;
int mPauseResumeFlag;
mediasync_clocktype mSourceClockType;
mediasync_clockprovider_state mSourceClockState;
mediasync_audioinfo mAudioInfo;
mediasync_videoinfo mVideoInfo;
mediasync_syncinfo mSyncInfo;
aml_Source_Type mSourceType;
mediasync_audio_format mAudioFormat;
}mediasync_ins;
long mediasync_ins_alloc(s32 sDemuxId,
s32 sPcrPid,
s32 *sSyncInsId,
mediasync_ins **pIns);
long mediasync_ins_delete(s32 sSyncInsId);
long mediasync_ins_binder(s32 sSyncInsId,
mediasync_ins **pIns);
long mediasync_ins_unbinder(s32 sSyncInsId);
long mediasync_ins_update_mediatime(s32 sSyncInsId,
s64 lMediaTime,
s64 lSystemTime, bool forceUpdate);
long mediasync_ins_set_mediatime_speed(s32 sSyncInsId, mediasync_speed fSpeed);
long mediasync_ins_set_paused(s32 sSyncInsId, s32 sPaused);
long mediasync_ins_get_paused(s32 sSyncInsId, s32* spPaused);
long mediasync_ins_get_trackmediatime(s32 sSyncInsId, s64* lpTrackMediaTime);
long mediasync_ins_set_syncmode(s32 sSyncInsId, s32 sSyncMode);
long mediasync_ins_get_syncmode(s32 sSyncInsId, s32 *sSyncMode);
long mediasync_ins_get_mediatime_speed(s32 sSyncInsId, mediasync_speed *fpSpeed);
long mediasync_ins_get_anchor_time(s32 sSyncInsId,
s64* lpMediaTime,
s64* lpSTCTime,
s64* lpSystemTime);
long mediasync_ins_get_systemtime(s32 sSyncInsId,
s64* lpSTC,
s64* lpSystemTime);
long mediasync_ins_get_nextvsync_systemtime(s32 sSyncInsId, s64* lpSystemTime);
long mediasync_ins_set_updatetime_threshold(s32 sSyncInsId, s64 lTimeThreshold);
long mediasync_ins_get_updatetime_threshold(s32 sSyncInsId, s64* lpTimeThreshold);
long mediasync_ins_init_syncinfo(s32 sSyncInsId);
long mediasync_ins_set_clocktype(s32 sSyncInsId, mediasync_clocktype type);
long mediasync_ins_get_clocktype(s32 sSyncInsId, mediasync_clocktype* type);
long mediasync_ins_set_avsyncstate(s32 sSyncInsId, s32 state);
long mediasync_ins_get_avsyncstate(s32 sSyncInsId, s32* state);
long mediasync_ins_set_hasaudio(s32 sSyncInsId, int hasaudio);
long mediasync_ins_get_hasaudio(s32 sSyncInsId, int* hasaudio);
long mediasync_ins_set_hasvideo(s32 sSyncInsId, int hasvideo);
long mediasync_ins_get_hasvideo(s32 sSyncInsId, int* hasvideo);
long mediasync_ins_set_audioinfo(s32 sSyncInsId, mediasync_audioinfo info);
long mediasync_ins_get_audioinfo(s32 sSyncInsId, mediasync_audioinfo* info);
long mediasync_ins_set_videoinfo(s32 sSyncInsId, mediasync_videoinfo info);
long mediasync_ins_set_audiomute(s32 sSyncInsId, int mute_flag);
long mediasync_ins_get_audiomute(s32 sSyncInsId, int* mute_flag);
long mediasync_ins_get_videoinfo(s32 sSyncInsId, mediasync_videoinfo* info);
long mediasync_ins_set_firstaudioframeinfo(s32 sSyncInsId, mediasync_frameinfo info);
long mediasync_ins_get_firstaudioframeinfo(s32 sSyncInsId, mediasync_frameinfo* info);
long mediasync_ins_set_firstvideoframeinfo(s32 sSyncInsId, mediasync_frameinfo info);
long mediasync_ins_get_firstvideoframeinfo(s32 sSyncInsId, mediasync_frameinfo* info);
long mediasync_ins_set_firstdmxpcrinfo(s32 sSyncInsId, mediasync_frameinfo info);
long mediasync_ins_get_firstdmxpcrinfo(s32 sSyncInsId, mediasync_frameinfo* info);
long mediasync_ins_set_refclockinfo(s32 sSyncInsId, mediasync_frameinfo info);
long mediasync_ins_get_refclockinfo(s32 sSyncInsId, mediasync_frameinfo* info);
long mediasync_ins_set_curaudioframeinfo(s32 sSyncInsId, mediasync_frameinfo info);
long mediasync_ins_get_curaudioframeinfo(s32 sSyncInsId, mediasync_frameinfo* info);
long mediasync_ins_set_curvideoframeinfo(s32 sSyncInsId, mediasync_frameinfo info);
long mediasync_ins_get_curvideoframeinfo(s32 sSyncInsId, mediasync_frameinfo* info);
long mediasync_ins_set_curdmxpcrinfo(s32 sSyncInsId, mediasync_frameinfo info);
long mediasync_ins_get_curdmxpcrinfo(s32 sSyncInsId, mediasync_frameinfo* info);
long mediasync_ins_set_clockstate(s32 sSyncInsId, mediasync_clockprovider_state state);
long mediasync_ins_get_clockstate(s32 sSyncInsId, mediasync_clockprovider_state* state);
long mediasync_ins_set_startthreshold(s32 sSyncInsId, s32 threshold);
long mediasync_ins_get_startthreshold(s32 sSyncInsId, s32* threshold);
long mediasync_ins_set_ptsadjust(s32 sSyncInsId, s32 adujstpts);
long mediasync_ins_get_ptsadjust(s32 sSyncInsId, s32* adujstpts);
long mediasync_ins_set_videoworkmode(s32 sSyncInsId, s64 mode);
long mediasync_ins_get_videoworkmode(s32 sSyncInsId, s64* mode);
long mediasync_ins_set_fccenable(s32 sSyncInsId, s64 enable);
long mediasync_ins_get_fccenable(s32 sSyncInsId, s64* enable);
long mediasync_ins_set_source_type(s32 sSyncInsId, aml_Source_Type sourceType);
long mediasync_ins_get_source_type(s32 sSyncInsId, aml_Source_Type* sourceType);
long mediasync_ins_set_start_media_time(s32 sSyncInsId, s64 startime);
long mediasync_ins_get_start_media_time(s32 sSyncInsId, s64* starttime);
long mediasync_ins_set_audioformat(s32 sSyncInsId, mediasync_audio_format format);
long mediasync_ins_get_audioformat(s32 sSyncInsId, mediasync_audio_format* format);
long mediasync_ins_set_pauseresume(s32 sSyncInsId, int flag);
long mediasync_ins_get_pauseresume(s32 sSyncInsId, int* flag);
long mediasync_ins_set_pcrslope(s32 sSyncInsId, mediasync_speed pcrslope);
long mediasync_ins_get_pcrslope(s32 sSyncInsId, mediasync_speed *pcrslope);
#endif