VideoEditorSRC.h revision 9969866cfe5b17c6e481b90d81b011a0cece78a0
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        void setResampling(int32_t sampleRate=kFreq32000Hz);
479969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
489969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    enum { //Sampling freq
499969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq8000Hz = 8000,
509969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq11025Hz = 11025,
519969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq12000Hz = 12000,
529969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq16000Hz = 16000,
539969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq22050Hz = 22050,
549969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq240000Hz = 24000,
559969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq32000Hz = 32000,
569969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq44100 = 44100,
579969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        kFreq48000 = 48000,
589969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    };
599969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
609969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    static const uint16_t UNITY_GAIN = 0x1000;
619969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    static const int32_t DEFAULT_SAMPLING_FREQ = (int32_t)kFreq32000Hz; // kFreq44100;
629969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
639969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    protected :
649969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        virtual ~VideoEditorSRC();
659969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    private:
669969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
679969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        VideoEditorSRC();
689969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        VideoEditorSRC &operator=(const VideoEditorSRC &);
699969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
709969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        AudioResampler        *mResampler;
719969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        sp<MediaSource>      mSource;
729969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        MediaBuffer      *mCopyBuffer;
739969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int mBitDepth;
749969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int mChannelCnt;
759969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int mSampleRate;
769969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int32_t mOutputSampleRate;
779969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        bool mStarted;
789969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        bool mIsResamplingRequired;
799969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        bool mIsChannelConvertionRequired; // for mono to stereo
809969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        sp<MetaData> mOutputFormat;
819969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        Mutex mLock;
829969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
839969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        uint8_t* mInterframeBuffer;
849969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int32_t mInterframeBufferPosition;
859969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int32_t mLeftover;
869969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int32_t mLastReadSize ;
879969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
889969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int64_t mInitialTimeStampUs;
899969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int64_t mAccuOutBufferSize;
909969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
919969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int64_t mSeekTimeUs;
929969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        ReadOptions::SeekMode mSeekMode;
939969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        int16_t *mReSampledBuffer;
949969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
959969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang};
969969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
979969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang} //namespce android
989969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
99