1 /* 2 * CDDL HEADER START 3 * 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 7 * with the License. 8 * 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. 13 * 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] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 1992-2001 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #ifndef _MULTIMEDIA_AUDIOFILE_H 28 #define _MULTIMEDIA_AUDIOFILE_H 29 30 #ifdef NO_EXTERN_C 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #endif /* NO_EXTERN_C */ 37 38 #include <AudioUnixfile.h> 39 #include <sys/types.h> 40 #include <sys/mman.h> 41 42 // A 'primitive type' for memory mapped file access types 43 enum vmaccess_t { 44 NormalAccess = 0, RandomAccess = 1, SequentialAccess = 2 45 }; 46 47 class VMAccess { 48 private: 49 vmaccess_t type; // combined mode 50 public: 51 VMAccess(vmaccess_t x = NormalAccess): type(x) { } // Constructor 52 inline operator vmaccess_t() // Cast to enum 53 { return (type); } 54 inline operator int() { // Cast to integer 55 switch (type) { 56 case RandomAccess: return (MADV_RANDOM); 57 case SequentialAccess: return (MADV_SEQUENTIAL); 58 case NormalAccess: 59 default: 60 return (MADV_NORMAL); 61 } 62 } 63 }; 64 65 66 // This is the 'base' class for regular files containing audio data 67 class AudioFile : public AudioUnixfile { 68 private: 69 static const FileAccess defmode; // Default access mode 70 static const char *AUDIO_PATH; // Default path env name 71 72 off_t hdrsize; // length of file header 73 off_t seekpos; // current system file pointer 74 Double origlen; // initial length of file 75 76 caddr_t mapaddr; // for mmaping RO files 77 off_t maplen; // length of mmaped region 78 VMAccess vmaccess; // vm (mmap) access type 79 80 AudioFile operator=(AudioFile); // Assignment is illegal 81 82 protected: 83 // Open named file 84 virtual AudioError tryopen( 85 const char *, int); 86 // Create named file 87 virtual AudioError createfile( 88 const char *path); // filename 89 90 // class AudioUnixfile methods specialized here 91 // Seek in input stream 92 virtual AudioError seekread( 93 Double pos, // position to seek to 94 off_t& offset); // returned byte offset 95 // Seek in output stream 96 virtual AudioError seekwrite( 97 Double pos, // position to seek to 98 off_t& offset); // returned byte offset 99 100 public: 101 AudioFile(); // Constructor w/no args 102 103 // Constructor with path 104 AudioFile( 105 const char *path, // filename 106 const FileAccess acc = defmode); // access mode 107 virtual ~AudioFile(); // Destructor 108 109 // Set tmpfile location 110 static AudioError SetTempPath( 111 const char *path); // directory path 112 113 // class AudioUnixfile methods specialized here 114 virtual void SetBlocking(Boolean) { } // No-op for files 115 116 // front end to madvise 117 AudioError SetAccessType( 118 VMAccess vmacc); // (normal, random, seq access) 119 120 inline VMAccess GetAccessType() const { // get vm access type 121 return (vmaccess); 122 } 123 124 virtual AudioError Create(); // Create file 125 virtual AudioError Open(); // Open file 126 127 // ... with search path 128 virtual AudioError OpenPath( 129 const char *path = AUDIO_PATH); 130 virtual AudioError Close(); // Close file 131 132 // Read from position 133 virtual AudioError ReadData( 134 void* buf, // buffer to fill 135 size_t& len, // buffer length (updated) 136 Double& pos); // start position (updated) 137 138 // Write at position 139 virtual AudioError WriteData( 140 void* buf, // buffer to copy 141 size_t& len, // buffer length (updated) 142 Double& pos); // start position (updated) 143 144 // copy to another audio obj. 145 virtual AudioError AsyncCopy( 146 Audio* ap, // dest audio object 147 Double& frompos, 148 Double& topos, 149 Double& limit); 150 151 // class Audio methods specialized here 152 virtual Boolean isFile() const { return (TRUE); } 153 }; 154 155 #ifdef NO_EXTERN_C 156 157 #ifdef __cplusplus 158 } 159 #endif 160 161 #endif /* NO_EXTERN_C */ 162 163 #endif /* !_MULTIMEDIA_AUDIOFILE_H */ 164