VideoEditorAudioPlayer.h revision 00f742c087d92e5452d29be1fb668022b5f8a6c7
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#ifndef VE_AUDIO_PLAYER_H_
189969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
199969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#define VE_AUDIO_PLAYER_H_
209969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
219969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <media/MediaPlayerInterface.h>
229969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <media/stagefright/MediaBuffer.h>
239969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <media/stagefright/TimeSource.h>
249969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <utils/threads.h>
259969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "M4xVSS_API.h"
269969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "VideoEditorMain.h"
279969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "M4OSA_FileReader.h"
289969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "VideoEditorBGAudioProcessing.h"
299969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "AudioPlayerBase.h"
3000f742c087d92e5452d29be1fb668022b5f8a6c7James Dong#include "PreviewPlayer.h"
319969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
329969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changnamespace android {
339969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
349969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass MediaSource;
359969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass AudioTrack;
369969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass PreviewPlayer;
379969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
389969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
399969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass VideoEditorAudioPlayer : public AudioPlayerBase {
409969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changpublic:
419969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    enum {
429969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        REACHED_EOS,
439969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        SEEK_COMPLETE
449969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    };
459969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
469969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    VideoEditorAudioPlayer(const sp<MediaPlayerBase::AudioSink> &audioSink,
4700f742c087d92e5452d29be1fb668022b5f8a6c7James Dong        PreviewPlayer *audioObserver = NULL);
489969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
499969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    virtual ~VideoEditorAudioPlayer();
509969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
519969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    status_t start(bool sourceAlreadyStarted = false);
529969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    void resume();
539969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
549969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    void setAudioMixSettings(M4xVSS_AudioMixingSettings* pAudioMixSettings);
559969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    void setAudioMixPCMFileHandle(M4OSA_Context pBGAudioPCMFileHandle);
569969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    void setAudioMixStoryBoardSkimTimeStamp(
579969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        M4OSA_UInt32 pBGAudioStoryBoardSkimTimeStamp,
589969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        M4OSA_UInt32 pBGAudioCurrentMediaBeginCutTS,
599969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang        M4OSA_UInt32 pBGAudioCurrentMediaVolumeVal);
609969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
6100f742c087d92e5452d29be1fb668022b5f8a6c7James Dong    void setObserver(PreviewPlayer *observer);
629969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    void setSource(const sp<MediaSource> &source);
639969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    sp<MediaSource> getSource();
649969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
659969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    bool isStarted();
669969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changprivate:
679969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
689969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4xVSS_AudioMixingSettings *mAudioMixSettings;
699969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    VideoEditorBGAudioProcessing *mAudioProcess;
709969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
719969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    M4OSA_Context mBGAudioPCMFileHandle;
729969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    int64_t mBGAudioPCMFileLength;
739969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    int64_t mBGAudioPCMFileTrimmedLength;
749969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    int64_t mBGAudioPCMFileDuration;
759969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    int64_t mBGAudioPCMFileSeekPoint;
769969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    int64_t mBGAudioPCMFileOriginalSeekPoint;
779969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    int64_t mBGAudioStoryBoardSkimTimeStamp;
789969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    int64_t mBGAudioStoryBoardCurrentMediaBeginCutTS;
799969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    int64_t mBGAudioStoryBoardCurrentMediaVolumeVal;
809969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
819969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    size_t fillBuffer(void *data, size_t size);
829969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
839969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    void reset();
849969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    void setPrimaryTrackVolume(M4OSA_Int16 *data, M4OSA_UInt32 size, M4OSA_Float volLevel);
859969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
869969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    static size_t AudioSinkCallback(
879969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang            MediaPlayerBase::AudioSink *audioSink,
889969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang            void *data, size_t size, void *me);
899969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
909969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    VideoEditorAudioPlayer(const VideoEditorAudioPlayer &);
919969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang    VideoEditorAudioPlayer &operator=(const VideoEditorAudioPlayer &);
929969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang};
939969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
949969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang}  // namespace android
959969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang
969969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#endif  // VE_AUDIO_PLAYER_H_
97