mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-21 19:48:29 +00:00
Default to 1x camera in video recording.
Addresses #11955, #12482, #13017 Shout out to @tedgravlin for #13411.
This commit is contained in:
committed by
Cody Henthorne
parent
36ea2a7f5d
commit
6a65a1c149
@@ -31,6 +31,7 @@ import org.thoughtcrime.securesms.mediasend.camerax.CameraXModePolicy;
|
|||||||
import org.thoughtcrime.securesms.permissions.Permissions;
|
import org.thoughtcrime.securesms.permissions.Permissions;
|
||||||
import org.thoughtcrime.securesms.util.ContextUtil;
|
import org.thoughtcrime.securesms.util.ContextUtil;
|
||||||
import org.thoughtcrime.securesms.util.Debouncer;
|
import org.thoughtcrime.securesms.util.Debouncer;
|
||||||
|
import org.thoughtcrime.securesms.util.FeatureFlags;
|
||||||
import org.thoughtcrime.securesms.util.MemoryFileDescriptor;
|
import org.thoughtcrime.securesms.util.MemoryFileDescriptor;
|
||||||
import org.thoughtcrime.securesms.video.VideoUtil;
|
import org.thoughtcrime.securesms.video.VideoUtil;
|
||||||
|
|
||||||
@@ -42,7 +43,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
@RequiresApi(26)
|
@RequiresApi(26)
|
||||||
class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener {
|
class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener {
|
||||||
|
|
||||||
private static final String TAG = CameraXVideoCaptureHelper.class.getName();
|
private static final String TAG = Log.tag(CameraXVideoCaptureHelper.class);
|
||||||
private static final String VIDEO_DEBUG_LABEL = "video-capture";
|
private static final String VIDEO_DEBUG_LABEL = "video-capture";
|
||||||
private static final long VIDEO_SIZE = 10 * 1024 * 1024;
|
private static final long VIDEO_SIZE = 10 * 1024 * 1024;
|
||||||
|
|
||||||
@@ -74,7 +75,7 @@ class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener
|
|||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
debouncer.clear();
|
debouncer.clear();
|
||||||
cameraController.setZoomRatio(Objects.requireNonNull(cameraController.getZoomState().getValue()).getMinZoomRatio());
|
cameraController.setZoomRatio(getDefaultVideoZoomRatio());
|
||||||
memoryFileDescriptor.seek(0);
|
memoryFileDescriptor.seek(0);
|
||||||
callback.onVideoSaved(memoryFileDescriptor.getFileDescriptor());
|
callback.onVideoSaved(memoryFileDescriptor.getFileDescriptor());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -142,7 +143,7 @@ class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener
|
|||||||
@SuppressLint("RestrictedApi")
|
@SuppressLint("RestrictedApi")
|
||||||
private void beginCameraRecording() {
|
private void beginCameraRecording() {
|
||||||
cameraXModePolicy.setToVideo(cameraController);
|
cameraXModePolicy.setToVideo(cameraController);
|
||||||
this.cameraController.setZoomRatio(Objects.requireNonNull(this.cameraController.getZoomState().getValue()).getMinZoomRatio());
|
this.cameraController.setZoomRatio(getDefaultVideoZoomRatio());
|
||||||
callback.onVideoRecordStarted();
|
callback.onVideoRecordStarted();
|
||||||
shrinkCaptureArea();
|
shrinkCaptureArea();
|
||||||
|
|
||||||
@@ -232,8 +233,8 @@ class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener
|
|||||||
@Override
|
@Override
|
||||||
public void onZoomIncremented(float increment) {
|
public void onZoomIncremented(float increment) {
|
||||||
ZoomState zoomState = Objects.requireNonNull(cameraController.getZoomState().getValue());
|
ZoomState zoomState = Objects.requireNonNull(cameraController.getZoomState().getValue());
|
||||||
float range = zoomState.getMaxZoomRatio() - zoomState.getMinZoomRatio();
|
float range = zoomState.getMaxZoomRatio() - getDefaultVideoZoomRatio();
|
||||||
cameraController.setZoomRatio((range * increment) + zoomState.getMinZoomRatio());
|
cameraController.setZoomRatio((range * increment) + getDefaultVideoZoomRatio());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -254,6 +255,14 @@ class CameraXVideoCaptureHelper implements CameraButtonView.VideoCaptureListener
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getDefaultVideoZoomRatio() {
|
||||||
|
if (FeatureFlags.startVideoRecordAt1x()) {
|
||||||
|
return 1f;
|
||||||
|
} else {
|
||||||
|
return Objects.requireNonNull(cameraController.getZoomState().getValue()).getMinZoomRatio();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface Callback {
|
interface Callback {
|
||||||
void onVideoRecordStarted();
|
void onVideoRecordStarted();
|
||||||
|
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ public final class FeatureFlags {
|
|||||||
private static final String USE_ACTIVE_CALL_MANAGER = "android.calling.useActiveCallManager.4";
|
private static final String USE_ACTIVE_CALL_MANAGER = "android.calling.useActiveCallManager.4";
|
||||||
private static final String GIF_SEARCH = "global.gifSearch";
|
private static final String GIF_SEARCH = "global.gifSearch";
|
||||||
private static final String AUDIO_REMUXING = "android.media.audioRemux";
|
private static final String AUDIO_REMUXING = "android.media.audioRemux";
|
||||||
|
private static final String VIDEO_RECORD_1X_ZOOM = "android.media.videoCaptureDefaultZoom";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We will only store remote values for flags in this set. If you want a flag to be controllable
|
* We will only store remote values for flags in this set. If you want a flag to be controllable
|
||||||
@@ -192,7 +193,8 @@ public final class FeatureFlags {
|
|||||||
PHONE_NUMBER_PRIVACY,
|
PHONE_NUMBER_PRIVACY,
|
||||||
USE_ACTIVE_CALL_MANAGER,
|
USE_ACTIVE_CALL_MANAGER,
|
||||||
GIF_SEARCH,
|
GIF_SEARCH,
|
||||||
AUDIO_REMUXING
|
AUDIO_REMUXING,
|
||||||
|
VIDEO_RECORD_1X_ZOOM
|
||||||
);
|
);
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -262,7 +264,8 @@ public final class FeatureFlags {
|
|||||||
CALLING_REACTIONS,
|
CALLING_REACTIONS,
|
||||||
NOTIFICATION_THUMBNAIL_BLOCKLIST,
|
NOTIFICATION_THUMBNAIL_BLOCKLIST,
|
||||||
CALLING_RAISE_HAND,
|
CALLING_RAISE_HAND,
|
||||||
PHONE_NUMBER_PRIVACY
|
PHONE_NUMBER_PRIVACY,
|
||||||
|
VIDEO_RECORD_1X_ZOOM
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -690,6 +693,11 @@ public final class FeatureFlags {
|
|||||||
return getBoolean(AUDIO_REMUXING, false);
|
return getBoolean(AUDIO_REMUXING, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Get the default video zoom, expressed as 10x the actual Float value due to the service limiting us to whole numbers. */
|
||||||
|
public static boolean startVideoRecordAt1x() {
|
||||||
|
return getBoolean(VIDEO_RECORD_1X_ZOOM, false);
|
||||||
|
}
|
||||||
|
|
||||||
/** Only for rendering debug info. */
|
/** Only for rendering debug info. */
|
||||||
public static synchronized @NonNull Map<String, Object> getMemoryValues() {
|
public static synchronized @NonNull Map<String, Object> getMemoryValues() {
|
||||||
return new TreeMap<>(REMOTE_VALUES);
|
return new TreeMap<>(REMOTE_VALUES);
|
||||||
|
|||||||
Reference in New Issue
Block a user