Skip to content

Instantly share code, notes, and snippets.

@agran
Last active October 29, 2018 15:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save agran/30e28c3012836d38556d3062e17d7a55 to your computer and use it in GitHub Desktop.
Save agran/30e28c3012836d38556d3062e17d7a55 to your computer and use it in GitHub Desktop.
Исправление оптической стабилизации в gCam для Zenfone 5
# virtual methods
.method public final a(I)Liia;
.locals 2
:try_start_0
new-instance v0, Liia;
iget-object v1, p0, Lifa;->a:Landroid/hardware/camera2/CameraDevice;
invoke-virtual {v1, p1}, Landroid/hardware/camera2/CameraDevice;->createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;
move-result-object v1
invoke-direct {v0, v1}, Liia;-><init>(Landroid/hardware/camera2/CaptureRequest$Builder;)V
:try_end_0
.catch Ljava/lang/IllegalStateException; {:try_start_0 .. :try_end_0} :catch_0
.catch Landroid/hardware/camera2/CameraAccessException; {:try_start_0 .. :try_end_0} :catch_1
.catch Ljava/lang/SecurityException; {:try_start_0 .. :try_end_0} :catch_2
return-object v0
:catch_0
move-exception v0
:goto_0
new-instance v1, Lief;
invoke-direct {v1, v0}, Lief;-><init>(Ljava/lang/Throwable;)V
throw v1
:catch_1
move-exception v0
goto :goto_0
:catch_2
move-exception v0
goto :goto_0
.end method
# virtual methods
.method public final a(I)Liia;
.locals 4
:goto_0
:try_start_0
iget-object v1, p0, Lifa;->a:Landroid/hardware/camera2/CameraDevice;
new-instance v0, Liia;
invoke-virtual {v1, p1}, Landroid/hardware/camera2/CameraDevice;->createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;
move-result-object v1
invoke-direct {v0, v1}, Liia;-><init>(Landroid/hardware/camera2/CaptureRequest$Builder;)V
sget-object v3, Landroid/hardware/camera2/CaptureRequest;->LENS_OPTICAL_STABILIZATION_MODE:Landroid/hardware/camera2/CaptureRequest$Key;
const/4 v1, 0x1
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
invoke-virtual {v0, v3, v2}, Liia;->a(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;)V
:try_end_0
.catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_0} :catch_0
.catch Ljava/lang/IllegalStateException; {:try_start_0 .. :try_end_0} :catch_0
.catch Landroid/hardware/camera2/CameraAccessException; {:try_start_0 .. :try_end_0} :catch_0
.catch Ljava/lang/SecurityException; {:try_start_0 .. :try_end_0} :catch_0
return-object v0
:catch_0
move-exception v0
if-gtz p1, :cond_0
move v0, p1
add-int/lit8 v0, v0, 0x1
move p1, v0
goto :goto_0
:cond_0
move v0, p1
add-int/lit8 v0, v0, -0x1
move p1, v0
goto :goto_0
.end method
.method public final a(I)Lkvr;
.locals 2
:try_start_0
new-instance v0, Lkvr;
iget-object v1, p0, Lkrm;->a:Landroid/hardware/camera2/CameraDevice;
invoke-virtual {v1, p1}, Landroid/hardware/camera2/CameraDevice;->createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;
move-result-object v1
invoke-direct {v0, v1}, Lkvr;-><init>(Landroid/hardware/camera2/CaptureRequest$Builder;)V
:try_end_0
.catch Ljava/lang/IllegalStateException; {:try_start_0 .. :try_end_0} :catch_0
.catch Landroid/hardware/camera2/CameraAccessException; {:try_start_0 .. :try_end_0} :catch_1
.catch Ljava/lang/SecurityException; {:try_start_0 .. :try_end_0} :catch_2
return-object v0
:catch_0
move-exception v0
:goto_0
new-instance v1, Lkkb;
invoke-direct {v1, v0}, Lkkb;-><init>(Ljava/lang/Throwable;)V
throw v1
:catch_1
move-exception v0
goto :goto_0
:catch_2
move-exception v0
goto :goto_0
.end method
.method public final a(I)Lkvr;
.locals 4
:goto_0
:try_start_0
iget-object v1, p0, Lkrm;->a:Landroid/hardware/camera2/CameraDevice;
new-instance v0, Lkvr;
invoke-virtual {v1, p1}, Landroid/hardware/camera2/CameraDevice;->createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;
move-result-object v1
invoke-direct {v0, v1}, Lkvr;-><init>(Landroid/hardware/camera2/CaptureRequest$Builder;)V
sget-object v3, Landroid/hardware/camera2/CaptureRequest;->LENS_OPTICAL_STABILIZATION_MODE:Landroid/hardware/camera2/CaptureRequest$Key;
const/4 v1, 0x1
invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;
move-result-object v2
invoke-virtual {v0, v3, v2}, Lkvr;->a(Landroid/hardware/camera2/CaptureRequest$Key;Ljava/lang/Object;)V
:try_end_0
.catch Ljava/lang/RuntimeException; {:try_start_0 .. :try_end_0} :catch_0
.catch Ljava/lang/IllegalStateException; {:try_start_0 .. :try_end_0} :catch_0
.catch Landroid/hardware/camera2/CameraAccessException; {:try_start_0 .. :try_end_0} :catch_0
.catch Ljava/lang/SecurityException; {:try_start_0 .. :try_end_0} :catch_0
return-object v0
:catch_0
move-exception v0
if-gtz p1, :cond_0
move v0, p1
add-int/lit8 v0, v0, 0x1
move p1, v0
goto :goto_0
:cond_0
move v0, p1
add-int/lit8 v0, v0, -0x1
move p1, v0
goto :goto_0
.end method
@agran
Copy link
Author

agran commented Oct 29, 2018

1 - Функция без стабилизации.
2 - Она же с исправленной стабилизацией.
3 - Функция без стабилизации.
4 - Она же с исправленной стабилизацией.
Функцию можно найти с помощью поиска по файлам в программе Notepad++ по запросу "Landroid/hardware/camera2/CameraDevice;->createCaptureRequest(I)Landroid/hardware/camera2/CaptureRequest$Builder;"
Будет всего несколько результатов.

Нужно следить за именами. Просто так скопировать функцию со стабом - мало, нужно заменить в ней имена на те которые были изначально.

Для декомпиляции apk файла я использовал APK Easy Tool portable.

@agran
Copy link
Author

agran commented Oct 29, 2018

Функция которую нужно править только одна, я привёл функцию два раза для лучшего понимания.

@agran
Copy link
Author

agran commented Oct 29, 2018

Сравнить две версии на отличия можно с помощью программы WinMerge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment