videoeditor preview code on honeycomb
Change-Id: I9c3c9cb921ea697ab16732973d26ef9035cda2ee
diff --git a/libvideoeditor/lvpp/DummyVideoSource.cpp b/libvideoeditor/lvpp/DummyVideoSource.cpp
new file mode 100755
index 0000000..4dbdc11
--- /dev/null
+++ b/libvideoeditor/lvpp/DummyVideoSource.cpp
@@ -0,0 +1,165 @@
+/*
+ * 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.
+ */
+
+#define LOG_NDEBUG 1
+#define LOG_TAG "DummyVideoSource"
+#include "utils/Log.h"
+
+#include <media/stagefright/MediaErrors.h>
+#include <media/stagefright/MediaDebug.h>
+#include <media/stagefright/MediaDefs.h>
+#include <media/stagefright/MediaBuffer.h>
+#include <media/stagefright/MediaBufferGroup.h>
+#include <media/stagefright/MetaData.h>
+
+#include "DummyVideoSource.h"
+
+/* Android includes*/
+#include <utils/Log.h>
+#include <memory.h>
+
+
+#define LOG1 LOGE /*ERRORS Logging*/
+#define LOG2 LOGV /*WARNING Logging*/
+#define LOG3 //LOGV /*COMMENTS Logging*/
+
+
+namespace android {
+
+
+sp<DummyVideoSource> DummyVideoSource::Create (
+ uint32_t width, uint32_t height,
+ uint64_t clipDuration, const char *imageUri) {
+ LOG2("DummyVideoSource::Create ");
+ sp<DummyVideoSource> vSource = new DummyVideoSource (
+ width, height, clipDuration, imageUri);
+ return vSource;
+}
+
+
+DummyVideoSource::DummyVideoSource (
+ uint32_t width, uint32_t height,
+ uint64_t clipDuration, const char *imageUri) {
+
+ LOG2("DummyVideoSource::DummyVideoSource constructor START");
+ mFrameWidth = width;
+ mFrameHeight = height;
+ mImageClipDuration = clipDuration;
+ mUri = imageUri;
+ mImageBuffer = NULL;
+
+ LOG2("DummyVideoSource::DummyVideoSource constructor END");
+}
+
+
+DummyVideoSource::~DummyVideoSource () {
+ /* Do nothing here? */
+ LOG2("DummyVideoSource::~DummyVideoSource");
+}
+
+
+
+status_t DummyVideoSource::start(MetaData *params) {
+ status_t err = OK;
+ LOG2("DummyVideoSource::start START, %s", mUri);
+ //get the frame buffer from the rgb file and store into a MediaBuffer
+ err = LvGetImageThumbNail((const char *)mUri,
+ mFrameHeight , mFrameWidth ,
+ (M4OSA_Void **)&mImageBuffer);
+
+ mIsFirstImageFrame = true;
+ mImageSeekTime = 0;
+ mImagePlayStartTime = 0;
+ mFrameTimeUs = 0;
+ LOG2("DummyVideoSource::start END");
+
+ return err;
+}
+
+
+status_t DummyVideoSource::stop() {
+ status_t err = OK;
+
+ LOG2("DummyVideoSource::stop START");
+ if (mImageBuffer != NULL) {
+ M4OSA_free((M4OSA_MemAddr32)mImageBuffer);
+ mImageBuffer = NULL;
+ }
+ LOG2("DummyVideoSource::stop END");
+
+ return err;
+}
+
+
+sp<MetaData> DummyVideoSource::getFormat() {
+ LOG2("DummyVideoSource::getFormat");
+
+ sp<MetaData> meta = new MetaData;
+
+ meta->setInt32(kKeyColorFormat, OMX_COLOR_FormatYUV420Planar);
+ meta->setInt32(kKeyWidth, mFrameWidth);
+ meta->setInt32(kKeyHeight, mFrameHeight);
+ meta->setInt64(kKeyDuration, mImageClipDuration);
+ meta->setCString(kKeyDecoderComponent, "DummyVideoSource");
+
+ return meta;
+}
+
+status_t DummyVideoSource::read(
+ MediaBuffer **out,
+ const MediaSource::ReadOptions *options) {
+ status_t err = OK;
+ MediaBuffer *buffer;
+ LOG2("DummyVideoSource::read START");
+
+ bool seeking = false;
+ int64_t seekTimeUs;
+ ReadOptions::SeekMode seekMode;
+
+ if (options && options->getSeekTo(&seekTimeUs, &seekMode)) {
+ seeking = true;
+ mImageSeekTime = seekTimeUs;
+ }
+
+ if ((mImageSeekTime == mImageClipDuration) || (mFrameTimeUs == mImageClipDuration)) {
+ LOG2("DummyVideoSource::read() End of stream reached; return NULL buffer");
+ *out = NULL;
+ return ERROR_END_OF_STREAM;
+ }
+
+ buffer = new MediaBuffer(mImageBuffer, (mFrameWidth*mFrameHeight*1.5));
+
+ //set timestamp of buffer
+ if (mIsFirstImageFrame) {
+ M4OSA_clockGetTime(&mImagePlayStartTime, 1000); //1000 time scale for time in ms
+ mFrameTimeUs = (mImageSeekTime + 1);
+ LOG2("DummyVideoSource::read() jpg 1st frame timeUs = %lld, begin cut time = %ld", mFrameTimeUs, mImageSeekTime);
+ mIsFirstImageFrame = false;
+ } else {
+ M4OSA_Time currentTimeMs;
+ M4OSA_clockGetTime(¤tTimeMs, 1000);
+
+ mFrameTimeUs = mImageSeekTime + (currentTimeMs - mImagePlayStartTime)*1000;
+ LOG2("DummyVideoSource::read() jpg frame timeUs = %lld", mFrameTimeUs);
+ }
+ buffer->meta_data()->setInt64(kKeyTime, mFrameTimeUs);
+ buffer->set_range(buffer->range_offset(), mFrameWidth*mFrameHeight*1.5);
+ *out = buffer;
+ return err;
+}
+
+}// namespace android