| /* |
| * Copyright (C) 2020 Amlogic, Inc. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program 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 General Public License for |
| * more details. |
| * |
| */ |
| #ifndef AML_MSYNC_H |
| #define AML_MSYNC_H |
| |
| #ifndef __KERNEL__ |
| #include <stdint.h> |
| #endif |
| |
| struct pts_tri { |
| uint32_t wall_clock; |
| uint32_t pts; |
| uint32_t delay; |
| }; |
| |
| struct pcr_pair { |
| uint32_t pts; |
| uint64_t mono_clock; |
| }; |
| |
| struct pts_wall { |
| uint32_t wall_clock; |
| uint32_t interval; |
| }; |
| |
| enum av_sync_mode { |
| AVS_MODE_A_MASTER, |
| AVS_MODE_V_MASTER, |
| AVS_MODE_PCR_MASTER, |
| AVS_MODE_IPTV, |
| AVS_MODE_FREE_RUN |
| }; |
| |
| struct session_sync_stat { |
| uint32_t v_active; |
| uint32_t a_active; |
| /* enum av_sync_mode */ |
| uint32_t mode; |
| /* valid in aligned sync */ |
| uint32_t v_timeout; |
| /* in audio switching process */ |
| uint32_t audio_switch; |
| }; |
| |
| enum avs_event { |
| AVS_VIDEO_START, |
| AVS_PAUSE, |
| AVS_RESUME, |
| AVS_VIDEO_STOP, |
| AVS_AUDIO_STOP, |
| AVS_VIDEO_TSTAMP_DISCONTINUITY, |
| AVS_AUDIO_TSTAMP_DISCONTINUITY, |
| AVS_AUDIO_SWITCH, |
| AVS_EVENT_MAX, |
| }; |
| |
| enum avs_astart_mode { |
| AVS_START_SYNC = 0, |
| AVS_START_ASYNC, |
| AVS_START_AGAIN, |
| AVS_START_MAX |
| }; |
| |
| struct audio_start { |
| /* in first audio pts */ |
| uint32_t pts; |
| /* in render delay */ |
| uint32_t delay; |
| /* out enum avs_astart_mode */ |
| uint32_t mode; |
| }; |
| |
| struct session_event { |
| /* enum avs_event */ |
| uint32_t event; |
| uint32_t value; |
| }; |
| |
| struct session_debug { |
| uint32_t debug_freerun; |
| uint32_t pcr_init_flag; |
| uint32_t pcr_init_mode; |
| }; |
| |
| #define AVS_INVALID_PTS 0xFFFFFFFFUL |
| |
| #define AMSYNC_START_V_FIRST 0x1 |
| #define AMSYNC_START_A_FIRST 0x2 |
| #define AMSYNC_START_ASAP 0x3 |
| #define AMSYNC_START_ALIGN 0x4 |
| |
| /* msync ioctl */ |
| #define _A_M_S 'M' |
| #define AMSYNC_IOC_ALLOC_SESSION _IOW((_A_M_S), 0x00, int) |
| #define AMSYNC_IOC_REMOVE_SESSION _IOR((_A_M_S), 0x01, int) |
| |
| /* session ioctl */ |
| #define _A_M_SS 'S' |
| #define AMSYNCS_IOC_SET_MODE _IOW((_A_M_SS), 0x00, unsigned int) |
| #define AMSYNCS_IOC_GET_MODE _IOR((_A_M_SS), 0x01, unsigned int) |
| #define AMSYNCS_IOC_SET_START_POLICY _IOW((_A_M_SS), 0x02, unsigned int) |
| #define AMSYNCS_IOC_GET_START_POLICY _IOR((_A_M_SS), 0x03, unsigned int) |
| #define AMSYNCS_IOC_SET_V_TS _IOW((_A_M_SS), 0x04, struct pts_tri) |
| #define AMSYNCS_IOC_GET_V_TS _IOWR((_A_M_SS), 0x05, struct pts_tri) |
| #define AMSYNCS_IOC_SET_A_TS _IOW((_A_M_SS), 0x06, struct pts_tri) |
| #define AMSYNCS_IOC_GET_A_TS _IOWR((_A_M_SS), 0x07, struct pts_tri) |
| #define AMSYNCS_IOC_SEND_EVENT _IOWR((_A_M_SS), 0x08, struct session_event) |
| //For PCR/IPTV mode only |
| #define AMSYNCS_IOC_GET_SYNC_STAT _IOWR((_A_M_SS), 0x09, struct session_sync_stat) |
| #define AMSYNCS_IOC_SET_PCR _IOW((_A_M_SS), 0x0a, struct pcr_pair) |
| #define AMSYNCS_IOC_GET_PCR _IOWR((_A_M_SS), 0x0b, struct pcr_pair) |
| #define AMSYNCS_IOC_GET_WALL _IOR((_A_M_SS), 0x0c, struct pts_wall) |
| #define AMSYNCS_IOC_SET_RATE _IOW((_A_M_SS), 0x0d, unsigned int) |
| #define AMSYNCS_IOC_GET_RATE _IOR((_A_M_SS), 0x0e, unsigned int) |
| #define AMSYNCS_IOC_SET_NAME _IOR((_A_M_SS), 0x0f, char *) |
| #define AMSYNCS_IOC_SET_WALL_ADJ_THRES _IOW((_A_M_SS), 0x10, unsigned int) |
| #define AMSYNCS_IOC_GET_WALL_ADJ_THRES _IOR((_A_M_SS), 0x11, unsigned int) |
| #define AMSYNCS_IOC_GET_CLOCK_START _IOR((_A_M_SS), 0x12, unsigned int) |
| #define AMSYNCS_IOC_AUDIO_START _IOW((_A_M_SS), 0x13, struct audio_start) |
| #define AMSYNCS_IOC_SET_CLK_DEV _IOW((_A_M_SS), 0x14, int) |
| #define AMSYNCS_IOC_GET_CLK_DEV _IOR((_A_M_SS), 0x15, int) |
| |
| //For debuging |
| #define AMSYNCS_IOC_GET_DEBUG_MODE _IOR((_A_M_SS), 0x100, struct session_debug) |
| |
| int msync_vsync_update(void); |
| |
| #endif |