Var reuse issue in loop

I am using libcamera. To reuse the memory allocated for the frame, I have to use some code like following:

let request = generate_request();

camera.queue_request(request);
let request = camera.get_result();
let photo: &[u8] = request.photo();
request.reuse();

camera.queue_request(quest);
let request = camera.get_result();
let photo: &[u8] = request.photo();

This code worked well. Then further more, I made this into a loop to get photo frequently.

let request = generate_request();
loop {
camera.queue_request(request);
let request = camera.get_result();
let photo: &[u8] = request.photo();
// handling photo
request.reuse();
}

Now it failed building since request is moved in previous loop and cannot be used again in queue_request, although in fact they are different vars.

How to get this working?

I don't know libcamera, but couldn't you just use a single request variable instead of redeclaring a new one, like so:

let mut request = generate_request();  // CHANGED: Added "mut"
loop {
    camera.queue_request(request);
    request = camera.get_result();  // CHANGED: No "let"
    let photo: &[u8] = request.photo();
    // handling photo
    request.reuse();
}
3 Likes

Thank you.

This topic was automatically closed 90 days after the last reply. We invite you to open a new topic if you have further questions or comments.