VideoEditorPlayer.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#ifndef ANDROID_VIDEOEDITOR_PLAYER_H 189969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#define ANDROID_VIDEOEDITOR_PLAYER_H 199969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 209969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include <media/MediaPlayerInterface.h> 219969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "AudioTrack.h" 229969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "M4xVSS_API.h" 239969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "VideoEditorMain.h" 249969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "VideoEditorTools.h" 259969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#include "VideoEditorAudioPlayer.h" 269969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 279969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changnamespace android { 289969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 299969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changstruct PreviewPlayer; 309969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 319969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changclass VideoEditorPlayer : public MediaPlayerInterface { 329969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang public: 339969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang class VeAudioOutput: public MediaPlayerBase::AudioSink 349969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang { 359969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang public: 369969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VeAudioOutput(); 379969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual ~VeAudioOutput(); 389969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 399969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual bool ready() const { return mTrack != NULL; } 409969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual bool realtime() const { return true; } 419969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual ssize_t bufferSize() const; 429969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual ssize_t frameCount() const; 439969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual ssize_t channelCount() const; 449969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual ssize_t frameSize() const; 459969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual uint32_t latency() const; 469969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual float msecsPerFrame() const; 479969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t getPosition(uint32_t *position); 489969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual int getSessionId(); 499969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 509969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t open( 519969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang uint32_t sampleRate, int channelCount, 529969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int format, int bufferCount, 539969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang AudioCallback cb, void *cookie); 549969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 559969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual void start(); 569969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual ssize_t write(const void* buffer, size_t size); 579969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual void stop(); 589969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual void flush(); 599969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual void pause(); 609969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual void close(); 619969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang void setAudioStreamType(int streamType) { mStreamType = streamType; } 629969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang void setVolume(float left, float right); 639969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t dump(int fd,const Vector<String16>& args) const; 649969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 659969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static bool isOnEmulator(); 669969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static int getMinBufferCount(); 679969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang private: 689969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static void setMinBufferCount(); 699969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static void CallbackWrapper( 709969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int event, void *me, void *info); 719969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 729969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang AudioTrack* mTrack; 739969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang AudioCallback mCallback; 749969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang void * mCallbackCookie; 759969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int mStreamType; 769969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang float mLeftVolume; 779969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang float mRightVolume; 789969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang float mMsecsPerFrame; 799969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang uint32_t mLatency; 809969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang int mSessionId; 819969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static bool mIsOnEmulator; 829969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang static int mMinBufferCount; // 12 for emulator; otherwise 4 839969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 849969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang public: 859969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang uint32_t mNumFramesWritten; 869969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang void snoopWrite(const void*, size_t); 879969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang }; 889969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 899969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changpublic: 909969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorPlayer(); 919969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual ~VideoEditorPlayer(); 929969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 939969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t initCheck(); 949969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 959969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setDataSource( 969969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang const char *url, const KeyedVector<String8, String8> *headers); 979969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 989969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setDataSource(int fd, int64_t offset, int64_t length); 999969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setVideoSurface(const sp<Surface> &surface); 1009969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); 1019969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t prepare(); 1029969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t prepareAsync(); 1039969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t start(); 1049969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t stop(); 1059969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t pause(); 1069969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual bool isPlaying(); 1079969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t seekTo(int msec); 1089969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t getCurrentPosition(int *msec); 1099969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t getDuration(int *msec); 1109969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t reset(); 1119969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setLooping(int loop); 1129969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual player_type playerType(); 1139969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t invoke(const Parcel &request, Parcel *reply); 1149969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual void setAudioSink(const sp<AudioSink> &audioSink); 1159969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t suspend(); 116fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla virtual status_t resume(); 117fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla virtual void acquireLock(); 1189969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual void releaseLock(); 119acb62af8ccf493b38decd91d94eb18395b6f9461Gloria Wang virtual status_t setParameter(int key, const Parcel &request); 120acb62af8ccf493b38decd91d94eb18395b6f9461Gloria Wang virtual status_t getParameter(int key, Parcel *reply); 121fa31daff175709d2c58d61d1354daa9495696631Raghavender Palla 1229969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t getMetadata( 1239969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang const media::Metadata::Filter& ids, Parcel *records); 1249969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1259969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t loadEffectsSettings( 1269969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4VSS3GPP_EffectSettings* pEffectSettings, int nEffects); 1279969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1289969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t loadAudioMixSettings( 1299969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4xVSS_AudioMixingSettings* pAudioMixSettings); 1309969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1319969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setAudioMixPCMFileHandle( 1329969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_Context pAudioMixPCMFileHandle); 1339969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1349969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setAudioMixStoryBoardParam( 1359969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4OSA_UInt32 x, M4OSA_UInt32 y, M4OSA_UInt32 z); 1369969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1379969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setPlaybackBeginTime(uint32_t msec); 1389969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setPlaybackEndTime(uint32_t msec); 1399969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setStoryboardStartTime(uint32_t msec); 1409969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setProgressCallbackInterval(uint32_t cbInterval); 1419969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1429969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setMediaRenderingMode(M4xVSS_MediaRendering mode, 1439969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang M4VIDEOEDITING_VideoFrameSize outputVideoSize); 1449969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1459969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t resetJniCallbackTimeStamp(); 1469969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t setImageClipProperties(uint32_t width, uint32_t height); 1479969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t readFirstVideoFrame(); 1489969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang virtual status_t getLastRenderedTimeMs(uint32_t *lastRenderedTimeMs); 1499969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1509969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang status_t setAudioPlayer(VideoEditorAudioPlayer *audioPlayer); 1519969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Changprivate: 1529969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang PreviewPlayer *mPlayer; 1539969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang sp<VeAudioOutput> mVeAudioSink; 1549969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1559969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorPlayer(const VideoEditorPlayer &); 1569969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang VideoEditorPlayer &operator=(const VideoEditorPlayer &); 1579969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang}; 1589969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1599969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang} // namespace android 1609969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang 1619969866cfe5b17c6e481b90d81b011a0cece78a0Chih-Chung Chang#endif // ANDROID_VIDEOEDITOR_PLAYER_H 162