VideoEditorPlayer.h revision acb62af8ccf493b38decd91d94eb18395b6f9461
1643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi/* 2643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * Copyright (C) 2011 NXP Software 3643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project 4643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * 5643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License"); 6643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * you may not use this file except in compliance with the License. 7643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * You may obtain a copy of the License at 8643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * 9643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * http://www.apache.org/licenses/LICENSE-2.0 10643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * 11643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software 12643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS, 13643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * See the License for the specific language governing permissions and 15643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi * limitations under the License. 16643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi */ 17643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 18643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#ifndef ANDROID_VIDEOEDITOR_PLAYER_H 19643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#define ANDROID_VIDEOEDITOR_PLAYER_H 20643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 21643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include <media/MediaPlayerInterface.h> 22643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include "AudioTrack.h" 23643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include "M4xVSS_API.h" 24643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include "VideoEditorMain.h" 25643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#include "VideoEditorTools.h" 261c97d9ab52a288d24ea54499de435277cc1a3d68Rajneesh Chowdury#include "VideoEditorAudioPlayer.h" 27643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 28643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundarginamespace android { 29643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 30643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargistruct PreviewPlayer; 31643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 32643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargiclass VideoEditorPlayer : public MediaPlayerInterface { 331c97d9ab52a288d24ea54499de435277cc1a3d68Rajneesh Chowdury public: 34643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi class VeAudioOutput: public MediaPlayerBase::AudioSink 35643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi { 36643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi public: 37643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi VeAudioOutput(); 38643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual ~VeAudioOutput(); 39643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 40643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual bool ready() const { return mTrack != NULL; } 41643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual bool realtime() const { return true; } 42643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual ssize_t bufferSize() const; 43643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual ssize_t frameCount() const; 44643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual ssize_t channelCount() const; 45643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual ssize_t frameSize() const; 46643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual uint32_t latency() const; 47643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual float msecsPerFrame() const; 48643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t getPosition(uint32_t *position); 49643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual int getSessionId(); 50643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 51643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t open( 52643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t sampleRate, int channelCount, 53643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi int format, int bufferCount, 54643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi AudioCallback cb, void *cookie); 55643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 56643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual void start(); 57643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual ssize_t write(const void* buffer, size_t size); 58643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual void stop(); 59643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual void flush(); 60643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual void pause(); 61643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual void close(); 62643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void setAudioStreamType(int streamType) { mStreamType = streamType; } 63643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void setVolume(float left, float right); 64643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t dump(int fd,const Vector<String16>& args) const; 65643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 66643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi static bool isOnEmulator(); 67643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi static int getMinBufferCount(); 68643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi private: 69643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi static void setMinBufferCount(); 70643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi static void CallbackWrapper( 71643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi int event, void *me, void *info); 72643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 73643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi AudioTrack* mTrack; 74643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi AudioCallback mCallback; 75643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void * mCallbackCookie; 76643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi int mStreamType; 77643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi float mLeftVolume; 78643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi float mRightVolume; 79643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi float mMsecsPerFrame; 80643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mLatency; 81643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi int mSessionId; 82643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi static bool mIsOnEmulator; 83643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi static int mMinBufferCount; // 12 for emulator; otherwise 4 84643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 85643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi public: 86643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi uint32_t mNumFramesWritten; 87643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi void snoopWrite(const void*, size_t); 88643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi }; 89643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 90643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargipublic: 91643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi VideoEditorPlayer(); 92643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual ~VideoEditorPlayer(); 93643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 94643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t initCheck(); 95643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 96643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setDataSource( 97643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi const char *url, const KeyedVector<String8, String8> *headers); 98643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 99643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setDataSource(int fd, int64_t offset, int64_t length); 100643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setVideoSurface(const sp<Surface> &surface); 1014aeec63e25e1d1f55d55245d1c0ffd554f2a2f49Glenn Kasten virtual status_t setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); 102643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t prepare(); 103643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t prepareAsync(); 104643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t start(); 105643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t stop(); 106643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t pause(); 107643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual bool isPlaying(); 108643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t seekTo(int msec); 109643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t getCurrentPosition(int *msec); 110643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t getDuration(int *msec); 111643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t reset(); 112643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setLooping(int loop); 113643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual player_type playerType(); 114643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t invoke(const Parcel &request, Parcel *reply); 115643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual void setAudioSink(const sp<AudioSink> &audioSink); 116643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t suspend(); 117fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla virtual status_t resume(); 118fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla virtual void acquireLock(); 119fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla virtual void releaseLock(); 120acb62af8ccf493b38decd91d94eb18395b6f9461Gloria Wang virtual status_t setParameter(int key, const Parcel &request); 121acb62af8ccf493b38decd91d94eb18395b6f9461Gloria Wang virtual status_t getParameter(int key, Parcel *reply); 122fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla 123643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t getMetadata( 124643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi const media::Metadata::Filter& ids, Parcel *records); 125643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 126643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t loadEffectsSettings( 127643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4VSS3GPP_EffectSettings* pEffectSettings, int nEffects); 128643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 129643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t loadAudioMixSettings( 130643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4xVSS_AudioMixingSettings* pAudioMixSettings); 131643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 132643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setAudioMixPCMFileHandle( 133643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4OSA_Context pAudioMixPCMFileHandle); 134643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 135643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setAudioMixStoryBoardParam( 136643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4OSA_UInt32 x, M4OSA_UInt32 y, M4OSA_UInt32 z); 137643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 138643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setPlaybackBeginTime(uint32_t msec); 139643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setPlaybackEndTime(uint32_t msec); 140643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setStoryboardStartTime(uint32_t msec); 141643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setProgressCallbackInterval(uint32_t cbInterval); 142643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 143643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setMediaRenderingMode(M4xVSS_MediaRendering mode, 144643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi M4VIDEOEDITING_VideoFrameSize outputVideoSize); 145643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 146643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t resetJniCallbackTimeStamp(); 147643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t setImageClipProperties(uint32_t width, uint32_t height); 148643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi virtual status_t readFirstVideoFrame(); 149b2d6e0f74a12e5cce5b429e646172c63346346c3Santosh Madhava virtual status_t getLastRenderedTimeMs(uint32_t *lastRenderedTimeMs); 150643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 1511c97d9ab52a288d24ea54499de435277cc1a3d68Rajneesh Chowdury status_t setAudioPlayer(VideoEditorAudioPlayer *audioPlayer); 152643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargiprivate: 153643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi PreviewPlayer *mPlayer; 154643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi sp<VeAudioOutput> mVeAudioSink; 155643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 156643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi VideoEditorPlayer(const VideoEditorPlayer &); 157643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi VideoEditorPlayer &operator=(const VideoEditorPlayer &); 158643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi}; 159643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 160643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi} // namespace android 161643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi 162643290dc4c83da23b1b8ff4ed71118203274bb15Dharmaray Kundargi#endif // ANDROID_VIDEOEDITOR_PLAYER_H 163