My Octopress Blog

Rise of the Apes.

Camera插值

Camera插值在底层已经做好,我们只需要在中间层和app层添加一个对应的picture size即可。但是有一些限制条件需要注意:

1.插值的倍数只能小于等于16倍,也就是说假如是1M的sensor,那最多只能插值到16M;
2.插值后的width和height都不能超过8192,也就是picture size设置的width和height的大小都不能超过8192;
3.若插值的大小超过12M:则需要打补丁
4.由于hardware jpeg encoder的限制,插值时设置的width和height请您分别都设为16的整数倍,若设置非16整数倍的width或height,则可能导致拍出来的图片会有异常(如图片扭曲、花屏、连拍的图片绿屏)。

下面是关于插值的方法:

(一)中间层修改

1.mediatek/custom/common/hal/imgsensor/\/config.ftbl.\.h

(若没有该文件,则修改mediatek/custom/common/hal/imgsensor/src/config.ftbl.common_raw.h或者config.ftbl.common_yuv.h)
在如下定义picture size的地方增加您想要的size (宽和高必须是16的整数倍),如果已经包含您要加的size,就不需要再增加。

1
2
3
4
5
6
7
8
9
10
11
12
#if 1
    //  Picture Size
    FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
        KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE),
        SCENE_AS_DEFAULT_SCENE(
            ITEM_AS_DEFAULT_("2560x1920"),
            ITEM_AS_VALUES_(
                "320x240",  "640x480",  "1024x768",  "1280x720",  "1280x768",  "1280x960"
            )
        ),
    )
#endif

例如:

1
2
3
4
5
6
7
8
9
10
//  Picture Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
    KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE),
    SCENE_AS_DEFAULT_SCENE(
        ITEM_AS_DEFAULT_("2560x1920"),
        ITEM_AS_VALUES_(
            "320x240",  "640x480",  "1024x768",  "1280x720",  "1280x768",  "1280x960",  "1920x1088",  "1920x1152",
        )
    ),
)

1920:1088 ≈ 16:9
1920:1152 ≈ 5:3

如果是16:9的屏幕,则得确保2个分辨率都添加
width:height ≈ 16:9
width:height ≈ 5:3

(二)app层的修改可以按照如下来修改:

1.packages/apps/Camera/res/values/strings.xml

增加您想要的size,如果已经包含您要加的size,就不需要再增加

1
2
3
4
5
6
7
8
<string name="pref_camera_picturesize_entry_3264x2448">8M pixels</string>
<string name="pref_camera_picturesize_entry_2592x1936">5M pixels</string>
<string name="pref_camera_picturesize_entry_2048x1536">3M pixels</string>
<string name="pref_camera_picturesize_entry_1600x1200">2M pixels</string>
<string name="pref_camera_picturesize_entry_1280x960">1.3M pixels</string>
<string name="pref_camera_picturesize_entry_1024x768">1M pixels</string>
<string name="pref_camera_picturesize_entry_640x480">VGA</string>
<string name="pref_camera_picturesize_entry_320x240">QVGA</string>

例如:

1
2
3
4
5
6
7
8
9
10
<string name="pref_camera_picturesize_entry_3264x2448">8M pixels</string>
<string name="pref_camera_picturesize_entry_2592x1936">5M pixels</string>
<string name="pref_camera_picturesize_entry_2048x1536">3M pixels</string>
<string name="pref_camera_picturesize_entry_1920x1088">2M pixels</string>
<string name="pref_camera_picturesize_entry_1920x1152">2M pixels</string>
<string name="pref_camera_picturesize_entry_1600x1200">2M pixels</string>
<string name="pref_camera_picturesize_entry_1280x960">1.3M pixels</string>
<string name="pref_camera_picturesize_entry_1024x768">1M pixels</string>
<string name="pref_camera_picturesize_entry_640x480">VGA</string>
<string name="pref_camera_picturesize_entry_320x240">QVGA</string>

2.packages/apps/Camera/res/values/arrays.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<string-array name="pref_camera_picturesize_entries" translatable="false">
    <!-- TODO: Change to a better name of the preference.
            The first element of the array should be
            "pref_camera_picturesize_entry_2592x1944". However, we are too
            late for the translation. Since we show the same label as the
            second item, we just use the second one instead.
    -->
    <!-- 4:3 -->
    <item>@string/pref_camera_picturesize_entry_320x240</item>
    <item>@string/pref_camera_picturesize_entry_640x480</item>
    <item>@string/pref_camera_picturesize_entry_1024x768</item>
    <item>@string/pref_camera_picturesize_entry_1280x960</item>
    <item>@string/pref_camera_picturesize_entry_1600x1200</item>
    <item>@string/pref_camera_picturesize_entry_2048x1536</item>
    <item>@string/pref_camera_picturesize_entry_2592x1936</item>
    <item>@string/pref_camera_picturesize_entry_3264x2448</item>
    <item>@string/pref_camera_picturesize_entry_4096x3072</item>
    <!-- 16:9 -->
    <item>@string/pref_camera_picturesize_entry_640x480</item>
    <item>@string/pref_camera_picturesize_entry_1280x720</item>
    <item>@string/pref_camera_picturesize_entry_2048x1152</item>
    <item>@string/pref_camera_picturesize_entry_2560x1440</item>
    <item>@string/pref_camera_picturesize_entry_2992x1680</item>
    <item>@string/pref_camera_picturesize_entry_3328x1872</item>
    <!-- 5:3 -->
    <item>@string/pref_camera_picturesize_entry_1280x768</item>
    <item>@string/pref_camera_picturesize_entry_1600x1200</item>
    <item>@string/pref_camera_picturesize_entry_2592x1936</item>
    <item>@string/pref_camera_picturesize_entry_3264x2448</item>
    <!-- 3:2 -->
    <item>@string/pref_camera_picturesize_entry_1280x960</item>
    <item>@string/pref_camera_picturesize_entry_2048x1536</item>
    <item>@string/pref_camera_picturesize_entry_2592x1936</item>
