summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/camera/CameraActivity.java4
-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/PhotoModule.java52
-rw-r--r--src/com/android/camera/PhotoUI.java3
-rw-r--r--src/com/android/camera/VideoModule.java4
-rw-r--r--src/com/android/camera/WideAnglePanoramaUI.java8
-rw-r--r--src/com/android/camera/ui/CameraControls.java51
8 files changed, 119 insertions, 22 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index b85a7de06..8fd8f9daa 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -1433,8 +1433,8 @@ public class CameraActivity extends Activity
//This is a temporal solution to share LED resource
//as Android doesn’t have any default intent to share the state.
// if the led flash light is open, turn it off
- Log.d(TAG, "send the turn off LED Flashlight the broadcast");
- Intent intent = new Intent("qualcomm.android.LEDFlashlight.appWidgetUpdate");
+ Log.d(TAG, "send the turn off Flashlight broadcast");
+ Intent intent = new Intent("org.codeaurora.snapcam.action.CLOSE_FLASHLIGHT");
intent.putExtra("camera_led", true);
sendBroadcast(intent);
}
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/PhotoModule.java b/src/com/android/camera/PhotoModule.java
index 14e80ceb2..32cd5dcf7 100644
--- a/src/com/android/camera/PhotoModule.java
+++ b/src/com/android/camera/PhotoModule.java
@@ -357,6 +357,8 @@ public class PhotoModule
private static final int MANUAL_EXPOSURE = 4;
private boolean mAnimateCapture = true;
+ private int mJpegFileSizeEstimation = 0;
+
private MediaSaveService.OnMediaSavedListener mOnMediaSavedListener =
new MediaSaveService.OnMediaSavedListener() {
@Override
@@ -960,15 +962,16 @@ public class PhotoModule
mUI.doShutterAnimation();
+ Location loc = getLocationAccordPictureFormat(mParameters.get(KEY_PICTURE_FORMAT));
if (mLongshotSave) {
mCameraDevice.takePicture(mHandler,
new LongshotShutterCallback(),
mRawPictureCallback, mPostViewPictureCallback,
- new LongshotPictureCallback(null));
+ new LongshotPictureCallback(loc));
} else {
mCameraDevice.takePicture(mHandler,new LongshotShutterCallback(),
mRawPictureCallback, mPostViewPictureCallback,
- new JpegPictureCallback(null));
+ new JpegPictureCallback(loc));
}
}
}
@@ -1319,6 +1322,7 @@ public class PhotoModule
// the mean time and fill it, but that could have happened between the
// shutter press and saving the JPEG too.
mActivity.updateStorageSpaceAndHint();
+ updateRemainingPhotos();
long now = System.currentTimeMillis();
mJpegCallbackFinishTime = now - mJpegPictureCallbackTime;
Log.v(TAG, "mJpegCallbackFinishTime = "
@@ -1529,11 +1533,7 @@ public class PhotoModule
mJpegRotation = CameraUtil.getJpegRotation(mCameraId, orientation);
mParameters.setRotation(mJpegRotation);
String pictureFormat = mParameters.get(KEY_PICTURE_FORMAT);
- Location loc = null;
- if (pictureFormat != null &&
- PIXEL_FORMAT_JPEG.equalsIgnoreCase(pictureFormat)) {
- loc = mLocationManager.getCurrentLocation();
- }
+ Location loc = getLocationAccordPictureFormat(pictureFormat);
CameraUtil.setGpsParameters(mParameters, loc);
if (mRefocus) {
@@ -1598,6 +1598,14 @@ public class PhotoModule
setCameraParameters(UPDATE_PARAM_PREFERENCE);
}
+ private Location getLocationAccordPictureFormat(String pictureFormat) {
+ if (pictureFormat != null &&
+ PIXEL_FORMAT_JPEG.equalsIgnoreCase(pictureFormat)) {
+ return mLocationManager.getCurrentLocation();
+ }
+ return null;
+ }
+
private int getPreferredCameraId(ComboPreferences preferences) {
int intentCameraId = CameraUtil.getCameraFacingIntentExtras(mActivity);
if (intentCameraId != -1) {
@@ -2207,10 +2215,20 @@ public class PhotoModule
@Override
public void run(){
mActivity.updateStorageSpaceAndHint();
+ updateRemainingPhotos();
}
});
}
+ private void updateRemainingPhotos() {
+ if (mJpegFileSizeEstimation != 0) {
+ mUI.updateRemainingPhotos((int) (mActivity.getStorageSpaceBytes()
+ / mJpegFileSizeEstimation));
+ } else {
+ mUI.updateRemainingPhotos(-1);
+ }
+ }
+
private void onResumeTasks() {
Log.v(TAG, "Executing onResumeTasks.");
if (mOpenCameraFail || mCameraDisabled) return;
@@ -2808,6 +2826,7 @@ public class PhotoModule
//mUnsupportedJpegQuality = true;
}else {
mParameters.setJpegQuality(JpegEncodingQualityMappings.getQualityNumber(jpegQuality));
+ setJpegFileSizeEstimation(pic_size, jpegQuality);
}
}
@@ -3205,6 +3224,25 @@ public class PhotoModule
}
}
+ private void setJpegFileSizeEstimation(final Size size, final String quality) {
+ int[] ratios = mActivity.getResources().getIntArray(R.array.jpegquality_compression_ratio);
+ String[] qualities = mActivity.getResources().getStringArray(
+ R.array.pref_camera_jpegquality_entryvalues);
+ int ratio = 0;
+ for (int i = ratios.length - 1; i >= 0; --i) {
+ if (qualities[i].equals(quality)) {
+ ratio = ratios[i];
+ break;
+ }
+ }
+
+ if (ratio == 0) {
+ mJpegFileSizeEstimation = 0;
+ } else {
+ mJpegFileSizeEstimation = size.width * size.height * 3 / ratio;
+ }
+ }
+
private void setFlipValue() {
// Read Flip mode from adb command
//value: 0(default) - FLIP_MODE_OFF
diff --git a/src/com/android/camera/PhotoUI.java b/src/com/android/camera/PhotoUI.java
index 48fb2f704..eb55b72be 100644
--- a/src/com/android/camera/PhotoUI.java
+++ b/src/com/android/camera/PhotoUI.java
@@ -1159,4 +1159,7 @@ public class PhotoUI implements PieListener,
mMenu.setPreference(key, value);
}
+ public void updateRemainingPhotos(int remaining) {
+ mCameraControls.updateRemainingPhotos(remaining);
+ }
}
diff --git a/src/com/android/camera/VideoModule.java b/src/com/android/camera/VideoModule.java
index ae429dd2d..1bd395188 100644
--- a/src/com/android/camera/VideoModule.java
+++ b/src/com/android/camera/VideoModule.java
@@ -1727,7 +1727,7 @@ public class VideoModule implements CameraModule,
Log.v(TAG, "pauseVideoRecording");
mMediaRecorderPausing = true;
mRecordingTotalTime += SystemClock.uptimeMillis() - mRecordingStartTime;
- //mMediaRecorder.pause();
+ mMediaRecorder.pause();
}
private void resumeVideoRecording() {
@@ -1735,7 +1735,7 @@ public class VideoModule implements CameraModule,
mMediaRecorderPausing = false;
mRecordingStartTime = SystemClock.uptimeMillis();
updateRecordingTime();
- //mMediaRecorder.start();
+ mMediaRecorder.start();
}
private boolean stopVideoRecording() {
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);
diff --git a/src/com/android/camera/ui/CameraControls.java b/src/com/android/camera/ui/CameraControls.java
index 1c9419569..181bd991e 100644
--- a/src/com/android/camera/ui/CameraControls.java
+++ b/src/com/android/camera/ui/CameraControls.java
@@ -26,6 +26,7 @@ import android.util.AttributeSet;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.widget.FrameLayout;
+import android.widget.TextView;
import java.util.ArrayList;
import org.codeaurora.snapcam.R;
@@ -66,6 +67,8 @@ public class CameraControls extends RotatableLayout {
private boolean[] mTempEnabled = new boolean[9];
private boolean mLocSet = false;
+ private TextView mRemainingPhotos;
+
AnimatorListener outlistener = new AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
@@ -205,6 +208,7 @@ public class CameraControls extends RotatableLayout {
mPreview = findViewById(R.id.preview_thumb);
mSceneModeSwitcher = findViewById(R.id.scene_mode_switcher);
mFilterModeSwitcher = findViewById(R.id.filter_mode_switcher);
+ mRemainingPhotos = (TextView) findViewById(R.id.remaining_photos);
}
@Override
@@ -238,6 +242,8 @@ public class CameraControls extends RotatableLayout {
View done = findViewById(R.id.btn_done);
toRight(done, shutter, rotation);
}
+
+ layoutRemaingPhotos();
}
private void setLocation(int w, int h) {
@@ -388,6 +394,7 @@ public class CameraControls extends RotatableLayout {
mPreview.animate().translationXBy(-mSize).setDuration(ANIME_DURATION);
break;
}
+ mRemainingPhotos.setVisibility(View.INVISIBLE);
}
public void showUI() {
@@ -475,6 +482,9 @@ public class CameraControls extends RotatableLayout {
mPreview.animate().translationXBy(mSize).setDuration(ANIME_DURATION);
break;
}
+ if (mRemainingPhotos.getVisibility() == View.INVISIBLE) {
+ mRemainingPhotos.setVisibility(View.VISIBLE);
+ }
}
private void center(View v, Rect other, int rotation) {
@@ -646,4 +656,45 @@ public class CameraControls extends RotatableLayout {
mBackgroundView.setBackgroundResource(R.drawable.switcher_bg);
}
+ private void layoutRemaingPhotos() {
+ int rl = mPreview.getLeft();
+ int rt = mPreview.getTop();
+ int rr = mPreview.getRight();
+ int rb = mPreview.getBottom();
+ int w = mRemainingPhotos.getMeasuredWidth();
+ int h = mRemainingPhotos.getMeasuredHeight();
+ int m = getResources().getDimensionPixelSize(R.dimen.remaining_photos_margin);
+
+ int hc, vc;
+ int rotation = getUnifiedRotation();
+ switch (rotation) {
+ case 90:
+ hc = (rl + rr) / 2 - m;
+ vc = (rt + rb) / 2;
+ break;
+ case 180:
+ hc = (rl + rr) / 2;
+ vc = (rt + rb) / 2 + m;
+ break;
+ case 270:
+ hc = (rl + rr) / 2 + m;
+ vc = (rt + rb) / 2;
+ break;
+ default:
+ hc = (rl + rr) / 2;
+ vc = (rt + rb) / 2 - m;
+ break;
+ }
+ mRemainingPhotos.layout(hc - w / 2, vc - h / 2, hc + w / 2, vc + h / 2);
+ }
+
+ public void updateRemainingPhotos(int remaining) {
+ if (remaining < 0) {
+ mRemainingPhotos.setVisibility(View.GONE);
+ } else {
+ mRemainingPhotos.setVisibility(View.VISIBLE);
+ mRemainingPhotos.setText(String.format(
+ getResources().getString(R.string.remaining_photos_format), remaining));
+ }
+ }
}