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

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
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 » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение 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

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