vfs: check userland buffers before reading them.
[haiku.git] / src / kits / media / legacy / OldAudioModule.h
blobeb502df66cc31f2653f20e4a0d9940ec70ffebb0
1 /* ================
3 FILE: AudioModule.h
4 REVS: $Revision: 1.1 $
5 NAME: marc
7 Copyright (c) 1997 by Be Incorporated. All Rights Reserved.
9 ================ */
11 #ifndef _AUDIO_MODULE_H
12 #define _AUDIO_MODULE_H
14 #include <File.h>
16 #include "OldMediaModule.h"
17 #include "OldMediaDefs.h"
19 class BADCStream;
20 class BDACStream;
21 class BSubscriber;
23 class BAudioEvent : public BMediaEvent {
24 public:
25 BAudioEvent(int32 frames, bool stereo, float* samples = NULL);
26 ~BAudioEvent();
28 virtual mk_time Start();
29 virtual void SetStart(mk_time);
30 virtual mk_time Duration();
31 virtual int32 Frames();
32 virtual float* Samples();
33 virtual int32 ChannelCount();
34 virtual float Gain();
35 virtual void SetGain(float);
36 virtual int32 Destination();
37 virtual void SetDestination(int32);
38 virtual bool MixIn (float* dst, int32 frames, mk_time time);
39 virtual BMediaEvent* Clone();
40 virtual bigtime_t CaptureTime();
41 virtual void SetCaptureTime(bigtime_t);
43 private:
44 mk_time fStart;
45 int32 fFrames;
46 float* fSamples;
47 float fGain;
48 int32 fDestination;
49 bigtime_t fCaptureTime;
50 bool fStereo;
51 bool fFreeHuey;
55 class BDACRenderer : public BMediaRenderer {
56 public:
57 BDACRenderer(const char* name = NULL);
58 ~BDACRenderer();
60 mk_rate Units();
61 mk_time Latency();
62 mk_time Start();
63 mk_time Duration();
64 BTimeBase* TimeBase();
65 void Open();
66 void Close();
67 void Wakeup();
68 void TransportChanged(mk_time time, mk_rate rate,
69 transport_status status);
70 void StreamChanged();
72 virtual BMediaChannel* Channel();
74 private:
75 static bool _WriteDAC(void* arg, char* buf, uint32 bytes, void* header);
76 bool WriteDAC(short* buf, int32 frames, audio_buffer_header* header);
77 bool MixActiveSegments(mk_time start);
78 void MixOutput(short* dst);
80 BMediaChannel* fChannel;
81 BDACStream* fDACStream;
82 BSubscriber* fSubscriber;
83 float* fBuffer;
84 int32 fBufferFrames;
85 BList fActiveSegments;
86 mk_time fLatency;
87 mk_time fNextTime;
88 bool fRunning;
89 BTimeBase fDACTimeBase;
93 class BAudioFileStream : public BEventStream {
94 public:
95 BAudioFileStream(BMediaChannel* channel, BFile* file,
96 mk_time start = B_UNDEFINED_MK_TIME);
97 ~BAudioFileStream();
99 BMediaEvent* GetEvent(BMediaChannel* channel);
100 BMediaEvent* PeekEvent(BMediaChannel* channel, mk_time asap = 0);
101 status_t SeekToTime(BMediaChannel* channel, mk_time time);
102 void SetStart(mk_time start);
104 virtual bigtime_t CaptureTime();
105 virtual BMediaChannel* Channel();
107 private:
108 BMediaChannel* fChannel;
109 BFile* fFile;
110 mk_time fTime;
111 BAudioEvent* fCurrentEvent;
112 short* fBuffer;
116 class BADCSource : public BEventStream {
117 public:
118 BADCSource(BMediaChannel* channel, mk_time start = 0);
119 ~BADCSource();
121 BMediaEvent* GetEvent(BMediaChannel* channel);
122 BMediaEvent* PeekEvent(BMediaChannel* channel, mk_time asap = 0);
123 status_t SeekToTime(BMediaChannel* channel, mk_time time);
124 void SetStart(mk_time start);
126 virtual BMediaChannel* Channel();
128 private:
129 static bool _ReadADC(void* arg, char* buf, uint32 bytes, void* header);
130 void ReadADC(short* buf, int32 frames, audio_buffer_header* header);
132 BMediaChannel* fChannel;
133 BFile* fFile;
134 mk_time fTime;
135 BAudioEvent* fCurrentEvent;
136 BAudioEvent* fNextEvent;
137 BLocker fEventLock;
138 BADCStream* fADCStream;
139 BSubscriber* fSubscriber;
143 #endif