Annotation of driverkit/libDriver/Kernel/AudioStream.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
                      7:  * Reserved.  This file contains Original Code and/or Modifications of
                      8:  * Original Code as defined in and that are subject to the Apple Public
                      9:  * Source License Version 1.1 (the "License").  You may not use this file
                     10:  * except in compliance with the License.  Please obtain a copy of the
                     11:  * License at http://www.apple.com/publicsource and read it before using
                     12:  * this file.
                     13:  * 
                     14:  * The Original Code and all software distributed under the License are
                     15:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     16:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     17:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     18:  * FITNESS FOR A PARTICULAR PURPOSE OR NON- INFRINGEMENT.  Please see the
                     19:  * License for the specific language governing rights and limitations
                     20:  * under the License.
                     21:  * 
                     22:  * @APPLE_LICENSE_HEADER_END@
                     23:  */
                     24: /*
                     25:  * AudioStream.h
                     26:  *
                     27:  * Copyright (c) 1991, NeXT Computer, Inc.  All rights reserved.
                     28:  *
                     29:  *      Audio driver stream object.
                     30:  *
                     31:  * HISTORY
                     32:  *      07/14/92/mtm    Original coding.
                     33:  */
                     34: 
                     35: #import <kern/lock.h>
                     36: #import <objc/Object.h>
                     37: #import <mach/mach_types.h>
                     38: #import <bsd/sys/types.h>
                     39: #import <kernserv/queue.h>
                     40: #import <machkit/NXLock.h>
                     41: #import <sys/time.h>
                     42: #import <driverkit/NXSoundParameterTags.h>
                     43: #import "audio_types.h"
                     44: #import "AudioChannel.h"
                     45: 
                     46: /*
                     47:  * For user message sends.
                     48:  */
                     49: #define STREAM_SEND_OPTIONS    (SEND_TIMEOUT|SEND_SWITCH)
                     50: #define STREAM_SEND_TIMEOUT    1000
                     51: 
                     52: /*
                     53:  * Timed control thread messages.
                     54:  */
                     55: #define AC_CONTROL_THREAD_MSG  0
                     56: typedef struct control_msg {
                     57:     msg_header_t       header;
                     58:     msg_type_t         args_type;
                     59:     id                 obj;
                     60:     ACStreamControl    action;
                     61:     struct timeval     *when;
                     62: } control_msg_t;
                     63:     
                     64: /*
                     65:  * Playback or record memory region queue structure.
                     66:  */
                     67: typedef struct region_flags {
                     68:     u_int      started;
                     69:     u_int      ended;
                     70:     u_int      split;
                     71:     u_int      aborted;
                     72:     u_int      excluded;
                     73: } region_flags_t;
                     74: 
                     75: typedef struct region {
                     76:     vm_address_t       data;
                     77:     vm_address_t       end;
                     78:     vm_address_t       enq_ptr;
                     79:     vm_address_t       record_ptr;
                     80:     u_int              count;
                     81:     int                        tag;
                     82:     u_int                      messages;
                     83:     port_t             reply_port;
                     84:     dma_desc_t         *start_ddp;
                     85:     dma_desc_t         *end_ddp;
                     86:     region_flags_t     flags;
                     87: #if 0
                     88:     boolean_t          marks_bumped;   /* touched water marks */
                     89:     vm_address_t       wire_head;      /* wire pointer */
                     90:     vm_address_t       wire_tail;      /* unwire pointer */
                     91:     boolean_t          active;         /* doing dma */
                     92:     boolean_t          underrun;       /* overflow/underrun occured */
                     93:     boolean_t          low_reached;    /* reached low water first time */
                     94: #endif
                     95:     queue_chain_t      link;
                     96: } region_t;
                     97: 
                     98: @interface AudioStream: Object
                     99: {
                    100:     id                 channel;
                    101:     id                 device;
                    102:     port_t             userPort;
                    103:     port_t             kernUserPort;
                    104:     port_t             ownerPort;
                    105:     int                        tag;
                    106:     ASType             type;
                    107:     u_int              bytesProcessed;
                    108:     BOOL               isPaused;
                    109:     id                 regionQueueLock;
                    110:     queue_head_t       regionQueue;
                    111:     msg_header_t       *sndReplyMsg;
                    112:     port_t             pausePort;
                    113:     port_t             resumePort;
                    114:     port_t             abortPort;
                    115:     struct timeval     pauseTime;
                    116:     struct timeval     resumeTime;
                    117:     struct timeval     abortTime;
                    118:     port_t             userReplyPort;
                    119:     ASMsgRequest       userReplyMessages;
                    120:     u_int              samplingRate;
                    121:     IOAudioDataFormat  dataFormat;
                    122:     u_int              channelCount;
                    123:     char               *mixBuffer1;
                    124:     char               *mixBuffer2;
                    125: }
                    126: 
                    127: - initChannel:chan tag:(int)aTag user:(port_t *)user
                    128:         owner:(port_t)owner type:(u_int)aType;
                    129: - (port_t)userPort;
                    130: - (port_t)ownerPort;
                    131: - channel;
                    132: - (ASType)type;
                    133: - dmaCompleteDescriptor:(dma_desc_t *)tag transfered:(u_int)count;
                    134: - (BOOL)canConvertRegion:(region_t *)region rate:(u_int)srate
                    135:     format:(IOAudioDataFormat)format channelCount:(u_int)chans;
                    136: - clearForMix:(char *)buf size:(u_int)count format:(IOAudioDataFormat)format;
                    137: - (u_int)mixBuffer:(vm_address_t)data maxCount:(u_int)max
                    138:               rate:(u_int *)srate format:(IOAudioDataFormat *)format
                    139:       channelCount:(u_int *)chans descriptor:(dma_desc_t *)ddp
                    140:             virgin:(BOOL)isVirgin streamCount:(u_int)streams;
                    141:            
                    142: - (u_int)mixRegion:(region_t *)region descriptor:(dma_desc_t *)ddp
                    143:             buffer:(vm_address_t)data maxCount:(u_int)max
                    144:             virgin:(BOOL)isVirgin rate:(u_int)srate format:(IOAudioDataFormat)format
                    145:            channelCount:(u_int)chans;
                    146: 
                    147: - freeRegion:(region_t *)region;
                    148: - (region_t *)newRegion;
                    149: - free;
                    150: - control:(ACStreamControl)action atTime:(struct timeval)when;
                    151: - control:(ACStreamControl)action;
                    152: - returnRecordedData;
                    153: - setOwner:(port_t)newOwner;
                    154: - (BOOL)bytesProcessed:(u_int *)num atTime:(unsigned int *)ts;
                    155: 
                    156: - (NXSoundParameterTag)dataEncoding;
                    157: - (void)setDataEncoding:(NXSoundParameterTag)encoding;
                    158: - (u_int)samplingRate;
                    159: - (void)setSamplingRate:(u_int)rate;
                    160: - (u_int)channelCount;
                    161: - (void)setChannelCount:(u_int)count;
                    162: - (u_int)lowWaterMark;
                    163: - (void)setLowWaterMark:(u_int)count;
                    164: - (u_int)highWaterMark;
                    165: - (void)setHighWaterMark:(u_int)count;
                    166: 
                    167: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.