Skip to content

Commit

Permalink
Accept --max-fps before Android 10
Browse files Browse the repository at this point in the history
KEY_MAX_FPS_TO_ENCODER existed privately before Android 10:
<#488 (comment)>
  • Loading branch information
rom1v committed Dec 19, 2019
1 parent db6252e commit 83d4826
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 9 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,12 +137,14 @@ scrcpy -b 2M # short version

#### Limit frame rate

On devices with Android >= 10, the capture frame rate can be limited:
The capture frame rate can be limited:

```bash
scrcpy --max-fps 15
```

This is officially supported since Android 10, but may work on earlier versions.

#### Crop

The device screen may be cropped to mirror only part of the screen.
Expand Down
2 changes: 1 addition & 1 deletion app/scrcpy.1
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ Print this help.

.TP
.BI "\-\-max\-fps " value
Limit the framerate of screen capture (only supported on devices with Android >= 10).
Limit the framerate of screen capture (officially supported since Android 10, but may work on earlier versions).

.TP
.BI "\-m, \-\-max\-size " value
Expand Down
4 changes: 2 additions & 2 deletions app/src/cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ scrcpy_print_usage(const char *arg0) {
" Print this help.\n"
"\n"
" --max-fps value\n"
" Limit the frame rate of screen capture (only supported on\n"
" devices with Android >= 10).\n"
" Limit the frame rate of screen capture (officially supported\n"
" since Android 10, but may work on earlier versions).\n"
"\n"
" -m, --max-size value\n"
" Limit both the width and height of the video to value. The\n"
Expand Down
10 changes: 5 additions & 5 deletions server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class ScreenEncoder implements Device.RotationListener {

private static final int DEFAULT_I_FRAME_INTERVAL = 10; // seconds
private static final int REPEAT_FRAME_DELAY_US = 100_000; // repeat after 100ms
private static final String KEY_MAX_FPS_TO_ENCODER = "max-fps-to-encoder";

private static final int NO_PTS = -1;

Expand Down Expand Up @@ -150,11 +151,10 @@ private static MediaFormat createFormat(int bitRate, int maxFps, int iFrameInter
// display the very first frame, and recover from bad quality when no new frames
format.setLong(MediaFormat.KEY_REPEAT_PREVIOUS_FRAME_AFTER, REPEAT_FRAME_DELAY_US); // µs
if (maxFps > 0) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
format.setFloat(MediaFormat.KEY_MAX_FPS_TO_ENCODER, maxFps);
} else {
Ln.w("Max FPS is only supported since Android 10, the option has been ignored");
}
// The key existed privately before Android 10:
// <https://android.googlesource.com/platform/frameworks/base/+/625f0aad9f7a259b6881006ad8710adce57d1384%5E%21/>
// <https://github.com/Genymobile/scrcpy/issues/488#issuecomment-567321437>
format.setFloat(KEY_MAX_FPS_TO_ENCODER, maxFps);
}
return format;
}
Expand Down

0 comments on commit 83d4826

Please sign in to comment.