Home | History | Annotate | Download | only in lib_src
      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