Hi Laurent,

Thank you very much for your reply. This is what I thought, too. It seems that there's an implicit order of execution that is not clearly implied in the code, meaning `uvc_parse_streaming` is called before `uvc_v4l2_try_format`.

That being said, I was wondering maybe a better practice to write the loop in `uvc_v4l2_try_format` would be like the following,

```
format=NULL;
...
for (i = 0; i < stream->nformats; ++i) {
                format = &stream->format[i];
                if (format->fcc == fmt->fmt.pix.pixelformat)
                        break;
}
// dereferencing format
```
to
```
// just declaration
format;
i=0;
do {
                format = &stream->format[i];
                if (format->fcc == fmt->fmt.pix.pixelformat)
                        break;
                ++i;
} while (i<stream->nformats)
// dereferencing format
```
I mean you can save one initialization, provided compiler does it and one 
branch.

Shaobo
On 2019/3/2 14:43, Laurent Pinchart wrote:
Hi Shaobo,

On Sat, Mar 02, 2019 at 01:22:49PM -0700, Shaobo He wrote:
Hello everyone,

This is Shaobo from Utah again. I've been bugging the mailing list with my
patches. I have a quick question about a function in
`drivers/media/usb/uvc/uvc_v4l2.c`. In `uvc_v4l2_try_format`, can
`stream->nformats` be 0? I saw that in other files, this field could be zero
which is considered as error cases. I was wondering if it's true for this
function, too.

The uvc_parse_streaming() function should answer this question :-)

Reply via email to