VideoEditorSRC.h revision 7a4097cc526fc25a36e0f451613340a9444ca043
19969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang/* 29969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Copyright (C) 2011 The Android Open Source Project 39969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * 49969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Licensed under the Apache License, Version 2.0 (the "License"); 59969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * you may not use this file except in compliance with the License. 69969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * You may obtain a copy of the License at 79969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * 89969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * http://www.apache.org/licenses/LICENSE-2.0 99969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * 109969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * Unless required by applicable law or agreed to in writing, software 119969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * distributed under the License is distributed on an "AS IS" BASIS, 129969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * See the License for the specific language governing permissions and 149969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang * limitations under the License. 159969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang */ 169969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 179969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <stdint.h> 189969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 199969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <utils/RefBase.h> 209969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <utils/threads.h> 219969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 229969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <media/stagefright/MediaSource.h> 239969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 249969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "AudioBufferProvider.h" 259969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "AudioResampler.h" 269969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 279969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changnamespace android { 289969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 299969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changstruct MediaBuffer; 309969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 319969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass VideoEditorSRC : public MediaSource , public AudioBufferProvider { 329969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 339969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang public: 349969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorSRC( 359969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang const sp<MediaSource> &source); 369969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 379969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t start (MetaData *params = NULL); 389969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t stop(); 399969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual sp<MetaData> getFormat(); 409969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t read ( 419969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang MediaBuffer **buffer, const ReadOptions *options = NULL); 429969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 439969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t getNextBuffer(Buffer* buffer); 449969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual void releaseBuffer(Buffer* buffer); 459969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 469969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang enum { //Sampling freq 479969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq8000Hz = 8000, 489969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq11025Hz = 11025, 499969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq12000Hz = 12000, 509969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq16000Hz = 16000, 519969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq22050Hz = 22050, 527a4097cc526fc25a36e0f451613340a9444ca043James Dong kFreq24000Hz = 24000, 539969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq32000Hz = 32000, 549969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq44100 = 44100, 559969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq48000 = 48000, 569969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang }; 579969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 589969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static const uint16_t UNITY_GAIN = 0x1000; 593d974e7763495d8fda6f264810619cb3bd265293Chih-Chung Chang static const int32_t DEFAULT_SAMPLING_FREQ = (int32_t)kFreq32000Hz; 609969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 619969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang protected : 629969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual ~VideoEditorSRC(); 639969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang private: 649969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 659969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorSRC(); 669969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorSRC &operator=(const VideoEditorSRC &); 679969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 683d974e7763495d8fda6f264810619cb3bd265293Chih-Chung Chang void checkAndSetResampler(); 691c3c54395729dfae20357d4e510038084cc416ccRajneesh Chowdury 709969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang AudioResampler *mResampler; 719969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang sp<MediaSource> mSource; 729969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int mChannelCnt; 739969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int mSampleRate; 749969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int32_t mOutputSampleRate; 759969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang bool mStarted; 769969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang sp<MetaData> mOutputFormat; 779969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 783d974e7763495d8fda6f264810619cb3bd265293Chih-Chung Chang MediaBuffer* mBuffer; 799969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int32_t mLeftover; 803d974e7763495d8fda6f264810619cb3bd265293Chih-Chung Chang bool mFormatChanged; 812db767137112a619751b70b9947aaa064030a210Chih-Chung Chang bool mStopPending; 829969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 839969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int64_t mInitialTimeStampUs; 849969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int64_t mAccuOutBufferSize; 859969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 869969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int64_t mSeekTimeUs; 879969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang ReadOptions::SeekMode mSeekMode; 889969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang}; 899969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 909969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang} //namespce android 919969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 92