Add --list-camera-sizes
Add an option to list the device camera declared sizes. PR #4213 <https://github.com/Genymobile/scrcpy/pull/4213>
This commit is contained in:
parent
cd63896d63
commit
f032262cd7
@ -23,6 +23,7 @@ _scrcpy() {
|
|||||||
--kill-adb-on-close
|
--kill-adb-on-close
|
||||||
-K --hid-keyboard
|
-K --hid-keyboard
|
||||||
--legacy-paste
|
--legacy-paste
|
||||||
|
--list-camera-sizes
|
||||||
--list-cameras
|
--list-cameras
|
||||||
--list-displays
|
--list-displays
|
||||||
--list-encoders
|
--list-encoders
|
||||||
|
@ -30,6 +30,7 @@ arguments=(
|
|||||||
'--kill-adb-on-close[Kill adb when scrcpy terminates]'
|
'--kill-adb-on-close[Kill adb when scrcpy terminates]'
|
||||||
{-K,--hid-keyboard}'[Simulate a physical keyboard by using HID over AOAv2]'
|
{-K,--hid-keyboard}'[Simulate a physical keyboard by using HID over AOAv2]'
|
||||||
'--legacy-paste[Inject computer clipboard text as a sequence of key events on Ctrl+v]'
|
'--legacy-paste[Inject computer clipboard text as a sequence of key events on Ctrl+v]'
|
||||||
|
'--list-camera-sizes[List the valid camera capture sizes]'
|
||||||
'--list-cameras[List cameras available on the device]'
|
'--list-cameras[List cameras available on the device]'
|
||||||
'--list-displays[List displays available on the device]'
|
'--list-displays[List displays available on the device]'
|
||||||
'--list-encoders[List video and audio encoders available on the device]'
|
'--list-encoders[List video and audio encoders available on the device]'
|
||||||
|
@ -155,6 +155,10 @@ Inject computer clipboard text as a sequence of key events on Ctrl+v (like MOD+S
|
|||||||
|
|
||||||
This is a workaround for some devices not behaving as expected when setting the device clipboard programmatically.
|
This is a workaround for some devices not behaving as expected when setting the device clipboard programmatically.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
.B \-\-list\-camera\-sizes
|
||||||
|
List the valid camera capture sizes.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
.B \-\-list\-cameras
|
.B \-\-list\-cameras
|
||||||
List cameras available on the device.
|
List cameras available on the device.
|
||||||
|
@ -82,6 +82,7 @@ enum {
|
|||||||
OPT_TIME_LIMIT,
|
OPT_TIME_LIMIT,
|
||||||
OPT_PAUSE_ON_EXIT,
|
OPT_PAUSE_ON_EXIT,
|
||||||
OPT_LIST_CAMERAS,
|
OPT_LIST_CAMERAS,
|
||||||
|
OPT_LIST_CAMERA_SIZES,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct sc_option {
|
struct sc_option {
|
||||||
@ -326,6 +327,11 @@ static const struct sc_option options[] = {
|
|||||||
.longopt = "list-cameras",
|
.longopt = "list-cameras",
|
||||||
.text = "List device cameras.",
|
.text = "List device cameras.",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.longopt_id = OPT_LIST_CAMERA_SIZES,
|
||||||
|
.longopt = "list-camera-sizes",
|
||||||
|
.text = "List the valid camera capture sizes.",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.longopt_id = OPT_LIST_DISPLAYS,
|
.longopt_id = OPT_LIST_DISPLAYS,
|
||||||
.longopt = "list-displays",
|
.longopt = "list-displays",
|
||||||
@ -2007,6 +2013,9 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[],
|
|||||||
case OPT_LIST_CAMERAS:
|
case OPT_LIST_CAMERAS:
|
||||||
opts->list |= SC_OPTION_LIST_CAMERAS;
|
opts->list |= SC_OPTION_LIST_CAMERAS;
|
||||||
break;
|
break;
|
||||||
|
case OPT_LIST_CAMERA_SIZES:
|
||||||
|
opts->list |= SC_OPTION_LIST_CAMERA_SIZES;
|
||||||
|
break;
|
||||||
case OPT_REQUIRE_AUDIO:
|
case OPT_REQUIRE_AUDIO:
|
||||||
opts->require_audio = true;
|
opts->require_audio = true;
|
||||||
break;
|
break;
|
||||||
|
@ -183,6 +183,7 @@ struct scrcpy_options {
|
|||||||
#define SC_OPTION_LIST_ENCODERS 0x1
|
#define SC_OPTION_LIST_ENCODERS 0x1
|
||||||
#define SC_OPTION_LIST_DISPLAYS 0x2
|
#define SC_OPTION_LIST_DISPLAYS 0x2
|
||||||
#define SC_OPTION_LIST_CAMERAS 0x4
|
#define SC_OPTION_LIST_CAMERAS 0x4
|
||||||
|
#define SC_OPTION_LIST_CAMERA_SIZES 0x8
|
||||||
uint8_t list;
|
uint8_t list;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -320,6 +320,9 @@ execute_server(struct sc_server *server,
|
|||||||
if (params->list & SC_OPTION_LIST_CAMERAS) {
|
if (params->list & SC_OPTION_LIST_CAMERAS) {
|
||||||
ADD_PARAM("list_cameras=true");
|
ADD_PARAM("list_cameras=true");
|
||||||
}
|
}
|
||||||
|
if (params->list & SC_OPTION_LIST_CAMERA_SIZES) {
|
||||||
|
ADD_PARAM("list_camera_sizes=true");
|
||||||
|
}
|
||||||
|
|
||||||
#undef ADD_PARAM
|
#undef ADD_PARAM
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@ import android.graphics.Rect;
|
|||||||
import android.hardware.camera2.CameraAccessException;
|
import android.hardware.camera2.CameraAccessException;
|
||||||
import android.hardware.camera2.CameraCharacteristics;
|
import android.hardware.camera2.CameraCharacteristics;
|
||||||
import android.hardware.camera2.CameraManager;
|
import android.hardware.camera2.CameraManager;
|
||||||
|
import android.hardware.camera2.params.StreamConfigurationMap;
|
||||||
|
import android.media.MediaCodec;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -79,7 +81,7 @@ public final class LogUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String buildCameraListMessage() {
|
public static String buildCameraListMessage(boolean includeSizes) {
|
||||||
StringBuilder builder = new StringBuilder("List of cameras:");
|
StringBuilder builder = new StringBuilder("List of cameras:");
|
||||||
CameraManager cameraManager = ServiceManager.getCameraManager();
|
CameraManager cameraManager = ServiceManager.getCameraManager();
|
||||||
try {
|
try {
|
||||||
@ -96,6 +98,14 @@ public final class LogUtils {
|
|||||||
|
|
||||||
Rect activeSize = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
|
Rect activeSize = characteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
|
||||||
builder.append(activeSize.width()).append("x").append(activeSize.height()).append(')');
|
builder.append(activeSize.width()).append("x").append(activeSize.height()).append(')');
|
||||||
|
|
||||||
|
if (includeSizes) {
|
||||||
|
StreamConfigurationMap configs = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
|
||||||
|
android.util.Size[] sizes = configs.getOutputSizes(MediaCodec.class);
|
||||||
|
for (android.util.Size size : sizes) {
|
||||||
|
builder.append("\n - ").append(size.getWidth()).append('x').append(size.getHeight());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (CameraAccessException e) {
|
} catch (CameraAccessException e) {
|
||||||
|
@ -39,6 +39,7 @@ public class Options {
|
|||||||
private boolean listEncoders;
|
private boolean listEncoders;
|
||||||
private boolean listDisplays;
|
private boolean listDisplays;
|
||||||
private boolean listCameras;
|
private boolean listCameras;
|
||||||
|
private boolean listCameraSizes;
|
||||||
|
|
||||||
// Options not used by the scrcpy client, but useful to use scrcpy-server directly
|
// Options not used by the scrcpy client, but useful to use scrcpy-server directly
|
||||||
private boolean sendDeviceMeta = true; // send device name and size
|
private boolean sendDeviceMeta = true; // send device name and size
|
||||||
@ -155,7 +156,7 @@ public class Options {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean getList() {
|
public boolean getList() {
|
||||||
return listEncoders || listDisplays || listCameras;
|
return listEncoders || listDisplays || listCameras || listCameraSizes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getListEncoders() {
|
public boolean getListEncoders() {
|
||||||
@ -170,6 +171,10 @@ public class Options {
|
|||||||
return listCameras;
|
return listCameras;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getListCameraSizes() {
|
||||||
|
return listCameraSizes;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean getSendDeviceMeta() {
|
public boolean getSendDeviceMeta() {
|
||||||
return sendDeviceMeta;
|
return sendDeviceMeta;
|
||||||
}
|
}
|
||||||
@ -320,6 +325,9 @@ public class Options {
|
|||||||
case "list_cameras":
|
case "list_cameras":
|
||||||
options.listCameras = Boolean.parseBoolean(value);
|
options.listCameras = Boolean.parseBoolean(value);
|
||||||
break;
|
break;
|
||||||
|
case "list_camera_sizes":
|
||||||
|
options.listCameraSizes = Boolean.parseBoolean(value);
|
||||||
|
break;
|
||||||
case "send_device_meta":
|
case "send_device_meta":
|
||||||
options.sendDeviceMeta = Boolean.parseBoolean(value);
|
options.sendDeviceMeta = Boolean.parseBoolean(value);
|
||||||
break;
|
break;
|
||||||
|
@ -208,9 +208,9 @@ public final class Server {
|
|||||||
if (options.getListDisplays()) {
|
if (options.getListDisplays()) {
|
||||||
Ln.i(LogUtils.buildDisplayListMessage());
|
Ln.i(LogUtils.buildDisplayListMessage());
|
||||||
}
|
}
|
||||||
if (options.getListCameras()) {
|
if (options.getListCameras() || options.getListCameraSizes()) {
|
||||||
Workarounds.apply(false, true);
|
Workarounds.apply(false, true);
|
||||||
Ln.i(LogUtils.buildCameraListMessage());
|
Ln.i(LogUtils.buildCameraListMessage(options.getListCameraSizes()));
|
||||||
}
|
}
|
||||||
// Just print the requested data, do not mirror
|
// Just print the requested data, do not mirror
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user