| /* |
| * Copyright (C) 2021 Amlogic Corporation. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #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; |
| uint64_t mono_ts; |
| }; |
| |
| struct pcr_pair { |
| uint32_t pts; |
| uint64_t mono_clock; |
| }; |
| |
| struct pts_wall { |
| uint32_t wall_clock; |
| uint32_t interval; |
| uint32_t dis_delay; |
| }; |
| |
| enum av_sync_mode { |
| AVS_MODE_A_MASTER, |
| AVS_MODE_V_MASTER, |
| AVS_MODE_PCR_MASTER, |
| AVS_MODE_IPTV, |
| AVS_MODE_FREE_RUN |
| }; |
| |
| enum av_sync_stat { |
| AVS_STAT_INIT, |
| AVS_STAT_STARTING, |
| AVS_STAT_STARTED, |
| AVS_STAT_PAUSED, |
| AVS_STAT_TRANSITION, |
| AVS_STAT_TRANSITION_V_2_A, |
| AVS_STAT_TRANSITION_A_2_V, |
| }; |
| |
| enum src_flag { |
| SRC_V = 1, |
| SRC_A = 2, |
| }; |
| |
| 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; |
| /* input: query source src_flag */ |
| uint32_t flag; |
| /* enum av_sync_stat */ |
| uint32_t stat; |
| /* clean poll stat after stat */ |
| uint32_t clean_poll; |
| }; |
| |
| 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; |
| }; |
| |
| struct ker_start_policy { |
| /* start policy */ |
| uint32_t policy; |
| /* in audio timeout value for no video case, in ms */ |
| int timeout; |
| }; |
| |
| #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, struct ker_start_policy) |
| #define AMSYNCS_IOC_GET_START_POLICY _IOR((_A_M_SS), 0x03, struct ker_start_policy) |
| #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) |
| #define AMSYNCS_IOC_SET_STOP_AUDIO_WAIT _IOR((_A_M_SS), 0x16, int) |
| |
| //For debuging |
| #define AMSYNCS_IOC_GET_DEBUG_MODE _IOR((_A_M_SS), 0x100, struct session_debug) |
| |
| #endif |