4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 1992-2002 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _MULTIMEDIA_AUDIO_H
28 #define _MULTIMEDIA_AUDIO_H
30 #pragma ident "%Z%%M% %I% %E% SMI"
32 #include <AudioTypes.h>
33 #include <AudioError.h>
40 // Error-handling function declaration
42 typedef Boolean (*AudioErrfunc
)(const Audio
*, AudioError
, AudioSeverity
,
46 // Data transfer subcodes.
47 // Returned from ReadData(), WriteData(), AsyncCopy(), Copy() in err.sys
49 AUDIO_COPY_SHORT_INPUT
= 100, // AUDIO_SUCCESS: input would block
50 AUDIO_COPY_ZERO_LIMIT
= 101, // AUDIO_SUCCESS: length was zero
51 AUDIO_COPY_SHORT_OUTPUT
= 102, // AUDIO_SUCCESS: only partial output
52 AUDIO_COPY_INPUT_EOF
= 103, // AUDIO_EOF: eof on input
53 AUDIO_COPY_OUTPUT_EOF
= 104 // AUDIO_EOF: eof on output
58 // This is the abstract base class from which all audio data types derive.
59 // It is invalid to create an object of type Audio.
63 static int idctr
; // id seed value
65 int id
; // object id number
66 int refcnt
; // reference count
68 Double readpos
; // current read position ptr
69 Double writepos
; // current write position ptr
70 AudioErrfunc errorfunc
; // address of error function
73 void SetName(const char *str
); // Set name string
77 Double
& pos
, // position field to update
78 Double newpos
, // new position
79 Whence w
= Absolute
); // Absolute || Relative
81 // XXX - should these be protected?
83 int getid() const; // Get id value
86 virtual AudioError
RaiseError(
87 AudioError code
, // error code
88 AudioSeverity sev
= Error
, // error severity
89 char *msg
= '\0') const; // error message
92 virtual void PrintMsg(
93 char *msg
, // error code
94 AudioSeverity sev
= Message
) const; // error severity
97 Audio(const char *str
= ""); // Constructor
98 virtual ~Audio(); // Destructor
100 void Reference(); // Increment ref count
101 void Dereference(); // Decrement ref count
102 Boolean
isReferenced() const; // TRUE if referenced
104 virtual char *GetName() const; // Get name string
106 // Set user error func
107 virtual void SetErrorFunction(
108 AudioErrfunc func
); // return TRUE if non-fatal
110 virtual Double
ReadPosition() const; // Get read position
111 virtual Double
WritePosition() const; // Get write position
114 virtual Double
SetReadPosition(
115 Double pos
, // new position
116 Whence w
= Absolute
); // Absolute || Relative
118 // Set write position
119 virtual Double
SetWritePosition(
120 Double pos
, // new position
121 Whence w
= Absolute
); // Absolute || Relative
123 // Read from current pos
124 virtual AudioError
Read(
125 void* buf
, // buffer to fill
126 size_t& len
); // buffer length (updated)
128 // Write to current pos
129 virtual AudioError
Write(
130 void* buf
, // buffer to copy
131 size_t& len
); // buffer length (updated)
133 // XXX - no Append() method for now because of name clashes
135 // methods specialized by inherited classes
136 virtual AudioHdr
GetHeader() = 0; // Get header
137 virtual AudioHdr
GetDHeader(Double
); // Get header at pos
138 virtual Double
GetLength() const = 0; // Get length, in secs
140 // Read from position
141 virtual AudioError
ReadData(
142 void* buf
, // buffer to fill
143 size_t& len
, // buffer length (updated)
144 Double
& pos
) = 0; // start position (updated)
147 virtual AudioError
WriteData(
148 void* buf
, // buffer to copy
149 size_t& len
, // buffer length (updated)
150 Double
& pos
) = 0; // start position (updated)
153 virtual AudioError
AppendData(
154 void* buf
, // buffer to copy
155 size_t& len
, // buffer length (updated)
156 Double
& pos
); // start position (updated)
158 // copy to another audio obj.
159 virtual AudioError
Copy(
160 Audio
* ap
); // dest audio object
162 // copy to another audio obj.
163 virtual AudioError
Copy(
164 Audio
* ap
, // dest audio object
169 // copy to another audio obj.
170 virtual AudioError
AsyncCopy(
171 Audio
* ap
, // dest audio object
176 // Define default classification routines
177 // The appropriate routine should be specialized by each leaf class.
178 virtual Boolean
isFile() const { return (FALSE
); }
179 virtual Boolean
isDevice() const { return (FALSE
); }
180 virtual Boolean
isDevicectl() const { return (FALSE
); }
181 virtual Boolean
isPipe() const { return (FALSE
); }
182 virtual Boolean
isBuffer() const { return (FALSE
); }
183 virtual Boolean
isExtent() const { return (FALSE
); }
184 virtual Boolean
isList() const { return (FALSE
); }
187 #include <Audio_inline.h>
193 #endif /* !_MULTIMEDIA_AUDIO_H */