Tizen 2.0 Release
[framework/osp/media.git] / src / FMedia_AudioInImpl.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 //
19 // @file                FMedia_AudioInImpl.h
20 // @brief               This is the header file for the FMediaAudioInImpl.
21 //
22 // This header file contains the declarations of the FMediaAudioInImpl.
23 //
24
25 #ifndef _FMEDIA_INTERNAL_AUDIO_IN_IMPL_H_
26 #define _FMEDIA_INTERNAL_AUDIO_IN_IMPL_H_
27
28 #include <unique_ptr.h>
29 #include <audio_io.h>
30 #include <FBaseByteBuffer.h>
31 #include <FBaseRtIRunnable.h>
32 #include <FBaseRtMonitor.h>
33 #include <FBaseRtThread.h>
34 #include <FBaseColQueueT.h>
35 #include <FMediaAudioIn.h>
36 #include <FMediaAudioTypes.h>
37 #include <FMediaIAudioInEventListener.h>
38
39 namespace Tizen { namespace Media
40 {
41
42 class _AudioInEvent;
43 class _AudioInImpl
44         : public Tizen::Base::Runtime::IRunnable
45         , public Tizen::Base::Object
46 {
47 public:
48         _AudioInImpl(void);
49         virtual ~_AudioInImpl(void);
50         result Construct(IAudioInEventListener& listener);
51         int GetMaxBufferSize(void);
52         int GetMinBufferSize(void);
53         int GetOptimizedSampleRate(void);
54         AudioChannelType GetOptimizedChannelType(void);
55         AudioSampleType GetOptimizedSampleType(void);
56         AudioInState GetState(void);
57         result Prepare(AudioSampleType audioSampleType, AudioChannelType audioChannelType, int audioSampleRate);
58         result Unprepare(void);
59         result Start(void);
60         result Stop(void);
61         result Reset(void);
62         result AddBuffer(const Tizen::Base::ByteBuffer* pByteBuffer);
63         //IRunnable Virtual Functions
64         Tizen::Base::Object* Run(void);
65         //sicne 3.0
66         static _AudioInImpl* GetInstance(AudioIn* pAudioIn);
67         static const _AudioInImpl* GetInstance(const AudioIn* pAudioIn);
68         static void AudioIoInterrupted(audio_io_interrupted_code_e code, void *pUserData);
69 private:
70         _AudioInImpl(const _AudioInImpl& rhs);
71         _AudioInImpl& operator =(const _AudioInImpl& rhs);
72         result SendBufferEndReachedEvent(Tizen::Base::ByteBuffer* pbuffer);
73         result SendInterrupted(void);
74         result SendReleased(void);
75         result SendAudioFocusChanged();
76         result MapExceptionToResult(int reason);
77
78
79         std::unique_ptr<_AudioInEvent> __pAudioInEvent;
80         std::unique_ptr<Tizen::Base::Runtime::Thread> __pWorkerThread;
81         std::unique_ptr<Tizen::Base::Runtime::Monitor> __pBufferSync;
82         AudioInState __audioInState;
83         IAudioInEventListener* __pAudioInEventListener;
84         audio_in_h __audioInHandle;
85         Tizen::Base::Collection::QueueT <const Tizen::Base::ByteBuffer*> __bufferQueue;
86         int __audioInOptimalBufferSize;
87         bool __interruptFlag;
88
89         //static
90         static bool __isConstructed;
91         static int __runFlag;
92         static const int _AUDIO_IN_OPTIMAL_SAMPLE_RATE;
93         static const int _AUDIO_IN_MINIMUM_BUFFER_SIZE;
94         static const int _AUDIO_IN_MAXIMUM_BUFFER_SIZE;
95         static const AudioChannelType _AUDIO_IN_OPTIMAL_CHANNEL_TYPE;
96         static const AudioSampleType _AUDIO_IN_OPTIMAL_SAMPLE_TYPE;
97 };  //end of _AudioInImpl
98
99 }}// Tizen::Media
100
101 #endif