Приложение для записи экрана выдает ошибку на Custom RomAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Приложение для записи экрана выдает ошибку на Custom Rom

Сообщение Anonymous »

Я новичок в разработке Android Custom Rom. Мне интересно проверить, в чем проблема самого кодека. У меня есть журнал отладки и копия самого приложения, однако я не могу изменить исходный код приложения вручную, если оно уже установлено.
Сейчас я использую Android 12. GSI, в котором я пытаюсь изменить некоторые файлы и заставить его работать на другом устройстве.
Вот журнал отладки:

Код: Выделить всё

10-24 03:57:39.788 24987 24987 D RecordingService: onStartCommand com.android.systemui.screenrecord.START
10-24 03:57:39.788 24987 24987 D RecordingService: recording with audio sourceNONE
10-24 03:57:39.790 24987 24987 D ScreenMediaRecorder: start recording
10-24 03:57:39.792 1479 1508 I InputManager-JNI: Setting show touches feature to disabled.
10-24 03:57:39.795 1479 1601 I InputReader: Reconfiguring input devices, changes=SHOW_TOUCHES |
10-24 03:57:39.798 1035 1203 W StagefrightRecorder: stop while neither recording nor paused
10-24 03:57:39.811 24987 24987 W System.err: java.lang.IllegalArgumentException: unsupported size
10-24 03:57:39.811 24987 24987 W System.err: at android.media.MediaCodecInfo$VideoCapabilities.getSupportedFrameRatesFor(MediaCodecInfo.java:1676)
10-24 03:57:39.811 24987 24987 W System.err: at com.android.systemui.screenrecord.ScreenMediaRecorder.getSupportedSize(ScreenMediaRecorder.java:254)
10-24 03:57:39.811 24987 24987 W System.err: at com.android.systemui.screenrecord.ScreenMediaRecorder.prepare(ScreenMediaRecorder.java:130)
10-24 03:57:39.811 24987 24987 W System.err: at com.android.systemui.screenrecord.ScreenMediaRecorder.start(ScreenMediaRecorder.java:270)
10-24 03:57:39.811 24987 24987 W System.err: at com.android.systemui.screenrecord.RecordingService.startRecording(RecordingService.java:235)
10-24 03:57:39.811 24987 24987 W System.err: at com.android.systemui.screenrecord.RecordingService.onStartCommand(RecordingService.java:146)
10-24 03:57:39.812 24987 24987 W System.err: at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:4643)
10-24 03:57:39.812 24987 24987 W System.err: at android.app.ActivityThread.access$2000(ActivityThread.java:247)
10-24 03:57:39.812 24987 24987 W System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2095)
10-24 03:57:39.812 24987 24987 W System.err: at android.os.Handler.dispatchMessage(Handler.java:106)
10-24 03:57:39.812 24987 24987 W System.err: at android.os.Looper.loopOnce(Looper.java:201)
10-24 03:57:39.812 24987 24987 W System.err: at android.os.Looper.loop(Looper.java:288)
10-24 03:57:39.812 24987 24987 W System.err: at android.app.ActivityThread.main(ActivityThread.java:7842)
10-24 03:57:39.812 24987 24987 W System.err: at java.lang.reflect.Method.invoke(Native Method)
10-24 03:57:39.812 24987 24987 W System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
Совершенно не связано, но я изучаю ту же проблему с scrcpy, инструментом зеркалирования экрана на мультиплатформенной платформе для ПК. Возникла та же проблема с записью, пока я не изменил вручную кодировщик, установив по умолчанию использование «c2.android.avc.encoder».
У меня есть только журнал отладки, но у меня нет способ отслеживания указанного «неподдерживаемого размера». Я зашел в исходный код Google и посмотрел именно здесь:

Код: Выделить всё

android.media.MediaCodecInfo$VideoCapabilities.getSupportedFrameRatesFor(MediaCodecInfo.java:1676)
и нашел эту функцию:

Код: Выделить всё

private int[] getSupportedSize(final int screenWidth, final int screenHeight, int refreshRate) {
double maxScale = 0;
MediaCodecList codecList = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
MediaCodecInfo.VideoCapabilities maxInfo = null;
for (MediaCodecInfo codec : codecList.getCodecInfos()) {
String videoType = MediaFormat.MIMETYPE_VIDEO_AVC;
String[] types = codec.getSupportedTypes();
for (String t : types) {
if (!t.equalsIgnoreCase(videoType)) {
continue;
}
MediaCodecInfo.CodecCapabilities capabilities =
codec.getCapabilitiesForType(videoType);
if (capabilities != null && capabilities.getVideoCapabilities() != null) {
MediaCodecInfo.VideoCapabilities vc = capabilities.getVideoCapabilities();
int width = vc.getSupportedWidths().getUpper();
int height = vc.getSupportedHeights().getUpper();
int screenWidthAligned = screenWidth;
if (screenWidthAligned % vc.getWidthAlignment() != 0) {
screenWidthAligned -= (screenWidthAligned % vc.getWidthAlignment());
}
int screenHeightAligned = screenHeight;
if (screenHeightAligned % vc.getHeightAlignment() != 0) {
screenHeightAligned -= (screenHeightAligned % vc.getHeightAlignment());
}
if (width >= screenWidthAligned && height >= screenHeightAligned
&& vc.isSizeSupported(screenWidthAligned, screenHeightAligned)) {
// Desired size is supported, now get the rate
int maxRate = vc.getSupportedFrameRatesFor(screenWidthAligned,
screenHeightAligned).getUpper().intValue();
if (maxRate < refreshRate) {
refreshRate = maxRate;
}
Log.d(TAG, "Screen size supported at rate " + refreshRate);
return new int[]{screenWidthAligned, screenHeightAligned, refreshRate};
}
// Otherwise, continue searching
double scale = Math.min(((double) width / screenWidth),
((double) height / screenHeight));
if (scale > maxScale) {
maxScale = Math.min(1, scale);
maxInfo = vc;
}
}
}
}
// Resize for max supported size
int scaledWidth = (int) (screenWidth * maxScale);
int scaledHeight = (int) (screenHeight * maxScale);
if (scaledWidth % maxInfo.getWidthAlignment() != 0) {
scaledWidth -= (scaledWidth % maxInfo.getWidthAlignment());
}
if (scaledHeight % maxInfo.getHeightAlignment() != 0) {
scaledHeight -= (scaledHeight % maxInfo.getHeightAlignment());
}
// Find max supported rate for size
int maxRate = maxInfo.getSupportedFrameRatesFor(scaledWidth, scaledHeight)
.getUpper().intValue();
if (maxRate < refreshRate) {
refreshRate = maxRate;
}
Log.d(TAG, "Resized by " + maxScale + ": " + scaledWidth + ", " + scaledHeight
+ ", " + refreshRate);
return new int[]{scaledWidth, scaledHeight, refreshRate};
}
Итак, с чего мне начать исследовать ошибку, вызывающую ошибку неподдерживаемого размера?

Подробнее здесь: https://stackoverflow.com/questions/698 ... custom-rom
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Приложение для записи экрана выдает ошибку на Custom Rom
    Anonymous » » в форуме JAVA
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Проблемы с компиляцией Android Oreo ROM. «C_INCLUDES должен находиться в источнике...»
    Anonymous » » в форуме Android
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Недостаточно места при сборке Android Rom
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Можно ли обойти блокировку frp установкой другого ROM
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как подписать файл android rom.zip?
    Anonymous » » в форуме Android
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»