blob: 16dcca22f23d3dc808fa9f33c6ab7d413c667d89 [file] [log] [blame]
Dharmaray Kundargi643290d2011-01-16 16:02:42 -08001/*
Dharmaray Kundargi643290d2011-01-16 16:02:42 -08002 * 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 PREVIEW_PLAYER_H_
18
19#define PREVIEW_PLAYER_H_
20
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080021#include "TimedEventQueue.h"
22#include "VideoEditorAudioPlayer.h"
23
24#include <media/MediaPlayerInterface.h>
25#include <media/stagefright/DataSource.h>
26#include <media/stagefright/OMXClient.h>
27#include <media/stagefright/TimeSource.h>
28#include <utils/threads.h>
James Dongc9dedc42011-05-01 12:36:22 -070029#include "PreviewPlayerBase.h"
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080030#include "VideoEditorPreviewController.h"
Chih-Chung Chang43fcc392011-08-02 16:17:39 +080031#include "NativeWindowRenderer.h"
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080032
33namespace android {
34
James Dongc9dedc42011-05-01 12:36:22 -070035struct AudioPlayerBase;
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080036struct DataSource;
37struct MediaBuffer;
38struct MediaExtractor;
39struct MediaSource;
40
James Dongc9dedc42011-05-01 12:36:22 -070041struct PreviewPlayer : public PreviewPlayerBase {
Chih-Chung Chang43fcc392011-08-02 16:17:39 +080042 PreviewPlayer(NativeWindowRenderer* renderer);
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080043 ~PreviewPlayer();
44
45 //Override baseclass methods
46 void reset();
47
48 status_t play();
49
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080050 status_t seekTo(int64_t timeUs);
51
52 status_t getVideoDimensions(int32_t *width, int32_t *height) const;
53
Raghavender Pallafa31daf2011-03-18 22:32:51 -070054 void acquireLock();
55 void releaseLock();
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080056
57 status_t prepare();
58 status_t setDataSource(
59 const char *uri, const KeyedVector<String8, String8> *headers);
60
61 //Added methods
Dharmaray Kundargi35cb2de2011-01-19 19:09:27 -080062 status_t loadEffectsSettings(M4VSS3GPP_EffectSettings* pEffectSettings,
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080063 int nEffects);
64 status_t loadAudioMixSettings(M4xVSS_AudioMixingSettings* pAudioMixSettings);
65 status_t setAudioMixPCMFileHandle(M4OSA_Context pAudioMixPCMFileHandle);
66 status_t setAudioMixStoryBoardParam(M4OSA_UInt32 audioMixStoryBoardTS,
67 M4OSA_UInt32 currentMediaBeginCutTime,
68 M4OSA_UInt32 currentMediaVolumeVol);
69
70 status_t setPlaybackBeginTime(uint32_t msec);
71 status_t setPlaybackEndTime(uint32_t msec);
72 status_t setStoryboardStartTime(uint32_t msec);
73 status_t setProgressCallbackInterval(uint32_t cbInterval);
74 status_t setMediaRenderingMode(M4xVSS_MediaRendering mode,
75 M4VIDEOEDITING_VideoFrameSize outputVideoSize);
76
77 status_t resetJniCallbackTimeStamp();
78 status_t setImageClipProperties(uint32_t width, uint32_t height);
79 status_t readFirstVideoFrame();
Santosh Madhavab2d6e0f2011-02-16 22:24:42 -080080 status_t getLastRenderedTimeMs(uint32_t *lastRenderedTimeMs);
James Dongc9dedc42011-05-01 12:36:22 -070081 status_t setAudioPlayer(AudioPlayerBase *audioPlayer);
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080082
83private:
84 friend struct PreviewPlayerEvent;
85
86 enum {
87 PLAYING = 1,
88 LOOPING = 2,
89 FIRST_FRAME = 4,
90 PREPARING = 8,
91 PREPARED = 16,
92 AT_EOS = 32,
93 PREPARE_CANCELLED = 64,
94 CACHE_UNDERRUN = 128,
95 AUDIO_AT_EOS = 256,
96 VIDEO_AT_EOS = 512,
97 AUTO_LOOPING = 1024,
Hong Tenge0180232011-09-28 18:40:38 -070098 INFORMED_AV_EOS = 2048,
Dharmaray Kundargi643290d2011-01-16 16:02:42 -080099 };
100
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800101 void cancelPlayerEvents(bool keepBufferingGoing = false);
102 status_t setDataSource_l(const sp<MediaExtractor> &extractor);
103 status_t setDataSource_l(
104 const char *uri, const KeyedVector<String8, String8> *headers);
105 void reset_l();
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800106 status_t play_l();
Santosh Madhavabfece172011-02-03 16:59:47 -0800107 status_t initRenderer_l();
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800108 status_t initAudioDecoder();
109 status_t initVideoDecoder(uint32_t flags = 0);
110 void onVideoEvent();
Rajneesh Chowdury1c97d9a2011-02-21 15:43:33 -0800111 void onStreamDone();
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800112 status_t finishSetDataSource_l();
113 static bool ContinuePreparation(void *cookie);
114 void onPrepareAsyncEvent();
115 void finishAsyncPrepare_l();
Dheeraj Sharma5bc7fb42011-02-13 20:31:27 -0800116 status_t startAudioPlayer_l();
Rajneesh Chowdury1c97d9a2011-02-21 15:43:33 -0800117 bool mIsChangeSourceRequired;
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800118
Chih-Chung Chang43fcc392011-08-02 16:17:39 +0800119 NativeWindowRenderer *mNativeWindowRenderer;
120 RenderInput *mVideoRenderer;
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800121
122 int32_t mVideoWidth, mVideoHeight;
123
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800124 //Data structures used for audio and video effects
125 M4VSS3GPP_EffectSettings* mEffectsSettings;
126 M4xVSS_AudioMixingSettings* mPreviewPlayerAudioMixSettings;
127 M4OSA_Context mAudioMixPCMFileHandle;
128 M4OSA_UInt32 mAudioMixStoryBoardTS;
129 M4OSA_UInt32 mCurrentMediaBeginCutTime;
130 M4OSA_UInt32 mCurrentMediaVolumeValue;
Dharmaray Kundargie6c07502011-01-21 16:58:31 -0800131 M4OSA_UInt32 mCurrFramingEffectIndex;
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800132
133 uint32_t mNumberEffects;
134 uint32_t mPlayBeginTimeMsec;
135 uint32_t mPlayEndTimeMsec;
136 uint64_t mDecodedVideoTs; // timestamp of current decoded video frame buffer
137 uint64_t mDecVideoTsStoryBoard; // timestamp of frame relative to storyboard
138 uint32_t mCurrentVideoEffect;
139 uint32_t mProgressCbInterval;
140 uint32_t mNumberDecVideoFrames; // Counter of number of video frames decoded
141 sp<TimedEventQueue::Event> mProgressCbEvent;
142 bool mProgressCbEventPending;
Dharmaray Kundargie6c07502011-01-21 16:58:31 -0800143 sp<TimedEventQueue::Event> mOverlayUpdateEvent;
144 bool mOverlayUpdateEventPending;
145 bool mOverlayUpdateEventPosted;
146
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800147 M4xVSS_MediaRendering mRenderingMode;
148 uint32_t mOutputVideoWidth;
149 uint32_t mOutputVideoHeight;
150
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800151 uint32_t mStoryboardStartTimeMsec;
152
153 bool mIsVideoSourceJpg;
154 bool mIsFiftiesEffectStarted;
155 int64_t mImageFrameTimeUs;
156 bool mStartNextPlayer;
Raghavender Pallafa31daf2011-03-18 22:32:51 -0700157 mutable Mutex mLockControl;
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800158
159 M4VIFI_UInt8* mFrameRGBBuffer;
160 M4VIFI_UInt8* mFrameYUVBuffer;
161
162 void setVideoPostProcessingNode(
163 M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable);
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800164 void postProgressCallbackEvent_l();
165 void onProgressCbEvent();
166
Dharmaray Kundargie6c07502011-01-21 16:58:31 -0800167 void postOverlayUpdateEvent_l();
168 void onUpdateOverlayEvent();
169
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800170 status_t setDataSource_l_jpg();
171
172 status_t prepare_l();
173 status_t prepareAsync_l();
174
Chih-Chung Chang43fcc392011-08-02 16:17:39 +0800175 void updateSizeToRender(sp<MetaData> meta);
176
Dheeraj Sharma5bc7fb42011-02-13 20:31:27 -0800177 VideoEditorAudioPlayer *mVeAudioPlayer;
178
Dharmaray Kundargi643290d2011-01-16 16:02:42 -0800179 PreviewPlayer(const PreviewPlayer &);
180 PreviewPlayer &operator=(const PreviewPlayer &);
181};
182
183} // namespace android
184
185#endif // PREVIEW_PLAYER_H_
186