summaryrefslogtreecommitdiff
path: root/src/com/android/camera/CaptureModule.java
diff options
context:
space:
mode:
authorAbhijit Trivedi <abhijitt@quicinc.com>2018-11-07 00:59:53 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2018-11-07 00:59:53 -0800
commit644a5781c1c3af5824875f45b9a6f23bc3ca775c (patch)
treea3746ba90676e05c0c4fe0e429421c7210f7cf33 /src/com/android/camera/CaptureModule.java
parentec52aba26e10c070ff2064adebe5bacbbeea2b89 (diff)
parentceac40ff95a2adb458dad78b4c5badbc9ef7afac (diff)
Merge "SnapdraongCamera:HEIF surface mode" into camera-SnapdragonCamera.lnx.2.0
Diffstat (limited to 'src/com/android/camera/CaptureModule.java')
-rwxr-xr-xsrc/com/android/camera/CaptureModule.java176
1 files changed, 125 insertions, 51 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 82f4b4c1c..608e119fa 100755
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -494,9 +494,9 @@ public class CaptureModule implements CameraModule, PhotoController,
*/
private ImageReader[] mImageReader = new ImageReader[MAX_NUM_CAM];
private ImageReader[] mRawImageReader = new ImageReader[MAX_NUM_CAM];
- private Surface mHeifInput;
- private HeifWriter mHeifWriter;
- private String mHeifPath;
+ private HeifWriter mInitHeifWriter;
+ private OutputConfiguration mHeifOutput;
+ private HeifImage mHeifImage;
private NamedImages mNamedImages;
private ContentResolver mContentResolver;
private byte[] mLastJpegData;
@@ -1571,9 +1571,17 @@ public class CaptureModule implements CameraModule, PhotoController,
if (mSaveRaw) {
list.add(mRawImageReader[id].getSurface());
}
+
+ List<OutputConfiguration> outputConfigurations = null;
if (mSettingsManager.getSavePictureFormat() == SettingsManager.HEIF_FORMAT ) {
- if (mHeifWriter != null && mHeifInput != null) {
- list.add(mHeifInput);
+ outputConfigurations = new ArrayList<OutputConfiguration>();
+ if (mInitHeifWriter != null) {
+ for (Surface s : list) {
+ outputConfigurations.add(new OutputConfiguration(s));
+ }
+ mHeifOutput = new OutputConfiguration(mInitHeifWriter.getInputSurface());
+ mHeifOutput.enableSurfaceSharing();
+ outputConfigurations.add(mHeifOutput);
}
}
if(mChosenImageFormat == ImageFormat.YUV_420_888 || mChosenImageFormat == ImageFormat.PRIVATE) {
@@ -1586,10 +1594,22 @@ public class CaptureModule implements CameraModule, PhotoController,
mCameraDevice[id].createReprocessableCaptureSession(new InputConfiguration(mImageReader[id].getWidth(),
mImageReader[id].getHeight(), mImageReader[id].getImageFormat()), list, captureSessionCallback, null);
} else {
- mCameraDevice[id].createCaptureSession(list, captureSessionCallback, null);
+ if (mSettingsManager.getSavePictureFormat() == SettingsManager.HEIF_FORMAT &&
+ outputConfigurations != null) {
+ mCameraDevice[id].createCaptureSessionByOutputConfigurations(outputConfigurations,
+ captureSessionCallback,null);
+ } else {
+ mCameraDevice[id].createCaptureSession(list, captureSessionCallback, null);
+ }
}
} else {
- mCameraDevice[id].createCaptureSession(list, captureSessionCallback, null);
+ if (mSettingsManager.getSavePictureFormat() == SettingsManager.HEIF_FORMAT &&
+ outputConfigurations != null) {
+ mCameraDevice[id].createCaptureSessionByOutputConfigurations(outputConfigurations,
+ captureSessionCallback, null);
+ } else {
+ mCameraDevice[id].createCaptureSession(list, captureSessionCallback, null);
+ }
}
} else {
if (surface != null) {
@@ -2147,11 +2167,26 @@ public class CaptureModule implements CameraModule, PhotoController,
}
if (mSettingsManager.getSavePictureFormat() == SettingsManager.HEIF_FORMAT) {
- if (mHeifWriter != null && mHeifInput != null) {
- captureBuilder.addTarget(mHeifInput);
+ long captureTime = System.currentTimeMillis();
+ mNamedImages.nameNewImage(captureTime);
+ NamedEntity name = mNamedImages.getNextNameEntity();
+ String title = (name == null) ? null : name.title;
+ long date = (name == null) ? -1 : name.date;
+ String path = Storage.generateFilepath(title, "heif");
+ String value = mSettingsManager.getValue(SettingsManager.KEY_JPEG_QUALITY);
+ int quality = getQualityNumber(value);
+ int orientation = CameraUtil.getJpegRotation(id,mOrientation);
+ HeifWriter writer = createHEIFEncoder(path,mPictureSize.getWidth(),mPictureSize.getHeight(),
+ orientation,quality);
+ if (writer != null) {
+ mHeifImage = new HeifImage(writer,path,title,date,orientation,quality);
+ Surface input = writer.getInputSurface();
+ mHeifOutput.addSurface(input);
try{
- mHeifWriter.start();
- } catch (IllegalStateException e) {
+ mCaptureSession[id].updateOutputConfiguration(mHeifOutput);
+ captureBuilder.addTarget(input);
+ writer.start();
+ } catch (IllegalStateException | IllegalArgumentException e) {
e.printStackTrace();
}
}
@@ -2312,26 +2347,6 @@ public class CaptureModule implements CameraModule, PhotoController,
CaptureRequest request,
TotalCaptureResult result) {
Log.d(TAG, "captureStillPictureForCommon onCaptureCompleted: " + id);
-
- if (mSettingsManager.getSavePictureFormat() == SettingsManager.HEIF_FORMAT) {
- if (mHeifWriter != null) {
- try {
- mHeifWriter.stop(5000);
- mHeifWriter.close();
- } catch (TimeoutException | IllegalStateException e) {
- Log.d(TAG,"HEIF encode error ="+e.getMessage());
- e.printStackTrace();
- } catch (Exception e) {
- Log.d(TAG, e.toString());
- }
- }
- mActivity.runOnUiThread(new Runnable() {
- @Override
- public void run() {
- restartSession(false);
- }
- });
- }
}
@Override
@@ -2345,6 +2360,24 @@ public class CaptureModule implements CameraModule, PhotoController,
public void onCaptureSequenceCompleted(CameraCaptureSession session, int
sequenceId, long frameNumber) {
Log.d(TAG, "captureStillPictureForCommon onCaptureSequenceCompleted: " + id);
+ if (mSettingsManager.getSavePictureFormat() == SettingsManager.HEIF_FORMAT) {
+ if (mHeifImage != null) {
+ try {
+ mHeifOutput.removeSurface(mHeifImage.getInputSurface());
+ mCaptureSession[id].updateOutputConfiguration(mHeifOutput);
+ mHeifImage.getWriter().stop(3000);
+ mHeifImage.getWriter().close();
+ mActivity.getMediaSaveService().addHEIFImage(mHeifImage.getPath(),
+ mHeifImage.getTitle(),mHeifImage.getDate(),null,mPictureSize.getWidth(),mPictureSize.getHeight(),
+ mHeifImage.getOrientation(),null,mContentResolver,mOnMediaSavedListener,mHeifImage.getQuality(),"heif");
+ mHeifImage = null;
+ } catch (TimeoutException | IllegalStateException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
if (mUI.getCurrentProMode() != ProMode.MANUAL_MODE) {
unlockFocus(id);
} else {
@@ -2488,6 +2521,16 @@ public class CaptureModule implements CameraModule, PhotoController,
}
mCameraId[i] = cameraId;
+ //inti heifWriter and get input surface
+ if (mSettingsManager.getSavePictureFormat() == SettingsManager.HEIF_FORMAT) {
+ String tmpPath = mActivity.getCacheDir().getPath() + "/" + "heif.tmp";
+ if (mInitHeifWriter != null) {
+ mInitHeifWriter.close();
+ }
+ mInitHeifWriter = createHEIFEncoder(tmpPath, mPictureSize.getWidth(),
+ mPictureSize.getHeight(), 0, 85);
+ }
+
if (isClearSightOn()) {
if(i == getMainCameraId()) {
ClearSightImageProcessor.getInstance().init(map, mActivity,
@@ -2512,19 +2555,6 @@ public class CaptureModule implements CameraModule, PhotoController,
mImageReader[i].setOnImageAvailableListener(mPostProcessor.getImageHandler(), mImageAvailableHandler);
mPostProcessor.onImageReaderReady(mImageReader[i], mSupportedMaxPictureSize, mPictureSize);
} else if (i == getMainCameraId()) {
- if (mSettingsManager.getSavePictureFormat() == SettingsManager.HEIF_FORMAT) {
- long captureTime = System.currentTimeMillis();
- String title = String.valueOf(captureTime);
- String path = Storage.generateFilepath(title, "heif");
- String value = mSettingsManager.getValue(SettingsManager.KEY_JPEG_QUALITY);
- int quality = getQualityNumber(value);
- mHeifWriter = createHEIFEncoder(path, mPictureSize.getWidth(),
- mPictureSize.getHeight(), 0, quality);
- if (mHeifWriter != null) {
- mHeifInput = mHeifWriter.getInputSurface();
- mHeifPath = path;
- }
- }
mImageReader[i] = ImageReader.newInstance(mPictureSize.getWidth(),
mPictureSize.getHeight(), imageFormat, MAX_IMAGEREADERS);
@@ -2594,7 +2624,6 @@ public class CaptureModule implements CameraModule, PhotoController,
mSupportedRawPictureSize.getHeight(), ImageFormat.RAW10, PersistUtil.getLongshotShotLimit());
mRawImageReader[i].setOnImageAvailableListener(listener, mImageAvailableHandler);
}
-
}
}
}
@@ -2606,7 +2635,7 @@ public class CaptureModule implements CameraModule, PhotoController,
}
}
- public HeifWriter createHEIFEncoder(String path, int width, int height,
+ public static HeifWriter createHEIFEncoder(String path, int width, int height,
int orientation, int quality) {
HeifWriter heifWriter = null;
try {
@@ -3080,11 +3109,8 @@ public class CaptureModule implements CameraModule, PhotoController,
if(isClearSightOn()) {
ClearSightImageProcessor.getInstance().close();
}
- if (mHeifWriter != null && mHeifPath != null) {
- mHeifWriter.close();
- File emptyFile = new File(mHeifPath);
- if (emptyFile.exists() && emptyFile.length() == 0)
- emptyFile.delete();
+ if (mInitHeifWriter != null) {
+ mInitHeifWriter.close();
}
closeCamera();
resetAudioMute();
@@ -6990,6 +7016,54 @@ public class CaptureModule implements CameraModule, PhotoController,
public void onRenderSurfaceDestroyed() {
mRenderer = null;
}
+
+ public static class HeifImage {
+ private HeifWriter mWriter;
+ private String mPath;
+ private String mTitle;
+ private long mDate;
+ private int mQuality;
+ private int mOrientation;
+ private Surface mInputSurface;
+
+ public HeifImage(HeifWriter writer,String path,String title,long date,int orientation,int quality) {
+ mWriter = writer;
+ mPath = path;
+ mTitle = title;
+ mDate = date;
+ mQuality = quality;
+ mOrientation = orientation;
+ mInputSurface = writer.getInputSurface();
+ }
+
+ public HeifWriter getWriter() {
+ return mWriter;
+ }
+
+ public String getPath() {
+ return mPath;
+ }
+
+ public String getTitle() {
+ return mTitle;
+ }
+
+ public long getDate() {
+ return mDate;
+ }
+
+ public int getQuality() {
+ return mQuality;
+ }
+
+ public Surface getInputSurface(){
+ return mInputSurface;
+ }
+
+ public int getOrientation() {
+ return mOrientation;
+ }
+ }
}
class Camera2GraphView extends View {