</string-array>

增加您想要的size,如果已经包含您要加的size,就不需要再增加 例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<string-array name="pref_camera_picturesize_entries" translatable="false">
    <!-- TODO: Change to a better name of the preference.
            The first element of the array should be
            "pref_camera_picturesize_entry_2592x1944". However, we are too
            late for the translation. Since we show the same label as the
            second item, we just use the second one instead.
    -->
    <!-- 4:3 -->
    <item>@string/pref_camera_picturesize_entry_320x240</item>
    <item>@string/pref_camera_picturesize_entry_640x480</item>
    <item>@string/pref_camera_picturesize_entry_1024x768</item>
    <item>@string/pref_camera_picturesize_entry_1280x960</item>
    <item>@string/pref_camera_picturesize_entry_1600x1200</item>
    <item>@string/pref_camera_picturesize_entry_2048x1536</item>
    <item>@string/pref_camera_picturesize_entry_2592x1936</item>
    <item>@string/pref_camera_picturesize_entry_3264x2448</item>
    <item>@string/pref_camera_picturesize_entry_4096x3072</item>
    <!-- 16:9 -->
    <item>@string/pref_camera_picturesize_entry_640x480</item>
    <item>@string/pref_camera_picturesize_entry_1280x720</item>
    <item>@string/pref_camera_picturesize_entry_1920x1088</item>
    <item>@string/pref_camera_picturesize_entry_2048x1152</item>
    <item>@string/pref_camera_picturesize_entry_2560x1440</item>
    <item>@string/pref_camera_picturesize_entry_2992x1680</item>
    <item>@string/pref_camera_picturesize_entry_3328x1872</item>
    <!-- 5:3 -->
    <item>@string/pref_camera_picturesize_entry_1280x768</item>
    <item>@string/pref_camera_picturesize_entry_1600x1200</item>
    <item>@string/pref_camera_picturesize_entry_1920x1152</item>
    <item>@string/pref_camera_picturesize_entry_2592x1936</item>
    <item>@string/pref_camera_picturesize_entry_3264x2448</item>
    <!-- 3:2 -->
    <item>@string/pref_camera_picturesize_entry_1280x960</item>
    <item>@string/pref_camera_picturesize_entry_2048x1536</item>
    <item>@string/pref_camera_picturesize_entry_2592x1936</item>
</string-array>

3.packages/apps/Camera/res/values/arrays.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<string-array name="pref_camera_picturesize_entryvalues" translatable="false">
    <!-- 4:3 -->
    <item>320x240</item>
    <item>640x480</item>
    <item>1024x768</item>
    <item>1280x960</item>
    <item>1600x1200</item>
    <item>2048x1536</item>
    <item>2560x1920</item>
    <item>3264x2448</item>
    <item>4096x3072</item>
    <!-- 16:9 -->
    <item>640x352</item>
    <item>1280x720</item>
    <item>2048x1152</item>
    <item>2560x1440</item>
    <item>2992x1680</item>
    <item>3328x1872</item>
    <!-- 5:3 -->
    <item>1280x768</item>
    <item>1600x960</item>
    <item>2880x1728</item>
    <item>3600x2160</item>
    <!-- 3:2 -->
    <item>1440x960</item>
    <item>2048x1360</item>
    <item>2560x1712</item>
</string-array>

增加您想要的size,如果已经包含你要加的size,就不需要再增加
例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<string-array name="pref_camera_picturesize_entryvalues" translatable="false">
    <!-- 4:3 -->
    <item>320x240</item>
    <item>640x480</item>
    <item>1024x768</item>
    <item>1280x960</item>
    <item>1600x1200</item>
    <item>2048x1536</item>
    <item>2560x1920</item>
    <item>3264x2448</item>
    <item>4096x3072</item>
    <!-- 16:9 -->
    <item>640x352</item>
    <item>1280x720</item>
    <item>1920x1088</item>
    <item>2048x1152</item>
    <item>2560x1440</item>
    <item>2992x1680</item>
    <item>3328x1872</item>
    <!-- 5:3 -->
    <item>1280x768</item>
    <item>1600x960</item>
    <item>1920x1152</item>
    <item>2880x1728</item>
    <item>3600x2160</item>
    <!-- 3:2 -->
    <item>1440x960</item>
    <item>2048x1360</item>
    <item>2560x1712</item>
</string-array>

4.packages/apps/Camera/src/com/Android/Camera/CameraSettings.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static final String[] PICTURE_SIZE_16_9 = new String[] {
    "640x352",
    "1280x720",
    "2048x1152",
    "2560x1440",
    "2992x1680",
    "3328x1872",
};

public static final String[] PICTURE_SIZE_5_3 = new String[] {
    "1280x768",
    "1600x960",
    "2880x1728",
    "3600x2160",
};

增加您想要的size,如果已经包含你要加的size,就不需要再增加
例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static final String[] PICTURE_SIZE_16_9 = new String[] {
    "640x352",
    "1280x720",
    "1920x1088",
    "2048x1152",
    "2560x1440",
    "2992x1680",
    "3328x1872",
};

public static final String[] PICTURE_SIZE_5_3 = new String[] {
    "1280x768",
    "1600x960",
    "1920x1152",
    "2880x1728",
    "3600x2160",
};