VideoEditorSRC.h revision 84161acd0c02718b47f82ced3123e9d9eac7b9b9
1efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang/* 2efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * Copyright (C) 2011 The Android Open Source Project 3efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * 4efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * Licensed under the Apache License, Version 2.0 (the "License"); 5efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * you may not use this file except in compliance with the License. 6efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * You may obtain a copy of the License at 7efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * 8efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * http://www.apache.org/licenses/LICENSE-2.0 9efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * 10efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * Unless required by applicable law or agreed to in writing, software 11efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * distributed under the License is distributed on an "AS IS" BASIS, 12efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * See the License for the specific language governing permissions and 14efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang * limitations under the License. 15efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang */ 16efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 17efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang#include <stdint.h> 18efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 19efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang#include <utils/RefBase.h> 20efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang#include <utils/threads.h> 21efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 22efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang#include <media/stagefright/MediaSource.h> 23efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 24efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang#include "AudioBufferProvider.h" 25efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang#include "AudioResampler.h" 26efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 27efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Changnamespace android { 28efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 29efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Changstruct MediaBuffer; 30efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 31efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Changclass VideoEditorSRC : public MediaSource , public AudioBufferProvider { 32efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 33efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang public: 34efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang VideoEditorSRC( 35efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang const sp<MediaSource> &source); 36efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 37efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang virtual status_t start (MetaData *params = NULL); 38efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang virtual status_t stop(); 39efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang virtual sp<MetaData> getFormat(); 40efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang virtual status_t read ( 41efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang MediaBuffer **buffer, const ReadOptions *options = NULL); 42efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 43efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang virtual status_t getNextBuffer(Buffer* buffer); 44efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang virtual void releaseBuffer(Buffer* buffer); 45efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 46efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang void setResampling(int32_t sampleRate=kFreq32000Hz); 47efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 48efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang enum { //Sampling freq 49efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq8000Hz = 8000, 50efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq11025Hz = 11025, 51efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq12000Hz = 12000, 52efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq16000Hz = 16000, 53efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq22050Hz = 22050, 54efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq240000Hz = 24000, 55efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq32000Hz = 32000, 56efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq44100 = 44100, 57efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq48000 = 48000, 58efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang }; 59efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 60efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang static const uint16_t UNITY_GAIN = 0x1000; 61efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang static const int32_t DEFAULT_SAMPLING_FREQ = (int32_t)kFreq32000Hz; // kFreq44100; 62efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 63efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang protected : 64efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang virtual ~VideoEditorSRC(); 65efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang private: 66efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 67efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang VideoEditorSRC(); 68efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang VideoEditorSRC &operator=(const VideoEditorSRC &); 69efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 7084161acd0c02718b47f82ced3123e9d9eac7b9b9Rajneesh Chowdury status_t checkAndSetResampler(); 7184161acd0c02718b47f82ced3123e9d9eac7b9b9Rajneesh Chowdury 72efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang AudioResampler *mResampler; 73efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang sp<MediaSource> mSource; 74efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang MediaBuffer *mCopyBuffer; 75efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int mBitDepth; 76efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int mChannelCnt; 77efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int mSampleRate; 78efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int32_t mOutputSampleRate; 79efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang bool mStarted; 80efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang bool mIsResamplingRequired; 81efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang bool mIsChannelConvertionRequired; // for mono to stereo 82efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang sp<MetaData> mOutputFormat; 83efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang Mutex mLock; 84efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 85efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang uint8_t* mInterframeBuffer; 86efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int32_t mInterframeBufferPosition; 87efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int32_t mLeftover; 88efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int32_t mLastReadSize ; 89efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 90efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int64_t mInitialTimeStampUs; 91efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int64_t mAccuOutBufferSize; 92efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 93efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int64_t mSeekTimeUs; 94efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang ReadOptions::SeekMode mSeekMode; 95efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int16_t *mReSampledBuffer; 96efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 97efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang}; 98efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 99efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang} //namespce android 100efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 101