VideoEditorPlayer.h revision 7efb8efc88ba529c1c57366a305855c2051ebb8b
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_VIDEOEDITOR_PLAYER_H 18#define ANDROID_VIDEOEDITOR_PLAYER_H 19 20#include <media/MediaPlayerInterface.h> 21#include "AudioTrack.h" 22#include "M4xVSS_API.h" 23#include "VideoEditorMain.h" 24#include "VideoEditorTools.h" 25#include "VideoEditorAudioPlayer.h" 26 27namespace android { 28 29struct PreviewPlayer; 30 31class VideoEditorPlayer : public MediaPlayerInterface { 32 public: 33 class VeAudioOutput: public MediaPlayerBase::AudioSink 34 { 35 public: 36 VeAudioOutput(); 37 virtual ~VeAudioOutput(); 38 39 virtual bool ready() const { return mTrack != NULL; } 40 virtual bool realtime() const { return true; } 41 virtual ssize_t bufferSize() const; 42 virtual ssize_t frameCount() const; 43 virtual ssize_t channelCount() const; 44 virtual ssize_t frameSize() const; 45 virtual uint32_t latency() const; 46 virtual float msecsPerFrame() const; 47 virtual status_t getPosition(uint32_t *position); 48 virtual int getSessionId(); 49 50 virtual status_t open( 51 uint32_t sampleRate, int channelCount, 52 int format, int bufferCount, 53 AudioCallback cb, void *cookie); 54 55 virtual void start(); 56 virtual ssize_t write(const void* buffer, size_t size); 57 virtual void stop(); 58 virtual void flush(); 59 virtual void pause(); 60 virtual void close(); 61 void setAudioStreamType(int streamType) { mStreamType = streamType; } 62 void setVolume(float left, float right); 63 virtual status_t dump(int fd,const Vector<String16>& args) const; 64 65 static bool isOnEmulator(); 66 static int getMinBufferCount(); 67 private: 68 static void setMinBufferCount(); 69 static void CallbackWrapper( 70 int event, void *me, void *info); 71 72 AudioTrack* mTrack; 73 AudioCallback mCallback; 74 void * mCallbackCookie; 75 int mStreamType; 76 float mLeftVolume; 77 float mRightVolume; 78 float mMsecsPerFrame; 79 uint32_t mLatency; 80 int mSessionId; 81 static bool mIsOnEmulator; 82 static int mMinBufferCount; // 12 for emulator; otherwise 4 83 84 public: 85 uint32_t mNumFramesWritten; 86 void snoopWrite(const void*, size_t); 87 }; 88 89public: 90 VideoEditorPlayer(); 91 virtual ~VideoEditorPlayer(); 92 93 virtual status_t initCheck(); 94 95 virtual status_t setDataSource( 96 const char *url, const KeyedVector<String8, String8> *headers); 97 98 virtual status_t setDataSource(int fd, int64_t offset, int64_t length); 99 virtual status_t setVideoSurface(const sp<Surface> &surface); 100 virtual status_t setVideoSurfaceTexture(const sp<ISurfaceTexture> &surfaceTexture); 101 virtual status_t prepare(); 102 virtual status_t prepareAsync(); 103 virtual status_t start(); 104 virtual status_t stop(); 105 virtual status_t pause(); 106 virtual bool isPlaying(); 107 virtual status_t seekTo(int msec); 108 virtual status_t getCurrentPosition(int *msec); 109 virtual status_t getDuration(int *msec); 110 virtual status_t reset(); 111 virtual status_t setLooping(int loop); 112 virtual player_type playerType(); 113 virtual status_t invoke(const Parcel &request, Parcel *reply); 114 virtual void setAudioSink(const sp<AudioSink> &audioSink); 115 virtual void acquireLock(); 116 virtual void releaseLock(); 117 virtual status_t setParameter(int key, const Parcel &request); 118 virtual status_t getParameter(int key, Parcel *reply); 119 120 virtual status_t getMetadata( 121 const media::Metadata::Filter& ids, Parcel *records); 122 123 virtual status_t loadEffectsSettings( 124 M4VSS3GPP_EffectSettings* pEffectSettings, int nEffects); 125 126 virtual status_t loadAudioMixSettings( 127 M4xVSS_AudioMixingSettings* pAudioMixSettings); 128 129 virtual status_t setAudioMixPCMFileHandle( 130 M4OSA_Context pAudioMixPCMFileHandle); 131 132 virtual status_t setAudioMixStoryBoardParam( 133 M4OSA_UInt32 x, M4OSA_UInt32 y, M4OSA_UInt32 z); 134 135 virtual status_t setPlaybackBeginTime(uint32_t msec); 136 virtual status_t setPlaybackEndTime(uint32_t msec); 137 virtual status_t setStoryboardStartTime(uint32_t msec); 138 virtual status_t setProgressCallbackInterval(uint32_t cbInterval); 139 140 virtual status_t setMediaRenderingMode(M4xVSS_MediaRendering mode, 141 M4VIDEOEDITING_VideoFrameSize outputVideoSize); 142 143 virtual status_t resetJniCallbackTimeStamp(); 144 virtual status_t setImageClipProperties(uint32_t width, uint32_t height); 145 virtual status_t readFirstVideoFrame(); 146 virtual status_t getLastRenderedTimeMs(uint32_t *lastRenderedTimeMs); 147 148 status_t setAudioPlayer(VideoEditorAudioPlayer *audioPlayer); 149private: 150 PreviewPlayer *mPlayer; 151 sp<VeAudioOutput> mVeAudioSink; 152 153 VideoEditorPlayer(const VideoEditorPlayer &); 154 VideoEditorPlayer &operator=(const VideoEditorPlayer &); 155}; 156 157} // namespace android 158 159#endif // ANDROID_VIDEOEDITOR_PLAYER_H 160