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 1800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong#include <stdint.h> 199969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <media/stagefright/MediaSource.h> 202dd4bdd715f586d4d30cf90cc6fc2bbfbce60fe0Glenn Kasten#include <media/AudioBufferProvider.h> 219969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "AudioResampler.h" 229969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 239969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changnamespace android { 249969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 259969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changstruct MediaBuffer; 269969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 279969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass VideoEditorSRC : public MediaSource , public AudioBufferProvider { 289969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 2900f742c087d92e5452d29be1fb668022b5f8a6c7James Dongpublic: 3000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong VideoEditorSRC(const sp<MediaSource> &source); 319969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 3200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong virtual status_t start (MetaData *params = NULL); 3300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong virtual status_t stop(); 3400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong virtual sp<MetaData> getFormat(); 3500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong virtual status_t read ( 3600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong MediaBuffer **buffer, const ReadOptions *options = NULL); 379969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 387719f633bd8747b2f56c7be0f102ff131c074c2eJohn Grossman virtual status_t getNextBuffer(Buffer* buffer, int64_t pts); 3900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong virtual void releaseBuffer(Buffer* buffer); 409969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 4100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong // Sampling freqencies 4200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong enum { 4300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong kFreq8000Hz = 8000, 449969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq11025Hz = 11025, 459969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq12000Hz = 12000, 469969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq16000Hz = 16000, 479969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq22050Hz = 22050, 487a4097cc526fc25a36e0f451613340a9444ca043James Dong kFreq24000Hz = 24000, 499969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang kFreq32000Hz = 32000, 5000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong kFreq44100Hz = 44100, 5100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong kFreq48000Hz = 48000, 529969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang }; 539969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 5400f742c087d92e5452d29be1fb668022b5f8a6c7James Dongprotected : 5500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong virtual ~VideoEditorSRC(); 569969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 5700f742c087d92e5452d29be1fb668022b5f8a6c7James Dongprivate: 5800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong AudioResampler *mResampler; 5900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong sp<MediaSource> mSource; 6000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong int mChannelCnt; 6100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong int mSampleRate; 6200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong int32_t mOutputSampleRate; 6300f742c087d92e5452d29be1fb668022b5f8a6c7James Dong bool mStarted; 6400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong sp<MetaData> mOutputFormat; 659969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 6600f742c087d92e5452d29be1fb668022b5f8a6c7James Dong MediaBuffer* mBuffer; 6700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong int32_t mLeftover; 6800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong bool mFormatChanged; 6900f742c087d92e5452d29be1fb668022b5f8a6c7James Dong bool mStopPending; 709969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 7100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong int64_t mInitialTimeStampUs; 7200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong int64_t mAccuOutBufferSize; 731c3c54395729dfae20357d4e510038084cc416ccRajneesh Chowdury 7400f742c087d92e5452d29be1fb668022b5f8a6c7James Dong int64_t mSeekTimeUs; 7500f742c087d92e5452d29be1fb668022b5f8a6c7James Dong ReadOptions::SeekMode mSeekMode; 769969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 7700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong VideoEditorSRC(); 7800f742c087d92e5452d29be1fb668022b5f8a6c7James Dong void checkAndSetResampler(); 799969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 8000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong // Don't call me 8100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong VideoEditorSRC(const VideoEditorSRC&); 8200f742c087d92e5452d29be1fb668022b5f8a6c7James Dong VideoEditorSRC &operator=(const VideoEditorSRC &); 839969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 849969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang}; 859969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 869969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang} //namespce android 879969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 88