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