Skip to content

Commit 0ad43f2

Browse files
committed
rework video resolution (initial)
1 parent 0b3a291 commit 0ad43f2

File tree

2 files changed

+31
-16
lines changed

2 files changed

+31
-16
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/core/devkit/Unobfuscator.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,21 @@ public synchronized static HashMap<String, Field> loadMediaQualityVideoFields(Cl
498498
return result;
499499
}
500500

501+
public synchronized static HashMap<String, Field> loadMediaQualityOriginalVideoFields(ClassLoader classLoader) throws Exception {
502+
var method = loadMediaQualityVideoMethod2(classLoader);
503+
var methodString = method.getParameterTypes()[0].getDeclaredMethod("toString");
504+
var methodData = dexkit.getMethodData(methodString);
505+
var usingFields = Objects.requireNonNull(methodData).getUsingFields();
506+
var usingStrings = Objects.requireNonNull(methodData).getUsingStrings();
507+
var result = new HashMap<String, Field>();
508+
for (int i = 0; i < usingStrings.size(); i++) {
509+
if (i == usingFields.size()) break;
510+
var field = usingFields.get(i).getField().getFieldInstance(classLoader);
511+
result.put(usingStrings.get(i), field);
512+
}
513+
return result;
514+
}
515+
501516
public synchronized static Class loadMediaQualityVideoLimitClass(ClassLoader classLoader) throws Exception {
502517
return UnobfuscatorCache.getInstance().getClass(classLoader, () -> {
503518
var clazz = findFirstClassUsingStrings(classLoader, StringMatchType.Contains, "videoLimitMb=");
@@ -867,8 +882,8 @@ public synchronized static Method loadSendPresenceMethod(ClassLoader loader) thr
867882
var methodData = dexkit.getMethodData(method);
868883
var groupJidClass = XposedHelpers.findClass("com.whatsapp.jid.GroupJid", loader);
869884
var classCheckMethod = dexkit.findMethod(FindMethod.create()
870-
.searchInClass(Collections.singletonList(methodData.getDeclaredClass()))
871-
.matcher(MethodMatcher.create().returnType(groupJidClass)))
885+
.searchInClass(Collections.singletonList(methodData.getDeclaredClass()))
886+
.matcher(MethodMatcher.create().returnType(groupJidClass)))
872887
.singleOrNull();
873888
if (classCheckMethod == null) {
874889
var newMethod = methodData.getCallers().singleOrNull(method1 -> method1.getParamCount() == 4);

app/src/main/java/com/wmods/wppenhacer/xposed/features/media/MediaQuality.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,31 +82,31 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
8282
var videoMethod = Unobfuscator.loadMediaQualityVideoMethod2(classLoader);
8383
logDebug(Unobfuscator.getMethodDescriptor(videoMethod));
8484

85-
var fields = Unobfuscator.loadMediaQualityVideoFields(classLoader);
85+
// var mediaFields = Unobfuscator.loadMediaQualityOriginalVideoFields(classLoader);
86+
var mediaTranscodeParams = Unobfuscator.loadMediaQualityVideoFields(classLoader);
8687

8788
XposedBridge.hookMethod(videoMethod, new XC_MethodHook() {
89+
8890
@Override
8991
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
9092
if ((int) param.args[1] == 3) {
9193
var resizeVideo = param.getResult();
92-
// if (prefs.getBoolean("video_real_resolution", false)) {
93-
//
94-
// var sourceWidthField = fields.get("sourceWidth");
95-
// var sourceHeightField = fields.get("sourceHeight");
94+
// var width = mediaFields.get("widthPx").getInt(param.args[0]);
95+
// var height = mediaFields.get("heightPx").getInt(param.args[0]);
9696
//
97-
// var sourceWidth = sourceWidthField.getInt(resizeVideo);
98-
// var sourceHeight = sourceHeightField.getInt(resizeVideo);
97+
// var targetWidthField = mediaTranscodeParams.get("targetWidth");
98+
// var targetHeightField = mediaTranscodeParams.get("targetHeight");
99+
// var targetWidth = targetWidthField.getInt(resizeVideo);
100+
// var targetHeight = targetHeightField.getInt(resizeVideo);
99101
//
100-
// var targetWidthField = fields.get("targetWidth");
101-
// var targetHeightField = fields.get("targetHeight");
102+
// var inverted = targetWidth > targetHeight != width > height;
102103
//
103-
// targetHeightField.setInt(resizeVideo, sourceHeight);
104-
// targetWidthField.setInt(resizeVideo, sourceWidth);
105-
// }
104+
// targetHeightField.setInt(resizeVideo, inverted ? width : height);
105+
// targetWidthField.setInt(resizeVideo, inverted ? height : width);
106+
106107
if (prefs.getBoolean("video_maxfps", false)) {
107-
var frameRateField = fields.get("frameRate");
108+
var frameRateField = mediaTranscodeParams.get("frameRate");
108109
frameRateField.setInt(resizeVideo, 60);
109-
// XposedHelpers.setIntField(resizeVideo, "A01", 60);
110110
}
111111
}
112112
}

0 commit comments

Comments
 (0)