1 /*----------------------------------------------------------------------------
2  *
3  * File:
4  * jet_data.h
5  *
6  * Contents and purpose:
7  * Internal data structures and interfaces for JET
8  *
9  * Copyright (c) 2006 Sonic Network Inc.
10 
11  * Licensed under the Apache License, Version 2.0 (the "License");
12  * you may not use this file except in compliance with the License.
13  * You may obtain a copy of the License at
14  *
15  *      http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing, software
18  * distributed under the License is distributed on an "AS IS" BASIS,
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  * See the License for the specific language governing permissions and
21  * limitations under the License.
22  *----------------------------------------------------------------------------
23  * Revision Control:
24  *   $Revision: 554 $
25  *   $Date: 2007-02-02 11:06:10 -0800 (Fri, 02 Feb 2007) $
26  *----------------------------------------------------------------------------
27 */
28 
29 #ifndef _JET_DATA_H
30 #define _JET_DATA_H
31 
32 #include "eas.h"
33 #include "jet.h"
34 
35 /* maximum number of segments allowed in a JET file */
36 #ifndef JET_MAX_SEGMENTS
37 #define JET_MAX_SEGMENTS            32
38 #endif
39 
40 /* maximum number of DLS collections allowed in a JET file */
41 #ifndef JET_MAX_DLS_COLLECTIONS
42 #define JET_MAX_DLS_COLLECTIONS     4
43 #endif
44 
45 /* maximum number of JET events in internal queue */
46 #ifndef JET_EVENT_QUEUE_SIZE
47 #define JET_EVENT_QUEUE_SIZE        32
48 #endif
49 
50 /* maximum number of JET events in application queue */
51 #ifndef APP_EVENT_QUEUE_SIZE
52 #define APP_EVENT_QUEUE_SIZE        32
53 #endif
54 
55 /* maximum number of active mute events */
56 #ifndef JET_MUTE_QUEUE_SIZE
57 #define JET_MUTE_QUEUE_SIZE         8
58 #endif
59 
60 /*----------------------------------------------------------------------------
61  * JET event definitions
62  *----------------------------------------------------------------------------
63 */
64 #define JET_EVENT_APP_LOW           80
65 #define JET_EVENT_APP_HIGH          83
66 #define JET_EVENT_LOW               102
67 #define JET_EVENT_HIGH              119
68 #define JET_EVENT_MARKER            102
69 #define JET_EVENT_TRIGGER_CLIP      103
70 
71 #define JET_MARKER_LOOP_END         0
72 
73 #define JET_CLIP_ACTIVE_FLAG        0x80
74 #define JET_CLIP_TRIGGER_FLAG       0x40
75 #define JET_CLIP_ID_MASK            0x3f
76 
77 /*----------------------------------------------------------------------------
78  * JET file definitions
79  *----------------------------------------------------------------------------
80 */
81 #define JET_TAG(a,b,c,d) (\
82     ( ((EAS_U32)(a) & 0xFF) << 24 ) \
83     + ( ((EAS_U32)(b) & 0xFF) << 16 ) \
84     + ( ((EAS_U32)(c) & 0xFF) <<  8 ) \
85     + ( ((EAS_U32)(d) & 0xFF)))
86 
87 #define JET_VERSION 0x01000000
88 #define JET_HEADER_TAG JET_TAG('J','E','T',' ')
89 #define JET_INFO_CHUNK JET_TAG('J','I','N','F')
90 #define JET_SMF_CHUNK JET_TAG('J','S','M','F')
91 #define JET_DLS_CHUNK JET_TAG('J','D','L','S')
92 #define INFO_JET_COPYRIGHT JET_TAG('J','C','O','P')
93 #define JET_APP_DATA_CHUNK JET_TAG('J','A','P','P')
94 
95 #define INFO_NUM_SMF_CHUNKS JET_TAG('S','M','F','#')
96 #define INFO_NUM_DLS_CHUNKS JET_TAG('D','L','S','#')
97 #define INFO_JET_VERSION JET_TAG('J','V','E','R')
98 
99 /*----------------------------------------------------------------------------
100  * S_JET_SEGMENT
101  *
102  * JET segment data
103  *----------------------------------------------------------------------------
104 */
105 typedef struct s_jet_segment_tag
106 {
107     EAS_HANDLE          streamHandle;
108     EAS_U32             muteFlags;
109     EAS_I16             repeatCount;
110     EAS_U8              userID;
111     EAS_I8              transpose;
112     EAS_I8              libNum;
113     EAS_U8              state;
114     EAS_U8              flags;
115 } S_JET_SEGMENT;
116 
117 /* S_JET_SEGMENT.state */
118 typedef enum
119 {
120     JET_STATE_CLOSED,
121     JET_STATE_OPEN,
122     JET_STATE_READY,
123     JET_STATE_PLAYING,
124     JET_STATE_PAUSED,
125     JET_STATE_STOPPING
126 } E_JET_SEGMENT_STATE;
127 
128 /* S_JEG_SEGMENT.flags */
129 #define JET_SEG_FLAG_MUTE_UPDATE        0x01
130 
131 /*----------------------------------------------------------------------------
132  * S_JET_DATA
133  *
134  * Main JET data structure
135  *----------------------------------------------------------------------------
136 */
137 #define SEG_QUEUE_DEPTH 3
138 typedef struct s_jet_data_tag
139 {
140     EAS_FILE_HANDLE     jetFileHandle;
141     S_JET_SEGMENT       segQueue[SEG_QUEUE_DEPTH];
142     EAS_I32             segmentOffsets[JET_MAX_SEGMENTS];
143     EAS_I32             appDataOffset;
144     EAS_I32             appDataSize;
145     EAS_DLSLIB_HANDLE   libHandles[JET_MAX_DLS_COLLECTIONS];
146     EAS_U32             jetEventQueue[JET_EVENT_QUEUE_SIZE];
147     EAS_U32             appEventQueue[APP_EVENT_QUEUE_SIZE];
148     S_JET_CONFIG        config;
149     EAS_U32             segmentTime;
150     EAS_U8              muteQueue[JET_MUTE_QUEUE_SIZE];
151     EAS_U8              numSegments;
152     EAS_U8              numLibraries;
153     EAS_U8              flags;
154     EAS_U8              playSegment;
155     EAS_U8              queueSegment;
156     EAS_U8              numQueuedSegments;
157     EAS_U8              jetEventQueueRead;
158     EAS_U8              jetEventQueueWrite;
159     EAS_U8              appEventQueueRead;
160     EAS_U8              appEventQueueWrite;
161 } S_JET_DATA;
162 
163 /* flags for S_JET_DATA.flags */
164 #define JET_FLAGS_PLAYING       1
165 
166 #define JET_EVENT_VAL_MASK      0x0000007f  /* mask for value */
167 #define JET_EVENT_CTRL_MASK     0x00003f80  /* mask for controller */
168 #define JET_EVENT_CHAN_MASK     0x0003c000  /* mask for channel */
169 #define JET_EVENT_TRACK_MASK    0x00fc0000  /* mask for track number */
170 #define JET_EVENT_SEG_MASK      0xff000000  /* mask for segment ID */
171 #define JET_EVENT_CTRL_SHIFT    7           /* shift for controller number */
172 #define JET_EVENT_CHAN_SHIFT    14          /* shift to for MIDI channel */
173 #define JET_EVENT_TRACK_SHIFT   18          /* shift to get track ID to bit 0 */
174 #define JET_EVENT_SEG_SHIFT     24          /* shift to get segment ID to bit 0 */
175 
176 /* prototype for callback function */
177 extern void JET_Event (EAS_DATA_HANDLE easHandle, EAS_U32 segTrack, EAS_U8 channel, EAS_U8 controller, EAS_U8 value);
178 
179 /* prototype for JET render function */
180 extern EAS_PUBLIC EAS_RESULT JET_Process (EAS_DATA_HANDLE easHandle);
181 
182 #endif
183 
184