VideoEditorSRC.h revision e79d2faf19cf0eaedf895888e2934262c7ecace7
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 enum { //Sampling freq 47efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq8000Hz = 8000, 48efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq11025Hz = 11025, 49efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq12000Hz = 12000, 50efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq16000Hz = 16000, 51efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq22050Hz = 22050, 52efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq240000Hz = 24000, 53efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq32000Hz = 32000, 54efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq44100 = 44100, 55efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang kFreq48000 = 48000, 56efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang }; 57efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 58efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang static const uint16_t UNITY_GAIN = 0x1000; 59e79d2faf19cf0eaedf895888e2934262c7ecace7Chih-Chung Chang static const int32_t DEFAULT_SAMPLING_FREQ = (int32_t)kFreq32000Hz; 60efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 61efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang protected : 62efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang virtual ~VideoEditorSRC(); 63efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang private: 64efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 65efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang VideoEditorSRC(); 66efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang VideoEditorSRC &operator=(const VideoEditorSRC &); 67efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 68e79d2faf19cf0eaedf895888e2934262c7ecace7Chih-Chung Chang void checkAndSetResampler(); 6984161acd0c02718b47f82ced3123e9d9eac7b9b9Rajneesh Chowdury 70efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang AudioResampler *mResampler; 71efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang sp<MediaSource> mSource; 72efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int mChannelCnt; 73efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int mSampleRate; 74efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int32_t mOutputSampleRate; 75efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang bool mStarted; 76efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang sp<MetaData> mOutputFormat; 77efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 78e79d2faf19cf0eaedf895888e2934262c7ecace7Chih-Chung Chang MediaBuffer* mBuffer; 79efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int32_t mLeftover; 80e79d2faf19cf0eaedf895888e2934262c7ecace7Chih-Chung Chang bool mFormatChanged; 81efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 82efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int64_t mInitialTimeStampUs; 83efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int64_t mAccuOutBufferSize; 84efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 85efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang int64_t mSeekTimeUs; 86efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang ReadOptions::SeekMode mSeekMode; 87efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang}; 88efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 89efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang} //namespce android 90efa27232d6812a6c71682cc3d0041a39c2bd52efChih-Chung Chang 91