diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/camera/CameraActivity.java | 4 | ||||
-rw-r--r-- | src/com/android/camera/MosaicPreviewRenderer.java | 9 | ||||
-rw-r--r-- | src/com/android/camera/MosaicRenderer.java | 10 | ||||
-rw-r--r-- | src/com/android/camera/PhotoModule.java | 52 | ||||
-rw-r--r-- | src/com/android/camera/PhotoUI.java | 3 | ||||
-rw-r--r-- | src/com/android/camera/VideoModule.java | 4 | ||||
-rw-r--r-- | src/com/android/camera/WideAnglePanoramaUI.java | 8 | ||||
-rw-r--r-- | src/com/android/camera/ui/CameraControls.java | 51 |
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)); + } + } } |