summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Wang <jaywang@codeaurora.org>2014-12-26 18:10:22 -0800
committerJay Wang <jaywang@codeaurora.org>2015-01-05 17:13:36 -0800
commit8c1e4ff06d80d69792170f0cab8dea2f490cb7fa (patch)
treebe5bbc1308b214d991947185d60e708852e9fdaa
parent90301e97f4575e5e2f7eae5f7b2bd7f724620f79 (diff)
downloadandroid_packages_apps_Snap-8c1e4ff06d80d69792170f0cab8dea2f490cb7fa.tar.gz
android_packages_apps_Snap-8c1e4ff06d80d69792170f0cab8dea2f490cb7fa.tar.bz2
android_packages_apps_Snap-8c1e4ff06d80d69792170f0cab8dea2f490cb7fa.zip
SnapdragonCamera: Add FullScreen Preview when in Panoramic shoot
Changed the Panoramic preview to full screen Resized the warped preview image to smaller Size and render on top of the full screen preview image Change-Id: I98735dbed2ff4dada8708bf5a4a0f9da6ba030c7 Conflicts: res/layout-land/pano_preview_progress.xml res/layout-port/pano_preview_progress.xml
-rw-r--r--[-rwxr-xr-x]jni/feature_mos/src/mosaic_renderer/Renderer.cpp10
-rw-r--r--[-rwxr-xr-x]jni/feature_mos/src/mosaic_renderer/Renderer.h4
-rw-r--r--[-rwxr-xr-x]jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp2
-rw-r--r--[-rwxr-xr-x]jni/feature_mos/src/mosaic_renderer/WarpRenderer.cpp2
-rw-r--r--[-rwxr-xr-x]jni/feature_mos/src/mosaic_renderer/YVURenderer.cpp2
-rw-r--r--jni/mosaic_renderer_jni.cpp83
-rw-r--r--res/layout-land/pano_preview_progress.xml135
-rw-r--r--res/layout-port/pano_preview_progress.xml136
-rw-r--r--res/layout/pano_module_capture.xml104
-rw-r--r--src/com/android/camera/MosaicPreviewRenderer.java9
-rw-r--r--src/com/android/camera/MosaicRenderer.java10
-rw-r--r--src/com/android/camera/WideAnglePanoramaUI.java8
12 files changed, 179 insertions, 326 deletions
diff --git a/jni/feature_mos/src/mosaic_renderer/Renderer.cpp b/jni/feature_mos/src/mosaic_renderer/Renderer.cpp
index b9938eb6b..8d0632402 100755..100644
--- a/jni/feature_mos/src/mosaic_renderer/Renderer.cpp
+++ b/jni/feature_mos/src/mosaic_renderer/Renderer.cpp
@@ -111,8 +111,8 @@ GLuint Renderer::createProgram(const char* pVertexSource, const char* pFragmentS
}
// Set this renderer to use the default frame-buffer (screen) and
-// set the viewport size to be the given width and height (pixels).
-bool Renderer::SetupGraphics(int width, int height)
+// set the viewport size to be the given x, y, width and height (pixels).
+bool Renderer::SetupGraphics(int x, int y, int width, int height)
{
bool succeeded = false;
do {
@@ -131,8 +131,10 @@ bool Renderer::SetupGraphics(int width, int height)
mFrameBuffer = NULL;
mSurfaceWidth = width;
mSurfaceHeight = height;
+ mSurfaceXOffset = x;
+ mSurfaceYOffset = y;
- glViewport(0, 0, mSurfaceWidth, mSurfaceHeight);
+ glViewport(mSurfaceXOffset, mSurfaceYOffset, mSurfaceWidth, mSurfaceHeight);
if (!checkGlError("glViewport")) break;
succeeded = true;
} while (false);
@@ -176,7 +178,7 @@ bool Renderer::Clear(float r, float g, float b, float a)
bool succeeded = false;
do {
bool rt = (mFrameBuffer == NULL)?
- SetupGraphics(mSurfaceWidth, mSurfaceHeight) :
+ SetupGraphics(mSurfaceXOffset, mSurfaceYOffset, mSurfaceWidth, mSurfaceHeight) :
SetupGraphics(mFrameBuffer);
if(!rt)
diff --git a/jni/feature_mos/src/mosaic_renderer/Renderer.h b/jni/feature_mos/src/mosaic_renderer/Renderer.h
index a43e8028e..ffb9cbd25 100755..100644
--- a/jni/feature_mos/src/mosaic_renderer/Renderer.h
+++ b/jni/feature_mos/src/mosaic_renderer/Renderer.h
@@ -18,7 +18,7 @@ class Renderer {
virtual bool InitializeGLProgram() = 0;
bool SetupGraphics(FrameBuffer* buffer);
- bool SetupGraphics(int width, int height);
+ bool SetupGraphics(int x, int y, int width, int height);
bool Clear(float r, float g, float b, float a);
@@ -59,6 +59,8 @@ class Renderer {
int mSurfaceWidth; // Width of target surface.
int mSurfaceHeight; // Height of target surface.
+ int mSurfaceXOffset; // X Offset target surface.
+ int mSurfaceYOffset; // Y Offset of target surface.
FrameBuffer *mFrameBuffer;
};
diff --git a/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp b/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp
index 88aac3626..4725463f2 100755..100644
--- a/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp
+++ b/jni/feature_mos/src/mosaic_renderer/SurfaceTextureRenderer.cpp
@@ -119,7 +119,7 @@ bool SurfaceTextureRenderer::DrawTexture(GLfloat *affine)
bool succeeded = false;
do {
bool rt = (mFrameBuffer == NULL)?
- SetupGraphics(mSurfaceWidth, mSurfaceHeight) :
+ SetupGraphics(mSurfaceXOffset, mSurfaceYOffset, mSurfaceWidth, mSurfaceHeight) :
SetupGraphics(mFrameBuffer);
if(!rt)
diff --git a/jni/feature_mos/src/mosaic_renderer/WarpRenderer.cpp b/jni/feature_mos/src/mosaic_renderer/WarpRenderer.cpp
index af6779a3f..c030ce25e 100755..100644
--- a/jni/feature_mos/src/mosaic_renderer/WarpRenderer.cpp
+++ b/jni/feature_mos/src/mosaic_renderer/WarpRenderer.cpp
@@ -110,7 +110,7 @@ bool WarpRenderer::DrawTexture(GLfloat *affine)
bool succeeded = false;
do {
bool rt = (mFrameBuffer == NULL)?
- SetupGraphics(mSurfaceWidth, mSurfaceHeight) :
+ SetupGraphics(mSurfaceXOffset, mSurfaceYOffset, mSurfaceWidth, mSurfaceHeight) :
SetupGraphics(mFrameBuffer);
if(!rt)
diff --git a/jni/feature_mos/src/mosaic_renderer/YVURenderer.cpp b/jni/feature_mos/src/mosaic_renderer/YVURenderer.cpp
index f7dcf6f61..b30e6f7b6 100755..100644
--- a/jni/feature_mos/src/mosaic_renderer/YVURenderer.cpp
+++ b/jni/feature_mos/src/mosaic_renderer/YVURenderer.cpp
@@ -79,7 +79,7 @@ bool YVURenderer::DrawTexture()
bool succeeded = false;
do {
bool rt = (mFrameBuffer == NULL)?
- SetupGraphics(mSurfaceWidth, mSurfaceHeight) :
+ SetupGraphics(mSurfaceXOffset, mSurfaceYOffset, mSurfaceWidth, mSurfaceHeight) :
SetupGraphics(mFrameBuffer);
if(!rt)
diff --git a/jni/mosaic_renderer_jni.cpp b/jni/mosaic_renderer_jni.cpp
index 36f8064c7..f35599375 100644
--- a/jni/mosaic_renderer_jni.cpp
+++ b/jni/mosaic_renderer_jni.cpp
@@ -27,6 +27,7 @@
#include "mosaic_renderer/SurfaceTextureRenderer.h"
#include "mosaic_renderer/YVURenderer.h"
+
#include "mosaic/Log.h"
#define LOG_TAG "MosaicRenderer"
@@ -36,6 +37,7 @@
GLuint gSurfaceTextureID[1];
bool gWarpImage = true;
+bool gPreviewBackgroundImage = true;
// Low-Res input image frame in YUVA format for preview rendering and processing
// and high-res YUVA input image for processing.
@@ -87,6 +89,9 @@ FrameBuffer gBuffer[2];
// Shader to warp and render the preview FBO to the screen
WarpRenderer gPreview;
+// Shader to render the fullscreen preview background FBO to the screen
+WarpRenderer gPreviewBackground;
+
// Index of the gBuffer FBO gWarper1 is going to write into
int gCurrentFBOIndex = 0;
@@ -140,6 +145,12 @@ double g_dAffinetransPan[16];
GLfloat g_dTranslationToFBOCenterGL[16];
double g_dTranslationToFBOCenter[16];
+
+
+
+
+
+
// GL 4x4 Identity transformation
GLfloat g_dAffinetransIdentGL[] = {
1., 0., 0., 0.,
@@ -315,8 +326,8 @@ void UpdateWarpTransformation(float *trs)
// Alignment is done based on low-res data.
// To render the preview mosaic, the translation of the high-res mosaic is estimated to
// H2L_FACTOR x low-res-based tranlation.
- gThisH1t[2] *= H2L_FACTOR;
- gThisH1t[5] *= H2L_FACTOR;
+ //gThisH1t[2] *= H2L_FACTOR;
+ //gThisH1t[5] *= H2L_FACTOR;
db_Identity3x3(T);
T[2] = -gCenterOffsetX;
@@ -368,6 +379,7 @@ void UpdateWarpTransformation(float *trs)
db_Identity3x3(H);
H[2] = gPanOffset;
+
// Hp = inv(Km) * H * Km
db_Identity3x3(Htemp1);
db_Multiply3x3_3x3(Htemp1, H, gKm);
@@ -397,13 +409,13 @@ void AllocateTextureMemory(int widthHR, int heightHR, int widthLR, int heightLR)
gPreviewImageHeight[HR], 4);
sem_post(&gPreviewImage_semaphore);
- gPreviewFBOWidth = PREVIEW_FBO_WIDTH_SCALE * gPreviewImageWidth[HR];
- gPreviewFBOHeight = PREVIEW_FBO_HEIGHT_SCALE * gPreviewImageHeight[HR];
+ gPreviewFBOWidth = PREVIEW_FBO_WIDTH_SCALE * gPreviewImageWidth[LR];
+ gPreviewFBOHeight = PREVIEW_FBO_HEIGHT_SCALE * gPreviewImageHeight[LR];
// The origin is such that the current frame will sit with its center
// at the center of the previewFBO
- gCenterOffsetX = (gPreviewFBOWidth / 2 - gPreviewImageWidth[HR] / 2);
- gCenterOffsetY = (gPreviewFBOHeight / 2 - gPreviewImageHeight[HR] / 2);
+ gCenterOffsetX = (gPreviewFBOWidth / 2 - gPreviewImageWidth[LR] / 2);
+ gCenterOffsetY = (gPreviewFBOHeight / 2 - gPreviewImageHeight[LR] / 2);
gPanOffset = 0.0f;
@@ -412,8 +424,8 @@ void AllocateTextureMemory(int widthHR, int heightHR, int widthLR, int heightLR)
gPanViewfinder = true;
- int w = gPreviewImageWidth[HR];
- int h = gPreviewImageHeight[HR];
+ int w = gPreviewImageWidth[LR];
+ int h = gPreviewImageHeight[LR];
int wm = gPreviewFBOWidth;
int hm = gPreviewFBOHeight;
@@ -493,6 +505,8 @@ extern "C"
JNIEnv * env, jobject obj);
JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_setWarping(
JNIEnv * env, jobject obj, jboolean flag);
+ JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_setPreviewBackground(
+ JNIEnv * env, jobject obj, jboolean flag);
};
@@ -524,6 +538,7 @@ JNIEXPORT jint JNICALL Java_com_android_camera_MosaicRenderer_init(
gBufferInput[HR].InitializeGLContext();
gBufferInputYVU[LR].InitializeGLContext();
gBufferInputYVU[HR].InitializeGLContext();
+ gPreviewBackground.InitializeGLProgram();
glBindFramebuffer(GL_FRAMEBUFFER, 0);
@@ -548,13 +563,16 @@ void calculateUILayoutScaling(int width, int height, bool isLandscape) {
//
// Scale the preview FBO's height to the height of view and
// maintain the aspect ratio of the current frame on the screen.
+
gUILayoutScalingY = PREVIEW_FBO_HEIGHT_SCALE;
// Note that OpenGL scales a texture to view's width and height automatically.
// The "width / height" inverts the scaling, so as to maintain the aspect ratio
// of the current frame.
+
gUILayoutScalingX = ((float) gPreviewFBOWidth / gPreviewFBOHeight)
/ ((float) width / height) * PREVIEW_FBO_HEIGHT_SCALE;
+
} else {
// ___
// __________ | | ______
@@ -573,8 +591,10 @@ void calculateUILayoutScaling(int width, int height, bool isLandscape) {
// Note that OpenGL scales a texture to view's width and height automatically.
// The "height / width" inverts the scaling, so as to maintain the aspect ratio
// of the current frame.
+
gUILayoutScalingX = ((float) gPreviewFBOHeight / gPreviewFBOWidth)
/ ((float) width / height) * PREVIEW_FBO_WIDTH_SCALE;
+
}
}
@@ -582,7 +602,7 @@ JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_reset(
JNIEnv * env, jobject obj, jint width, jint height, jboolean isLandscapeOrientation)
{
gIsLandscapeOrientation = isLandscapeOrientation;
- calculateUILayoutScaling(width, height, gIsLandscapeOrientation);
+ calculateUILayoutScaling(gPreviewFBOWidth, gPreviewFBOHeight, gIsLandscapeOrientation);
gBuffer[0].Init(gPreviewFBOWidth, gPreviewFBOHeight, GL_RGBA);
gBuffer[1].Init(gPreviewFBOWidth, gPreviewFBOHeight, GL_RGBA);
@@ -636,20 +656,23 @@ JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_reset(
gWarper1.SetInputTextureName(gBuffer[1 - gCurrentFBOIndex].GetTextureName());
gWarper1.SetInputTextureType(GL_TEXTURE_2D);
- // gBufferInput[HR] --> gWarper2 --> gBuffer[gCurrentFBOIndex]
+ // gBufferInput[LR] --> gWarper2 --> gBuffer[gCurrentFBOIndex]
gWarper2.SetupGraphics(&gBuffer[gCurrentFBOIndex]);
// gWarp2's destination buffer is the same to gWarp1's. No need to clear it
// again.
- gWarper2.SetViewportMatrix(gPreviewImageWidth[HR],
- gPreviewImageHeight[HR], gBuffer[gCurrentFBOIndex].GetWidth(),
+ gWarper2.SetViewportMatrix(gPreviewImageWidth[LR],
+ gPreviewImageHeight[LR], gBuffer[gCurrentFBOIndex].GetWidth(),
gBuffer[gCurrentFBOIndex].GetHeight());
gWarper2.SetScalingMatrix(1.0f, 1.0f);
- gWarper2.SetInputTextureName(gBufferInput[HR].GetTextureName());
+ gWarper2.SetInputTextureName(gBufferInput[LR].GetTextureName());
gWarper2.SetInputTextureType(GL_TEXTURE_2D);
+ int xoffset = (width/2 - gPreviewFBOWidth/2);
+ int yoffset = (height/2 - gPreviewFBOHeight/2);
+
// gBuffer[gCurrentFBOIndex] --> gPreview --> Screen
- gPreview.SetupGraphics(width, height);
+ gPreview.SetupGraphics(xoffset,yoffset,gPreviewFBOWidth, gPreviewFBOHeight);
gPreview.SetViewportMatrix(1, 1, 1, 1);
// Scale the previewFBO so that the viewfinder window fills the layout height
@@ -657,6 +680,13 @@ JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_reset(
gPreview.SetScalingMatrix(gUILayoutScalingX, -1.0f * gUILayoutScalingY);
gPreview.SetInputTextureName(gBuffer[gCurrentFBOIndex].GetTextureName());
gPreview.SetInputTextureType(GL_TEXTURE_2D);
+
+ // gBufferInput[HR] --> gPreviewBackground --> screen
+ gPreviewBackground.SetupGraphics(0,0,width, height);
+ gPreviewBackground.SetViewportMatrix(1,1,1,1);
+ gPreviewBackground.SetScalingMatrix(1.0f, -1.0f);
+ gPreviewBackground.SetInputTextureName(gBufferInput[HR].GetTextureName());
+ gPreviewBackground.SetInputTextureType(GL_TEXTURE_2D);
}
JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_preprocess(
@@ -731,15 +761,18 @@ JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_step(
{
if(!gWarpImage) // ViewFinder
{
- gWarper2.SetupGraphics(&gBuffer[gCurrentFBOIndex]);
- gPreview.SetInputTextureName(gBuffer[gCurrentFBOIndex].GetTextureName());
-
- gWarper2.DrawTexture(g_dTranslationToFBOCenterGL);
-
+ if (gIsLandscapeOrientation) {
+ gPreviewBackground.DrawTexture(g_dAffinetransIdentGL);
+ } else {
+ gPreviewBackground.DrawTexture(g_dAffinetransRotation90GL);
+ }
+ }
+ else if(gPreviewBackgroundImage)
+ {
if (gIsLandscapeOrientation) {
- gPreview.DrawTexture(g_dAffinetransIdentGL);
+ gPreviewBackground.DrawTexture(g_dAffinetransIdentGL);
} else {
- gPreview.DrawTexture(g_dAffinetransRotation90GL);
+ gPreviewBackground.DrawTexture(g_dAffinetransRotation90GL);
}
}
else
@@ -774,7 +807,7 @@ JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_setWarping(
gWarper1.Clear(0.0, 0.0, 0.0, 1.0);
// Clear the screen to black.
gPreview.Clear(0.0, 0.0, 0.0, 1.0);
-
+ gPreviewBackground.Clear(0.0, 0.0, 0.0, 1.0);
gLastTx = 0.0f;
gPanOffset = 0.0f;
gPanViewfinder = true;
@@ -802,3 +835,9 @@ JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_updateMatrix(
g_dTranslationToFBOCenterGL[i] = g_dTranslationToFBOCenter[i];
}
}
+
+JNIEXPORT void JNICALL Java_com_android_camera_MosaicRenderer_setPreviewBackground(
+ JNIEnv * env, jobject obj, jboolean flag)
+{
+ gPreviewBackgroundImage = (bool)flag;
+}
diff --git a/res/layout-land/pano_preview_progress.xml b/res/layout-land/pano_preview_progress.xml
index c6c131741..772b8529e 100644
--- a/res/layout-land/pano_preview_progress.xml
+++ b/res/layout-land/pano_preview_progress.xml
@@ -14,106 +14,37 @@
limitations under the License.
-->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/panorama_capture_layout"
- android:layout_height="match_parent"
- android:layout_width="match_parent">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <!-- The top bar with capture indication -->
- <FrameLayout
- style="@style/PanoViewHorizontalBar"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
-
- <TextView
- android:id="@+id/pano_capture_indicator"
- android:text="@string/pano_capture_indication"
- android:textAppearance="?android:textAppearanceMedium"
- android:layout_gravity="center"
- android:visibility="gone"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </FrameLayout>
-
- <FrameLayout
- android:layout_gravity="center"
- android:id="@+id/pano_preview_layout"
- android:layout_weight="@integer/SRI_pano_layout_weight"
- android:layout_width="match_parent"
- android:layout_height="0dp">
-
- <TextureView
- android:id="@+id/pano_preview_textureview"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
- <View
- android:id="@+id/pano_preview_area_border"
- android:visibility="gone"
- android:background="@drawable/ic_pan_border_fast"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- </FrameLayout>
-
- <!-- The bottom bar with progress bar and direction indicators -->
- <FrameLayout
- style="@style/PanoViewHorizontalBar"
- android:paddingTop="20dp"
- android:gravity="top"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
-
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <com.android.camera.PanoProgressBar
- android:id="@+id/pano_pan_progress_bar"
- android:visibility="gone"
- android:src="@drawable/ic_pan_progression"
- android:layout_centerInParent="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <ImageView
- android:id="@+id/pano_pan_left_indicator"
- android:src="@drawable/pano_direction_left_indicator"
- android:visibility="gone"
- android:layout_marginRight="5dp"
- android:layout_toLeftOf="@id/pano_pan_progress_bar"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <ImageView
- android:id="@+id/pano_pan_right_indicator"
- android:src="@drawable/pano_direction_right_indicator"
- android:visibility="gone"
- android:layout_marginLeft="5dp"
- android:layout_toRightOf="@id/pano_pan_progress_bar"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </RelativeLayout>
- </FrameLayout>
-
-
- </LinearLayout>
-
- <!-- The hint for "Too fast" text view -->
- <TextView
- android:id="@+id/pano_capture_too_fast_textview"
- android:text="@string/pano_too_fast_prompt"
- android:textAppearance="?android:textAppearanceMedium"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/panorama_preview_progress"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_gravity="bottom|center_horizontal">
+
+ <com.android.camera.PanoProgressBar
+ android:id="@+id/pano_pan_progress_bar"
+ android:visibility="gone"
+ android:src="@drawable/ic_pan_progression"
+ android:layout_centerInParent="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ImageView
+ android:id="@+id/pano_pan_left_indicator"
+ android:src="@drawable/pano_direction_left_indicator"
+ android:visibility="gone"
+ android:layout_marginRight="5dp"
+ android:layout_toLeftOf="@id/pano_pan_progress_bar"
+ android:layout_centerVertical="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ImageView
+ android:id="@+id/pano_pan_right_indicator"
+ android:src="@drawable/pano_direction_right_indicator"
+ android:visibility="gone"
+ android:layout_marginLeft="5dp"
+ android:layout_toRightOf="@id/pano_pan_progress_bar"
+ android:layout_centerVertical="true"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:visibility="gone" />
-</FrameLayout>
+ android:layout_height="wrap_content" />
+</RelativeLayout>
diff --git a/res/layout-port/pano_preview_progress.xml b/res/layout-port/pano_preview_progress.xml
index c6c131741..426ef0ba7 100644
--- a/res/layout-port/pano_preview_progress.xml
+++ b/res/layout-port/pano_preview_progress.xml
@@ -14,106 +14,38 @@
limitations under the License.
-->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/panorama_capture_layout"
- android:layout_height="match_parent"
- android:layout_width="match_parent">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
-
- <!-- The top bar with capture indication -->
- <FrameLayout
- style="@style/PanoViewHorizontalBar"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
-
- <TextView
- android:id="@+id/pano_capture_indicator"
- android:text="@string/pano_capture_indication"
- android:textAppearance="?android:textAppearanceMedium"
- android:layout_gravity="center"
- android:visibility="gone"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </FrameLayout>
-
- <FrameLayout
- android:layout_gravity="center"
- android:id="@+id/pano_preview_layout"
- android:layout_weight="@integer/SRI_pano_layout_weight"
- android:layout_width="match_parent"
- android:layout_height="0dp">
-
- <TextureView
- android:id="@+id/pano_preview_textureview"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
- <View
- android:id="@+id/pano_preview_area_border"
- android:visibility="gone"
- android:background="@drawable/ic_pan_border_fast"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- </FrameLayout>
-
- <!-- The bottom bar with progress bar and direction indicators -->
- <FrameLayout
- style="@style/PanoViewHorizontalBar"
- android:paddingTop="20dp"
- android:gravity="top"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
-
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <com.android.camera.PanoProgressBar
- android:id="@+id/pano_pan_progress_bar"
- android:visibility="gone"
- android:src="@drawable/ic_pan_progression"
- android:layout_centerInParent="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <ImageView
- android:id="@+id/pano_pan_left_indicator"
- android:src="@drawable/pano_direction_left_indicator"
- android:visibility="gone"
- android:layout_marginRight="5dp"
- android:layout_toLeftOf="@id/pano_pan_progress_bar"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <ImageView
- android:id="@+id/pano_pan_right_indicator"
- android:src="@drawable/pano_direction_right_indicator"
- android:visibility="gone"
- android:layout_marginLeft="5dp"
- android:layout_toRightOf="@id/pano_pan_progress_bar"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </RelativeLayout>
- </FrameLayout>
-
-
- </LinearLayout>
-
- <!-- The hint for "Too fast" text view -->
- <TextView
- android:id="@+id/pano_capture_too_fast_textview"
- android:text="@string/pano_too_fast_prompt"
- android:textAppearance="?android:textAppearanceMedium"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/panorama_preview_progress"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_gravity="bottom|center_horizontal"
+ android:layout_marginBottom="100dp">
+
+ <com.android.camera.PanoProgressBar
+ android:id="@+id/pano_pan_progress_bar"
+ android:visibility="gone"
+ android:src="@drawable/ic_pan_progression"
+ android:layout_centerInParent="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ImageView
+ android:id="@+id/pano_pan_left_indicator"
+ android:src="@drawable/pano_direction_left_indicator"
+ android:visibility="gone"
+ android:layout_marginRight="5dp"
+ android:layout_toLeftOf="@id/pano_pan_progress_bar"
+ android:layout_centerVertical="true"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ <ImageView
+ android:id="@+id/pano_pan_right_indicator"
+ android:src="@drawable/pano_direction_right_indicator"
+ android:visibility="gone"
+ android:layout_marginLeft="5dp"
+ android:layout_toRightOf="@id/pano_pan_progress_bar"
+ android:layout_centerVertical="true"
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:visibility="gone" />
-</FrameLayout>
+ android:layout_height="wrap_content" />
+</RelativeLayout>
diff --git a/res/layout/pano_module_capture.xml b/res/layout/pano_module_capture.xml
index c6c131741..d842ea12c 100644
--- a/res/layout/pano_module_capture.xml
+++ b/res/layout/pano_module_capture.xml
@@ -19,94 +19,36 @@
android:layout_height="match_parent"
android:layout_width="match_parent">
- <LinearLayout
+ <FrameLayout
+ android:layout_gravity="center"
+ android:id="@+id/pano_preview_layout"
+ android:layout_weight="@integer/SRI_pano_layout_weight"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:layout_height="match_parent">
- <!-- The top bar with capture indication -->
- <FrameLayout
- style="@style/PanoViewHorizontalBar"
+ <TextureView
+ android:id="@+id/pano_preview_textureview"
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
-
- <TextView
- android:id="@+id/pano_capture_indicator"
- android:text="@string/pano_capture_indication"
- android:textAppearance="?android:textAppearanceMedium"
- android:layout_gravity="center"
- android:visibility="gone"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </FrameLayout>
+ android:layout_height="match_parent" />
- <FrameLayout
- android:layout_gravity="center"
- android:id="@+id/pano_preview_layout"
- android:layout_weight="@integer/SRI_pano_layout_weight"
+ <View
+ android:id="@+id/pano_preview_area_border"
+ android:visibility="gone"
+ android:background="@drawable/ic_pan_border_fast"
android:layout_width="match_parent"
- android:layout_height="0dp">
-
- <TextureView
- android:id="@+id/pano_preview_textureview"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
-
- <View
- android:id="@+id/pano_preview_area_border"
- android:visibility="gone"
- android:background="@drawable/ic_pan_border_fast"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
- </FrameLayout>
-
- <!-- The bottom bar with progress bar and direction indicators -->
- <FrameLayout
- style="@style/PanoViewHorizontalBar"
- android:paddingTop="20dp"
- android:gravity="top"
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
-
- <RelativeLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="match_parent" />
+ </FrameLayout>
- <com.android.camera.PanoProgressBar
- android:id="@+id/pano_pan_progress_bar"
- android:visibility="gone"
- android:src="@drawable/ic_pan_progression"
- android:layout_centerInParent="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <ImageView
- android:id="@+id/pano_pan_left_indicator"
- android:src="@drawable/pano_direction_left_indicator"
- android:visibility="gone"
- android:layout_marginRight="5dp"
- android:layout_toLeftOf="@id/pano_pan_progress_bar"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
-
- <ImageView
- android:id="@+id/pano_pan_right_indicator"
- android:src="@drawable/pano_direction_right_indicator"
- android:visibility="gone"
- android:layout_marginLeft="5dp"
- android:layout_toRightOf="@id/pano_pan_progress_bar"
- android:layout_centerVertical="true"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </RelativeLayout>
- </FrameLayout>
-
-
- </LinearLayout>
+ <include layout="@layout/pano_preview_progress" />
+ <TextView
+ android:id="@+id/pano_capture_indicator"
+ android:text="@string/pano_capture_indication"
+ android:textAppearance="?android:textAppearanceMedium"
+ android:layout_gravity="top|center_horizontal"
+ android:visibility="gone"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
<!-- The hint for "Too fast" text view -->
<TextView
android:id="@+id/pano_capture_too_fast_textview"
diff --git a/src/com/android/camera/MosaicPreviewRenderer.java b/src/com/android/camera/MosaicPreviewRenderer.java
index 42da4d9e7..77c260eb5 100644
--- a/src/com/android/camera/MosaicPreviewRenderer.java
+++ b/src/com/android/camera/MosaicPreviewRenderer.java
@@ -83,10 +83,13 @@ public class MosaicPreviewRenderer {
mInputSurfaceTexture.updateTexImage();
mInputSurfaceTexture.getTransformMatrix(mTransformMatrix);
- MosaicRenderer.setWarping(true);
- // Call preprocess to render it to low-res and high-res RGB textures.
+ // Call setPreviewBackground to render high-res RGB textures to full screen.
+ MosaicRenderer.setPreviewBackground(true);
MosaicRenderer.preprocess(mTransformMatrix);
- // Now, transfer the textures from GPU to CPU memory for processing
+ MosaicRenderer.step();
+ MosaicRenderer.setPreviewBackground(false);
+
+ MosaicRenderer.setWarping(true);
MosaicRenderer.transferGPUtoCPU();
MosaicRenderer.updateMatrix();
MosaicRenderer.step();
diff --git a/src/com/android/camera/MosaicRenderer.java b/src/com/android/camera/MosaicRenderer.java
index 92d9cb7b6..daf94abe6 100644
--- a/src/com/android/camera/MosaicRenderer.java
+++ b/src/com/android/camera/MosaicRenderer.java
@@ -86,4 +86,14 @@ public class MosaicRenderer
* @param flag boolean flag to set the warping to true or false.
*/
public static native void setWarping(boolean flag);
+ /**
+ * This function allows toggling between drawing the background full
+ * screen preview image data to screen and drawing the warped smaller
+ * preview on top of it. To render the full screen background preview,
+ * we set the falsg to true and to render the warped image on top of this
+ * we set the flag to false and flag in setWarping to true.
+ *
+ * @param flag boolean flag to set the warping to true or false.
+ */
+ public static native void setPreviewBackground(boolean flag);
}
diff --git a/src/com/android/camera/WideAnglePanoramaUI.java b/src/com/android/camera/WideAnglePanoramaUI.java
index 8f9643971..952a31909 100644
--- a/src/com/android/camera/WideAnglePanoramaUI.java
+++ b/src/com/android/camera/WideAnglePanoramaUI.java
@@ -434,14 +434,6 @@ public class WideAnglePanoramaUI implements
private void setViews(Resources appRes) {
int weight = appRes.getInteger(R.integer.SRI_pano_layout_weight);
- LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mPreviewLayout.getLayoutParams();
- lp.weight = weight;
- mPreviewLayout.setLayoutParams(lp);
-
- lp = (LinearLayout.LayoutParams) mReview.getLayoutParams();
- lp.weight = weight;
- mPreviewLayout.setLayoutParams(lp);
-
mSavingProgressBar = (PanoProgressBar) mRootView.findViewById(R.id.pano_saving_progress_bar);
mSavingProgressBar.setIndicatorWidth(0);
mSavingProgressBar.setMaxProgress(100);