summaryrefslogtreecommitdiffstats
path: root/libvideoeditor/lvpp/PreviewPlayer.h
diff options
context:
space:
mode:
authorDharmaray Kundargi <dharmaray@google.com>2011-01-16 16:02:42 -0800
committerDharmaray Kundargi <dharmaray@google.com>2011-01-16 19:09:33 -0800
commit643290dc4c83da23b1b8ff4ed71118203274bb15 (patch)
treefd23ca748eca6352c665c6dba3b625e1679d61c4 /libvideoeditor/lvpp/PreviewPlayer.h
parent5358e878396e1c451e9f9ef07237c2e6ab662d49 (diff)
downloadframeworks_av-643290dc4c83da23b1b8ff4ed71118203274bb15.zip
frameworks_av-643290dc4c83da23b1b8ff4ed71118203274bb15.tar.gz
frameworks_av-643290dc4c83da23b1b8ff4ed71118203274bb15.tar.bz2
videoeditor preview code on honeycomb
Change-Id: I9c3c9cb921ea697ab16732973d26ef9035cda2ee
Diffstat (limited to 'libvideoeditor/lvpp/PreviewPlayer.h')
-rwxr-xr-xlibvideoeditor/lvpp/PreviewPlayer.h217
1 files changed, 217 insertions, 0 deletions
diff --git a/libvideoeditor/lvpp/PreviewPlayer.h b/libvideoeditor/lvpp/PreviewPlayer.h
new file mode 100755
index 0000000..214c136
--- /dev/null
+++ b/libvideoeditor/lvpp/PreviewPlayer.h
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2011 NXP Software
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef PREVIEW_PLAYER_H_
+
+#define PREVIEW_PLAYER_H_
+
+#include "NuHTTPDataSource.h"
+#include "TimedEventQueue.h"
+#include "VideoEditorAudioPlayer.h"
+
+#include <media/MediaPlayerInterface.h>
+#include <media/stagefright/DataSource.h>
+#include <media/stagefright/OMXClient.h>
+#include <media/stagefright/TimeSource.h>
+#include <utils/threads.h>
+#include <AwesomePlayer.h>
+#include "VideoEditorPreviewController.h"
+
+namespace android {
+
+struct AudioPlayer;
+struct DataSource;
+struct MediaBuffer;
+struct MediaExtractor;
+struct MediaSource;
+
+struct PreviewPlayerRenderer : public RefBase {
+ PreviewPlayerRenderer() {}
+
+ virtual void render(MediaBuffer *buffer) = 0;
+ virtual void render() = 0;
+ virtual void getBuffer(uint8_t **data, size_t *stride) = 0;
+
+private:
+ PreviewPlayerRenderer(const PreviewPlayerRenderer &);
+ PreviewPlayerRenderer &operator=(const PreviewPlayerRenderer &);
+};
+
+struct PreviewPlayer : public AwesomePlayer {
+ PreviewPlayer();
+ ~PreviewPlayer();
+
+ //Override baseclass methods
+ void reset();
+
+ status_t play();
+
+ void setISurface(const sp<ISurface> &isurface);
+
+ status_t seekTo(int64_t timeUs);
+
+ status_t getVideoDimensions(int32_t *width, int32_t *height) const;
+
+ status_t suspend();
+ status_t resume();
+
+ status_t prepare();
+ status_t setDataSource(
+ const char *uri, const KeyedVector<String8, String8> *headers);
+
+ //Added methods
+ status_t loadEffectsSettings(M4VSS3GPP_EffectSettings* pEffectSettings,
+ int nEffects);
+ status_t loadAudioMixSettings(M4xVSS_AudioMixingSettings* pAudioMixSettings);
+ status_t setAudioMixPCMFileHandle(M4OSA_Context pAudioMixPCMFileHandle);
+ status_t setAudioMixStoryBoardParam(M4OSA_UInt32 audioMixStoryBoardTS,
+ M4OSA_UInt32 currentMediaBeginCutTime,
+ M4OSA_UInt32 currentMediaVolumeVol);
+
+ status_t setPlaybackBeginTime(uint32_t msec);
+ status_t setPlaybackEndTime(uint32_t msec);
+ status_t setStoryboardStartTime(uint32_t msec);
+ status_t setProgressCallbackInterval(uint32_t cbInterval);
+ status_t setMediaRenderingMode(M4xVSS_MediaRendering mode,
+ M4VIDEOEDITING_VideoFrameSize outputVideoSize);
+
+ status_t resetJniCallbackTimeStamp();
+ status_t setImageClipProperties(uint32_t width, uint32_t height);
+ status_t readFirstVideoFrame();
+
+
+private:
+ friend struct PreviewPlayerEvent;
+
+ enum {
+ PLAYING = 1,
+ LOOPING = 2,
+ FIRST_FRAME = 4,
+ PREPARING = 8,
+ PREPARED = 16,
+ AT_EOS = 32,
+ PREPARE_CANCELLED = 64,
+ CACHE_UNDERRUN = 128,
+ AUDIO_AT_EOS = 256,
+ VIDEO_AT_EOS = 512,
+ AUTO_LOOPING = 1024,
+ };
+
+ sp<ISurface> mISurface;
+
+ void cancelPlayerEvents(bool keepBufferingGoing = false);
+ status_t setDataSource_l(const sp<MediaExtractor> &extractor);
+ status_t setDataSource_l(
+ const char *uri, const KeyedVector<String8, String8> *headers);
+ void reset_l();
+ void partial_reset_l();
+ status_t play_l();
+ void initRenderer_l();
+ status_t initAudioDecoder();
+ status_t initVideoDecoder(uint32_t flags = 0);
+ void onVideoEvent();
+ status_t finishSetDataSource_l();
+ static bool ContinuePreparation(void *cookie);
+ void onPrepareAsyncEvent();
+ void finishAsyncPrepare_l();
+
+ sp<PreviewPlayerRenderer> mVideoRenderer;
+
+ int32_t mVideoWidth, mVideoHeight;
+
+ MediaBuffer *mLastVideoBuffer;
+
+ struct SuspensionState {
+ String8 mUri;
+ KeyedVector<String8, String8> mUriHeaders;
+ sp<DataSource> mFileSource;
+
+ uint32_t mFlags;
+ int64_t mPositionUs;
+
+ void *mLastVideoFrame;
+ size_t mLastVideoFrameSize;
+ int32_t mColorFormat;
+ int32_t mVideoWidth, mVideoHeight;
+ int32_t mDecodedWidth, mDecodedHeight;
+
+ SuspensionState()
+ : mLastVideoFrame(NULL) {
+ }
+
+ ~SuspensionState() {
+ if (mLastVideoFrame) {
+ free(mLastVideoFrame);
+ mLastVideoFrame = NULL;
+ }
+ }
+ } *mSuspensionState;
+
+ //Data structures used for audio and video effects
+ M4VSS3GPP_EffectSettings* mEffectsSettings;
+ M4xVSS_AudioMixingSettings* mPreviewPlayerAudioMixSettings;
+ M4OSA_Context mAudioMixPCMFileHandle;
+ M4OSA_UInt32 mAudioMixStoryBoardTS;
+ M4OSA_UInt32 mCurrentMediaBeginCutTime;
+ M4OSA_UInt32 mCurrentMediaVolumeValue;
+
+ uint32_t mNumberEffects;
+ uint32_t mPlayBeginTimeMsec;
+ uint32_t mPlayEndTimeMsec;
+ uint64_t mDecodedVideoTs; // timestamp of current decoded video frame buffer
+ uint64_t mDecVideoTsStoryBoard; // timestamp of frame relative to storyboard
+ uint32_t mCurrentVideoEffect;
+ uint32_t mProgressCbInterval;
+ uint32_t mNumberDecVideoFrames; // Counter of number of video frames decoded
+ sp<TimedEventQueue::Event> mProgressCbEvent;
+ bool mProgressCbEventPending;
+ MediaBuffer *mResizedVideoBuffer;
+ bool mVideoResizedOrCropped;
+ M4xVSS_MediaRendering mRenderingMode;
+ uint32_t mOutputVideoWidth;
+ uint32_t mOutputVideoHeight;
+
+ uint32_t mStoryboardStartTimeMsec;
+
+ bool mIsVideoSourceJpg;
+ bool mIsFiftiesEffectStarted;
+ int64_t mImageFrameTimeUs;
+ bool mStartNextPlayer;
+
+ M4VIFI_UInt8* mFrameRGBBuffer;
+ M4VIFI_UInt8* mFrameYUVBuffer;
+
+ void setVideoPostProcessingNode(
+ M4VSS3GPP_VideoEffectType type, M4OSA_Bool enable);
+ M4OSA_ERR doVideoPostProcessing();
+ M4OSA_ERR doMediaRendering();
+ void postProgressCallbackEvent_l();
+ void onProgressCbEvent();
+
+ status_t setDataSource_l_jpg();
+
+ status_t prepare_l();
+ status_t prepareAsync_l();
+
+ PreviewPlayer(const PreviewPlayer &);
+ PreviewPlayer &operator=(const PreviewPlayer &);
+};
+
+} // namespace android
+
+#endif // PREVIEW_PLAYER_H_
+