Skip to content

camera object fb size calculating wrongly with greyscale and uxga #734

Open
@yildirimdogru

Description

@yildirimdogru

Checklist

  • Checked the issue tracker for similar issues to ensure this is not a duplicate
  • Read the documentation to confirm the issue is not addressed there and your configuration is set correctly
  • Tested with the latest version to ensure the issue hasn't been fixed

How often does this bug occurs?

always

Expected behavior

cam_hal.c , cam_config, line 377

if(cam_obj->jpeg_mode){
#ifdef CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_AUTO
cam_obj->recv_size = cam_obj->width * cam_obj->height / 5;
#else
cam_obj->recv_size = CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE;
#endif
cam_obj->fb_size = cam_obj->recv_size;
} else {
//I expected if it is greyscale, you may handle here and do : cam_obj->fb_size = cam_obj->width * cam_obj->height
cam_obj->recv_size = cam_obj->width * cam_obj->height * cam_obj->in_bytes_per_pixel;
cam_obj->fb_size = cam_obj->width * cam_obj->height * cam_obj->fb_bytes_per_pixel;
}

Actual behavior (suspected bug)

cam_hal.c , cam_config, line 377

if(cam_obj->jpeg_mode){
#ifdef CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE_AUTO
cam_obj->recv_size = cam_obj->width * cam_obj->height / 5;
#else
cam_obj->recv_size = CONFIG_CAMERA_JPEG_MODE_FRAME_SIZE;
#endif
cam_obj->fb_size = cam_obj->recv_size;
} else {
//I expected if it is greyscale, you may handle here and do : cam_obj->fb_size = cam_obj->width * cam_obj->height
cam_obj->recv_size = cam_obj->width * cam_obj->height * cam_obj->in_bytes_per_pixel;
cam_obj->fb_size = cam_obj->width * cam_obj->height * cam_obj->fb_bytes_per_pixel;
}

Error logs or terminal output

I (816) s3 ll_cam: DMA Channel=0
I (818) cam_hal: cam init ok
I (821) sccb-ng: pin_sda 4 pin_scl 5
I (824) sccb-ng: sccb_i2c_port=1
I (838) camera: Detected camera at address=0x30
I (841) camera: Detected OV2640 camera
I (841) camera: Camera PID=0x26 VER=0x42 MIDL=0x7f MIDH=0xa2
I (915) s3 ll_cam: node_size: 3200, nodes_per_line: 1, lines_per_node: 1
I (915) s3 ll_cam: dma_half_buffer_min:  3200, dma_half_buffer: 16000, lines_per_half_buffer:  5, dma_buffer_size: 32000
I (921) cam_hal: buffer_size: 32000, half_buffer_size: 16000, node_buffer_size: 3200, node_cnt: 10, total_cnt: 240
I (931) cam_hal: Allocating 1920000 Byte frame buffer in PSRAM
I (937) cam_hal: Allocating 1920000 Byte frame buffer in PSRAM
I (942) cam_hal: cam config ok
I (945) ov2640: Set PLL: clk_2x: 1, clk_div: 7, pclk_auto: 1, pclk_div: 12
E (956) cam_hal: FB-SIZE: 0 != 1920000
I (1042) ov2640: Set PLL: clk_2x: 1, clk_div: 7, pclk_auto: 1, pclk_div: 12
E (1352) cam_hal: FB-SIZE: 704000 != 1920000
cam_hal: EV-VSYNC-OVF
cam_hal: EV-VSYNC-OVF
cam_hal: EV-VSYNC-OVF

Steps to reproduce the behavior

  1. do changes needed for cam_obj->greyscale_mode
  2. handle it one more else if (cam_obj->greyscale_mode)

} else {
//I expected if it is greyscale, you may handle here and do : cam_obj->fb_size = cam_obj->width * cam_obj->height
cam_obj->recv_size = cam_obj->width * cam_obj->height * cam_obj->in_bytes_per_pixel;
cam_obj->fb_size = cam_obj->width * cam_obj->height * cam_obj->fb_bytes_per_pixel;
}

Project release version

latest

System architecture

Intel/AMD 64-bit (modern PC, older Mac)

Operating system

Windows

Operating system version

win 11

Shell

CMD

Additional context

camera_config_t camera_config = {
.pin_pwdn = -1,
.pin_reset = -1,
.pin_xclk = 15,
.pin_sscb_sda = 4,
.pin_sscb_scl = 5,
.pin_d7 = 16,
.pin_d6 = 17,
.pin_d5 = 18,
.pin_d4 = 12,
.pin_d3 = 10,
.pin_d2 = 8,
.pin_d1 = 9,
.pin_d0 = 11,
.pin_vsync = 6,
.pin_href = 7,
.pin_pclk = 13,
.xclk_freq_hz = 20000000,
.pixel_format = PIXFORMAT_GRAYSCALE, // RGB565'ten JPEG'e değiştirildi
.frame_size = FRAMESIZE_UXGA,
.jpeg_quality = 1, // JPEG kalitesi artırıldı
.fb_count = 2,
.fb_location = CAMERA_FB_IN_PSRAM,
.grab_mode = CAMERA_GRAB_WHEN_EMPTY
};

esp_err_t err = esp_camera_init(&camera_config);
if (err != ESP_OK) {
    ESP_LOGE(TAG, "Kamera baslatilamadi: %s", esp_err_to_name(err));
    return;
}

sensor_t *s = esp_camera_sensor_get();
if (s) {
    //s->set_framesize(s, FRAMESIZE_240X240);
    s->set_quality(s, 1);           // JPEG kalitesi - biraz düşürdük
    s->set_brightness(s, -2);        // Parlaklığı azalttık
    s->set_contrast(s, 2);           // Kontrastı artırdık
    s->set_saturation(s, 0);         // Normal satürasyon
    s->set_sharpness(s, 2);          // Keskinliği artırdık
    s->set_denoise(s, 1);            // Gürültü azaltma açık
    s->set_gainceiling(s, GAINCEILING_4X); // Gain kontrolü
    s->set_whitebal(s, 1);           // Otomatik beyaz dengesi
    s->set_exposure_ctrl(s, 1);      // Otomatik pozlama kontrolü açık
    s->set_awb_gain(s, 1);           // Otomatik beyaz dengesi gain kontrolü
    s->set_aec2(s, 0);               // AEC DSP kontrolünü kapattık
    s->set_ae_level(s, -2);          // AEC seviyesini düşürdük
    s->set_aec_value(s, 300);        // Manuel pozlama süresi
    s->set_gain_ctrl(s, 1);          // Otomatik gain kontrolü
    s->set_agc_gain(s, 0);           // Manuel gain değeri
    s->set_bpc(s, 1);                // Bad pixel düzeltme açık
    s->set_wpc(s, 1);                // Beyaz piksel düzeltme açık
    s->set_raw_gma(s, 1);            // Gamma düzeltme
    s->set_lenc(s, 1);               // Lens düzeltme
    s->set_res_raw(s, 0/*OV2640_MODE_UXGA*/, 0, 0, 0, 600, 300, 800, 600, 800, 600, false, false);
    s->set_hmirror(s, 0);            // Yatay ayna kapalı
    s->set_vflip(s, 0);              // Dikey çevirme kapalı
    s->set_dcw(s, 1);                // Downsize EN
    s->set_colorbar(s, 0);           // Test pattern kapalı
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions