blob: 8487d5f56bca8dddeeb8da0ac71afc9ed3599465 [file] [log] [blame]
Song Zhaoea5a0412021-01-18 16:40:08 -08001/*
2 * Copyright (C) 2020 Amlogic, Inc. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 */
15#ifndef AML_MSYNC_H
16#define AML_MSYNC_H
17
18#ifndef __KERNEL__
19#include <stdint.h>
20#endif
21
22struct pts_tri {
23 uint32_t wall_clock;
24 uint32_t pts;
25 uint32_t delay;
26};
27
28struct pts_wall {
29 uint32_t wall_clock;
30 uint32_t interval;
31};
32
33enum av_sync_mode {
34 AVS_MODE_A_MASTER,
35 AVS_MODE_V_MASTER,
36 AVS_MODE_PCR_MASTER,
37 AVS_MODE_IPTV,
38 AVS_MODE_FREE_RUN
39};
40
41struct session_sync_stat {
42 uint32_t v_active;
43 uint32_t a_active;
44 /* enum av_sync_mode */
45 uint32_t mode;
Song Zhaoe208d692021-04-19 15:38:52 -070046 /* valid in aligned sync */
47 uint32_t v_timeout;
Song Zhaoea5a0412021-01-18 16:40:08 -080048};
49
50enum avs_event {
51 AVS_VIDEO_START,
52 AVS_PAUSE,
53 AVS_RESUME,
54 AVS_VIDEO_STOP,
55 AVS_AUDIO_STOP,
56 AVS_VIDEO_TSTAMP_DISCONTINUITY,
57 AVS_AUDIO_TSTAMP_DISCONTINUITY,
58 AVS_EVENT_MAX,
59};
60
61enum avs_astart_mode {
62 AVS_START_SYNC = 0,
63 AVS_START_ASYNC,
64 AVS_START_MAX
65};
66
67struct audio_start {
68 /* in first audio pts */
69 uint32_t pts;
70 /* in render delay */
71 uint32_t delay;
72 /* out enum avs_astart_mode */
73 uint32_t mode;
74};
75
76struct session_event {
77 /* enum avs_event */
78 uint32_t event;
79 uint32_t value;
80};
81
82#define AVS_INVALID_PTS 0xFFFFFFFFUL
83
84#define AMSYNC_START_V_FIRST 0x1
85#define AMSYNC_START_A_FIRST 0x2
86#define AMSYNC_START_ASAP 0x3
87#define AMSYNC_START_ALIGN 0x4
88
89/* msync ioctl */
90#define _A_M_S 'M'
91#define AMSYNC_IOC_ALLOC_SESSION _IOW((_A_M_S), 0x00, int)
92#define AMSYNC_IOC_REMOVE_SESSION _IOR((_A_M_S), 0x01, int)
93
94/* session ioctl */
95#define _A_M_SS 'S'
96#define AMSYNCS_IOC_SET_MODE _IOW((_A_M_SS), 0x00, unsigned int)
97#define AMSYNCS_IOC_GET_MODE _IOR((_A_M_SS), 0x01, unsigned int)
98#define AMSYNCS_IOC_SET_START_POLICY _IOW((_A_M_SS), 0x02, unsigned int)
99#define AMSYNCS_IOC_GET_START_POLICY _IOR((_A_M_SS), 0x03, unsigned int)
100#define AMSYNCS_IOC_SET_V_TS _IOW((_A_M_SS), 0x04, struct pts_tri)
101#define AMSYNCS_IOC_GET_V_TS _IOWR((_A_M_SS), 0x05, struct pts_tri)
102#define AMSYNCS_IOC_SET_A_TS _IOW((_A_M_SS), 0x06, struct pts_tri)
103#define AMSYNCS_IOC_GET_A_TS _IOWR((_A_M_SS), 0x07, struct pts_tri)
104#define AMSYNCS_IOC_SEND_EVENT _IOWR((_A_M_SS), 0x08, struct session_event)
105//For PCR/IPTV mode only
106#define AMSYNCS_IOC_GET_SYNC_STAT _IOWR((_A_M_SS), 0x09, struct session_sync_stat)
107#define AMSYNCS_IOC_SET_PCR _IOW((_A_M_SS), 0x0a, unsigned int)
108#define AMSYNCS_IOC_GET_PCR _IOWR((_A_M_SS), 0x0b, unsigned int)
109#define AMSYNCS_IOC_GET_WALL _IOR((_A_M_SS), 0x0c, struct pts_wall)
110#define AMSYNCS_IOC_SET_RATE _IOW((_A_M_SS), 0x0d, unsigned int)
111#define AMSYNCS_IOC_GET_RATE _IOR((_A_M_SS), 0x0e, unsigned int)
112#define AMSYNCS_IOC_SET_NAME _IOR((_A_M_SS), 0x0f, char *)
113#define AMSYNCS_IOC_SET_WALL_ADJ_THRES _IOW((_A_M_SS), 0x10, unsigned int)
114#define AMSYNCS_IOC_GET_WALL_ADJ_THRES _IOR((_A_M_SS), 0x11, unsigned int)
115#define AMSYNCS_IOC_GET_CLOCK_START _IOR((_A_M_SS), 0x12, unsigned int)
116#define AMSYNCS_IOC_AUDIO_START _IOW((_A_M_SS), 0x13, struct audio_start)
117
118#endif