Skip to content

Commit 57b182c

Browse files
committed
Added specific noise model, changed version
1 parent 053885c commit 57b182c

File tree

10 files changed

+126
-35
lines changed

10 files changed

+126
-35
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ android {
4242
ndk {
4343
abiFilters "arm64-v8a"
4444
}
45-
versionName '0.747'
45+
versionName '0.8'
4646
}
4747

4848
gradle.taskGraph.whenReady { taskGraph ->

app/src/main/java/com/particlesdevs/photoncamera/app/PhotonCamera.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import com.particlesdevs.photoncamera.control.Gravity;
2525
import com.particlesdevs.photoncamera.control.Gyro;
2626
import com.particlesdevs.photoncamera.control.Vibration;
27+
import com.particlesdevs.photoncamera.pro.SensorSpecifics;
2728
import com.particlesdevs.photoncamera.pro.Specific;
29+
import com.particlesdevs.photoncamera.pro.SpecificSetting;
2830
import com.particlesdevs.photoncamera.pro.SupportedDevice;
2931
import com.particlesdevs.photoncamera.processing.render.Parameters;
3032
import com.particlesdevs.photoncamera.processing.render.PreviewParameters;
@@ -103,6 +105,10 @@ public static PreviewParameters getPreviewParameters() {
103105
public static Specific getSpecific(){
104106
return sPhotonCamera.mSupportedDevice.specific;
105107
}
108+
public static SensorSpecifics getSpecificSensor(){
109+
return sPhotonCamera.mSupportedDevice.sensorSpecifics;
110+
}
111+
106112

107113
public static RenderScript getRenderScript() {
108114
return sPhotonCamera.mRS;

app/src/main/java/com/particlesdevs/photoncamera/capture/CaptureController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1013,6 +1013,7 @@ public void openCamera(int width, int height) {
10131013
}
10141014

10151015
public void UpdateCameraCharacteristics(String cameraId) {
1016+
PhotonCamera.getSpecificSensor().selectSpecifics(Integer.parseInt(cameraId));
10161017
CameraCharacteristics characteristics = this.mCameraCharacteristicsMap.get(cameraId);
10171018
mCameraCharacteristics = characteristics;
10181019
//Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);

app/src/main/java/com/particlesdevs/photoncamera/pro/SensorSpecifics.java

Lines changed: 71 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,40 +2,89 @@
22

33
import android.os.Build;
44

5+
import com.particlesdevs.photoncamera.settings.PreferenceKeys;
56
import com.particlesdevs.photoncamera.settings.SettingsManager;
67
import com.particlesdevs.photoncamera.util.HttpLoader;
78

89
import java.io.BufferedReader;
9-
import java.io.IOException;
1010
import java.util.ArrayList;
1111

1212
public class SensorSpecifics {
1313
public SpecificSettingSensor[] specificSettingSensor;
14+
public SpecificSettingSensor selectedSensorSpecifics = null;
1415
public SensorSpecifics(SettingsManager mSettingsManager){
15-
int count = 1;
16-
String device = Build.BRAND.toLowerCase() + "/" + Build.DEVICE.toLowerCase();
17-
String fullSpec = "";
18-
ArrayList<String> inputStr = new ArrayList<String>();
19-
try {
20-
BufferedReader indevice = HttpLoader.readURL("https://raw.githubusercontent.com/eszdman/PhotonCamera/dev/app/specific/sensors/" + device + ".txt");
21-
String str;
22-
count = 0;
23-
while ((str = indevice.readLine()) != null) {
24-
if(str.contains("sensor")) count++;
25-
inputStr.add(str+"\n");
26-
}
27-
specificSettingSensor = new SpecificSettingSensor[count];
28-
for (String str2 : inputStr) {
29-
if(str2.contains("sensor")) count++;
30-
inputStr.add(str2+"\n");
31-
}
16+
boolean loaded = mSettingsManager.getBoolean(PreferenceKeys.Key.DEVICES_PREFERENCE_FILE_NAME.mValue, "sensor_specific_loaded",false);
17+
boolean exists = mSettingsManager.getBoolean(PreferenceKeys.Key.DEVICES_PREFERENCE_FILE_NAME.mValue, "sensor_specific_exists",true);
3218

33-
} catch (Exception ignored) {}
34-
try {
35-
36-
}catch (Exception e){
19+
if(exists) {
20+
int count;
21+
String device = Build.BRAND.toLowerCase() + "/" + Build.DEVICE.toLowerCase();
22+
String fullSpec = "";
23+
ArrayList<String> inputStr = new ArrayList<String>();
24+
try {
25+
exists = false;
26+
BufferedReader indevice = HttpLoader.readURL("https://raw.githubusercontent.com/eszdman/PhotonCamera/dev/app/specific/sensors/" + device + ".txt");
27+
String str;
28+
count = 0;
29+
while ((str = indevice.readLine()) != null) {
30+
if (str.contains("sensor")) count++;
31+
inputStr.add(str + "\n");
32+
}
33+
exists = true;
34+
specificSettingSensor = new SpecificSettingSensor[count];
35+
count = 1;
36+
for (String str2 : inputStr) {
37+
if (str2.contains("sensor")) {
38+
String[] vals = str2.split("_");
39+
specificSettingSensor[count].id = Integer.parseInt(vals[1]);
40+
count++;
41+
} else {
42+
String[] valsIn = str2.split("=");
43+
String[] istr = valsIn[1].replace("{", "").replace("}", "").split(",");
44+
switch (valsIn[0]) {
45+
case "NoiseModelA": {
46+
for (int i = 0; i < 4; i++) {
47+
specificSettingSensor[count - 1].NoiseModelerArr[0][i] = Double.parseDouble(istr[i]);
48+
}
49+
break;
50+
}
51+
case "NoiseModelB": {
52+
for (int i = 0; i < 4; i++) {
53+
specificSettingSensor[count - 1].NoiseModelerArr[1][i] = Double.parseDouble(istr[i]);
54+
}
55+
break;
56+
}
57+
case "NoiseModelC": {
58+
for (int i = 0; i < 4; i++) {
59+
specificSettingSensor[count - 1].NoiseModelerArr[2][i] = Double.parseDouble(istr[i]);
60+
}
61+
break;
62+
}
63+
case "NoiseModelD": {
64+
for (int i = 0; i < 4; i++) {
65+
specificSettingSensor[count - 1].NoiseModelerArr[3][i] = Double.parseDouble(istr[i]);
66+
}
67+
specificSettingSensor[count - 1].ModelerExists = true;
68+
break;
69+
}
70+
}
71+
loaded = true;
72+
}
73+
}
3774

75+
} catch (Exception ignored) {
76+
}
77+
mSettingsManager.set(PreferenceKeys.Key.DEVICES_PREFERENCE_FILE_NAME.mValue, "sensor_specific_loaded", loaded);
78+
mSettingsManager.set(PreferenceKeys.Key.DEVICES_PREFERENCE_FILE_NAME.mValue, "sensor_specific_exists", exists);
79+
}
80+
}
81+
public SpecificSettingSensor selectSpecifics(int id){
82+
if(specificSettingSensor != null) {
83+
for (SpecificSettingSensor specifics : specificSettingSensor) {
84+
if (specifics.id == id) return specifics;
85+
}
3886
}
87+
return null;
3988
}
4089

4190
}
Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
package com.particlesdevs.photoncamera.pro;
22

3+
import com.particlesdevs.photoncamera.processing.render.NoiseModeler;
4+
35
//Device current sensor specific
46
public class SpecificSettingSensor {
57
public int id = 0;
68
public boolean isRawColorCorrection = false;
79
public float[] blackLevel;
810
public float[][] CCT;
9-
public float[][] NoiseModeler;
11+
public double[][] NoiseModelerArr;
12+
public boolean ModelerExists = false;
13+
public boolean CCTExists = false;
14+
public SpecificSettingSensor(){
15+
NoiseModelerArr = new double[4][4];
16+
CCT = new float[3][3];
17+
}
1018
}

app/src/main/java/com/particlesdevs/photoncamera/processing/render/NoiseModeler.java

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.util.Log;
44
import android.util.Pair;
55

6+
import com.particlesdevs.photoncamera.pro.SpecificSettingSensor;
67
import com.particlesdevs.photoncamera.processing.parameters.FrameNumberSelector;
78

89
public class NoiseModeler {
@@ -11,16 +12,34 @@ public class NoiseModeler {
1112
public Pair<Double,Double>[] computeModel;
1213
public int AnalogueISO;
1314
public int SensivityISO;
14-
public NoiseModeler(Pair<Double,Double>[] inModel,Integer analogISO,Integer ISO, int bayer) {
15+
public NoiseModeler(Pair<Double,Double>[] inModel, Integer analogISO, Integer ISO, int bayer, SpecificSettingSensor specificSettingSensor) {
1516
AnalogueISO = analogISO;
1617
SensivityISO = ISO;
1718
baseModel = new Pair[3];
1819
computeModel = new Pair[3];
1920
//inModel = null;
20-
if (inModel == null || inModel.length == 0) {
21-
Pair<Double, Double> Imx363sGenerator = new Pair<>(0.0000025720647, 0.000028855721);
22-
Pair<Double, Double> Imx363oGenerator = new Pair<>(0.000000000039798506, 0.000000046578279);
23-
Pair<Double,Double> computedModel = new Pair<>(computeNoiseModelS(ISO,Imx363sGenerator),computeNoiseModelO(ISO,Imx363oGenerator));
21+
if (inModel == null || inModel.length == 0 || specificSettingSensor != null) {
22+
Pair<Double, Double> CustomGeneratorS;
23+
Pair<Double, Double> CustomGeneratorO;
24+
if(specificSettingSensor != null) {
25+
double[] avrdouble = new double[4];
26+
for (double[] ind : specificSettingSensor.NoiseModelerArr) {
27+
avrdouble[0] += ind[0];
28+
avrdouble[1] += ind[1];
29+
avrdouble[2] += ind[2];
30+
avrdouble[3] += ind[3];
31+
}
32+
avrdouble[0] /= 4.0;
33+
avrdouble[1] /= 4.0;
34+
avrdouble[2] /= 4.0;
35+
avrdouble[3] /= 4.0;
36+
CustomGeneratorS = new Pair<>(avrdouble[0], avrdouble[1]);
37+
CustomGeneratorO = new Pair<>(avrdouble[2], avrdouble[3]);
38+
} else {
39+
CustomGeneratorS = new Pair<>(0.0000025720647, 0.000028855721);
40+
CustomGeneratorO = new Pair<>(0.000000000039798506, 0.000000046578279);
41+
}
42+
Pair<Double,Double> computedModel = new Pair<>(computeNoiseModelS(ISO,CustomGeneratorS),computeNoiseModelO(ISO,CustomGeneratorO));
2443
//Test
2544
/*
2645
Pair<Double, Double> TestsGenerator = new Pair<>(1.0798706869238175e-06, -8.618818353621416e-06);

app/src/main/java/com/particlesdevs/photoncamera/processing/render/Parameters.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
import com.particlesdevs.photoncamera.app.PhotonCamera;
2222
import com.particlesdevs.photoncamera.control.GyroBurst;
23+
import com.particlesdevs.photoncamera.pro.SensorSpecifics;
24+
import com.particlesdevs.photoncamera.pro.SpecificSettingSensor;
2325
import com.particlesdevs.photoncamera.processing.parameters.FrameNumberSelector;
2426
import com.particlesdevs.photoncamera.settings.PreferenceKeys;
2527
import com.particlesdevs.photoncamera.capture.CaptureController;
@@ -61,6 +63,7 @@ public class Parameters {
6163
public double YPerMm;
6264
public double[] cameraIntrinsic = new double[9];
6365
public double[] cameraIntrinsicRev = new double[9];
66+
public SpecificSettingSensor sensorSpecifics;
6467

6568

6669

@@ -123,7 +126,8 @@ public void FillConstParameters(CameraCharacteristics characteristics, Point siz
123126
}
124127

125128
public void FillDynamicParameters(CaptureResult result) {
126-
noiseModeler = new NoiseModeler( result.get(CaptureResult.SENSOR_NOISE_PROFILE),analogIso,result.get(CaptureResult.SENSOR_SENSITIVITY),cfaPattern);
129+
sensorSpecifics = PhotonCamera.getSpecificSensor().selectedSensorSpecifics;
130+
noiseModeler = new NoiseModeler( result.get(CaptureResult.SENSOR_NOISE_PROFILE),analogIso,result.get(CaptureResult.SENSOR_SENSITIVITY),cfaPattern,sensorSpecifics);
127131
int[] blarr = new int[4];
128132
BlackLevelPattern level = CaptureController.mCameraCharacteristics.get(CameraCharacteristics.SENSOR_BLACK_LEVEL_PATTERN);
129133
if (result != null) {

app/src/main/java/com/particlesdevs/photoncamera/processing/render/PreviewParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void FillParameters(CaptureResult result, CameraCharacteristics character
2323
}
2424
}
2525
public void FillDynamicParameters(CaptureResult result) {
26-
noiseModeler = new NoiseModeler( result.get(CaptureResult.SENSOR_NOISE_PROFILE),analogIso,result.get(CaptureResult.SENSOR_SENSITIVITY),cfaPattern);
26+
noiseModeler = new NoiseModeler( result.get(CaptureResult.SENSOR_NOISE_PROFILE),analogIso,result.get(CaptureResult.SENSOR_SENSITIVITY),cfaPattern,null);
2727

2828
}
2929
}

app/src/main/java/com/particlesdevs/photoncamera/ui/camera/CameraFragment.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,8 @@ public void onClick(View view) {
10391039
case R.id.flip_camera_button:
10401040
view.animate().rotationBy(180).setDuration(450).start();
10411041
textureView.animate().rotationBy(360).setDuration(450).start();
1042-
PreferenceKeys.setCameraID(cycler(PreferenceKeys.getCameraID()));
1042+
//PreferenceKeys.setCameraID(cycler(PreferenceKeys.getCameraID()));
1043+
setID(cycler(PreferenceKeys.getCameraID()));
10431044
this.restartCamera();
10441045
break;
10451046
case R.id.grid_toggle_button:
@@ -1087,11 +1088,14 @@ private void resetTimer() {
10871088
@Override
10881089
public void onAuxButtonClicked(String id) {
10891090
Log.d(TAG, "onAuxButtonClicked() called with: id = [" + id + "]");
1090-
PreferenceKeys.setCameraID(String.valueOf(id));
1091+
setID(id);
10911092
this.restartCamera();
10921093

10931094
}
10941095

1096+
private void setID(String input){
1097+
PreferenceKeys.setCameraID(String.valueOf(input));
1098+
}
10951099
@Override
10961100
public void onCameraModeChanged(CameraMode cameraMode) {
10971101
PreferenceKeys.setCameraModeOrdinal(cameraMode.ordinal());

app/version.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
#Mon Sep 13 02:00:31 MSK 2021
2-
VERSION_BUILD=12378
1+
#Mon Sep 13 04:16:14 MSK 2021
2+
VERSION_BUILD=12382

0 commit comments

Comments
 (0)