[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 1/1] cameraif: add ABI for para-virtual camera
On 2/5/19 12:44 PM, Oleksandr Andrushchenko wrote: > On 2/5/19 12:53 PM, Hans Verkuil wrote: >> On 2/5/19 11:44 AM, Oleksandr Andrushchenko wrote: >>> On 2/5/19 11:34 AM, Hans Verkuil wrote: >>>> On 2/5/19 9:48 AM, Oleksandr Andrushchenko wrote: >>>>> On 1/23/19 10:14 AM, Oleksandr Andrushchenko wrote: >>>>>> Any comments from Xen community? >>>>>> Konrad? >>>>> While I am still looking forward to any comments from Xen community... >>>>>> On 1/15/19 4:44 PM, Hans Verkuil wrote: >>>>>>> Hi Oleksandr, >>>>>>> >>>>>>> Just two remaining comments: >>>>>>> >>>>>>> On 1/15/19 10:38 AM, Oleksandr Andrushchenko wrote: >>>>>>>> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@xxxxxxxx> >>>>>>>> >>>>>>>> This is the ABI for the two halves of a para-virtualized >>>>>>>> camera driver which extends Xen's reach multimedia capabilities even >>>>>>>> farther enabling it for video conferencing, In-Vehicle Infotainment, >>>>>>>> high definition maps etc. >>>>>>>> >>>>>>>> The initial goal is to support most needed functionality with the >>>>>>>> final idea to make it possible to extend the protocol if need be: >>>>>>>> >>>>>>>> 1. Provide means for base virtual device configuration: >>>>>>>> - pixel formats >>>>>>>> - resolutions >>>>>>>> - frame rates >>>>>>>> 2. Support basic camera controls: >>>>>>>> - contrast >>>>>>>> - brightness >>>>>>>> - hue >>>>>>>> - saturation >>>>>>>> 3. Support streaming control >>>>>>>> >>>>>>>> Signed-off-by: Oleksandr Andrushchenko >>>>>>>> <oleksandr_andrushchenko@xxxxxxxx> >>>>>>>> --- >>>>>>>> xen/include/public/io/cameraif.h | 1364 >>>>>>>> ++++++++++++++++++++++++++++++ >>>>>>>> 1 file changed, 1364 insertions(+) >>>>>>>> create mode 100644 xen/include/public/io/cameraif.h >>>>>>>> >>>>>>>> diff --git a/xen/include/public/io/cameraif.h >>>>>>>> b/xen/include/public/io/cameraif.h >>>>>>>> new file mode 100644 >>>>>>>> index 000000000000..246eb2457f40 >>>>>>>> --- /dev/null >>>>>>>> +++ b/xen/include/public/io/cameraif.h >>>>>>>> @@ -0,0 +1,1364 @@ >>>>>>> <snip> >>>>>>> >>>>>>>> +/* >>>>>>>> + >>>>>>>> ****************************************************************************** >>>>>>>> + * EVENT CODES >>>>>>>> + >>>>>>>> ****************************************************************************** >>>>>>>> + */ >>>>>>>> +#define XENCAMERA_EVT_FRAME_AVAIL 0x00 >>>>>>>> +#define XENCAMERA_EVT_CTRL_CHANGE 0x01 >>>>>>>> + >>>>>>>> +/* Resolution has changed. */ >>>>>>>> +#define XENCAMERA_EVT_CFG_FLG_RESOL (1 << 0) >>>>>>> I think this flag is a left-over from v2 and should be removed. >>>>>>> >>>>>>> <snip> >>>>>>> >>>>>>>> + * Request number of buffers to be used: >>>>>>>> + * 0 1 2 3 >>>>>>>> octet >>>>>>>> + * >>>>>>>> +----------------+----------------+----------------+----------------+ >>>>>>>> + * | id | _OP_BUF_REQUEST| reserved >>>>>>>> | 4 >>>>>>>> + * >>>>>>>> +----------------+----------------+----------------+----------------+ >>>>>>>> + * | reserved >>>>>>>> | 8 >>>>>>>> + * >>>>>>>> +----------------+----------------+----------------+----------------+ >>>>>>>> + * | num_bufs | reserved >>>>>>>> | 12 >>>>>>>> + * >>>>>>>> +----------------+----------------+----------------+----------------+ >>>>>>>> + * | reserved >>>>>>>> | 16 >>>>>>>> + * >>>>>>>> +----------------+----------------+----------------+----------------+ >>>>>>>> + * >>>>>>>> |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| >>>>>>>> + * >>>>>>>> +----------------+----------------+----------------+----------------+ >>>>>>>> + * | reserved >>>>>>>> | 64 >>>>>>>> + * >>>>>>>> +----------------+----------------+----------------+----------------+ >>>>>>>> + * >>>>>>>> + * num_bufs - uint8_t, desired number of buffers to be used. This is >>>>>>>> + * limited to the value configured in XenStore.max-buffers. >>>>>>>> + * Passing zero num_bufs in this request (after streaming has >>>>>>>> stopped >>>>>>>> + * and all buffers destroyed) unblocks camera configuration changes. >>>>>>> I think the phrase 'unblocks camera configuration changes' is confusing. >>>>>>> >>>>>>> In v3 this sentence came after the third note below, and so it made >>>>>>> sense >>>>>>> in that context, but now the order has been reversed and it became hard >>>>>>> to >>>>>>> understand. >>>>>>> >>>>>>> I'm not sure what the best approach is to fix this. One option is to >>>>>>> remove >>>>>>> the third note and integrate it somehow in the sentence above. Or >>>>>>> perhaps >>>>>>> do away with the 'notes' at all and just write a more extensive >>>>>>> documentation >>>>>>> for this op. I leave that up to you. >>>>> Hans, how about: >>>>> >>>>> * num_bufs - uint8_t, desired number of buffers to be used. >>>>> * >>>>> * The number of buffers in this request must not exceed the value >>>>> configured >>>>> * in XenStore.max-buffers. If the number of buffers is not zero then >>>>> after this >>>>> * request the camera configuration cannot be changed. In order to >>>>> allow camera >>>>> * (re)configuration this request must be sent with num_bufs set to >>>>> zero and >>>>> * the streaming must be stopped and buffers destroyed. >>>>> * It is allowed for the frontend to send multiple >>>>> XENCAMERA_OP_BUF_REQUEST >>>>> * requests before sending XENCAMERA_OP_STREAM_START request to update >>>>> or >>>>> * tune the final configuration. >>>>> * Frontend is responsible for checking the corresponding response in >>>>> order to >>>>> * see if the values reported back by the backend do match the desired >>>>> ones >>>>> * and can be accepted. >>>>> * >>>>> * See response format for this request. >>>>> */ >>>> Hmm, it still is awkward. Part of the reason for that is that >>>> VIDIOC_REQBUFS >>>> is just weird in that a value of 0 has a special meaning. >>>> >>>> Perhaps it would be much cleaner for the Xen implementation to just add a >>>> new >>>> OP: _OP_FREE_ALL_BUFS (or perhaps _RELEASE_ALL_BUFS) that effectively does >>>> VIDIOC_REQBUFS with a 0 count value. And this OP_BUF_REQUEST (wouldn't >>>> OP_REQUEST_BUFS be a better name?) >>> I have all operation categorized, e.g. there are commands >>> for configuration (XENCAMERA_OP_CONFIG_XXX), >>> buffer handling (XENCAMERA_OP_BUF_XXX) etc., so I prefer to >>> keep the name as is. >>>> would then do nothing or return an error >>>> if num_bufs == 0. >>>> >>>> If you don't want to create a new Xen op, then I would change the text some >>>> more since you do not actually explain what the op does if num_bufs is 0. >>> Well, I tend to keep this as is with no additional op. >>>> I would write something like this: >>>> >>>> If num_bufs is greater than 0, then <describe what happens>. >>>> >>>> If num_bufs is equal to 0, then <describe what happens>. >>>> >>>> If num_bufs is not zero then after this request the camera configuration >>>> cannot be changed. In order to allow camera (re)configuration this request >>>> must be sent with num_bufs set to zero and the streaming must be stopped >>>> and buffers destroyed. >>> Next try: >>> >>> * num_bufs - uint8_t, desired number of buffers to be used. >>> * >>> * If num_bufs is not zero then the backend validates the requested number >>> of >>> * buffers and responds with the number of buffers allowed for this >>> frontend. >>> * Frontend is responsible for checking the corresponding response in >>> order to >>> * see if the values reported back by the backend do match the desired ones >>> * and can be accepted. >>> * Frontend is allowed to send multiple XENCAMERA_OP_BUF_REQUEST requests >>> * before sending XENCAMERA_OP_STREAM_START request to update or tune the >>> * final configuration. >>> * Frontend is not allowed to change the number of buffers and/or camera >>> * configuration after the streaming has started. >> This all looks good. > Great >>> * >>> * In order to allow camera (re)configuration this request must be sent >>> with >>> * num_bufs set to zero and the streaming must be stopped and buffers >>> destroyed. >> You just say that if you want to reconfigure (and this only applies to >> reconfigure, >> not to the initial configure step since then there are no buffers allocated >> yet), >> then you need to call this with num_bufs == 0. But you don't explain what >> this op >> does if num_bufs == 0! >> >> So before this sentence you need to add a description of what this op does >> if num_bufs >> is 0, and change '(re)configuration' to 'reconfiguration'. > Well, it is a good question. I already describe what happens if > streaming has stopped and buffers destroyed and num_bufs == 0: > this is a reconfiguration. > > I also have a note that "Frontend is not allowed to change the > number of buffers and/or camera configuration after the streaming > has started.": this is the case that we cannot change the number of > buffers during the streaming, e.g. one cannot send num_bufs == 0 > at this time. > > So, what is not covered is that the streaming has never started, > num_bufs has or has not been set to some value and now frontend > requests num_bufs == 0? > It seems that we can state that in this case backend does > nothing or it may free any buffers if it has allocated any, so the > tail reads as: > > * If num_bufs is 0 and streaming has not started yet, then the backend may > * free all previously allocated buffers (if any) or do nothing. Much better. Now you actually explain what this op does if num_bufs == 0. > * > * If camera reconfiguration is required then this request must be sent with > * num_bufs set to zero and streaming must be stopped and buffers destroyed. Shouldn't the order be to first stop streaming, then call this request with num_bufs set to 0 and finally destroy the buffers? Trying to call this if streaming is in progress will result in an error. I think that should be documented as well. Sorry for paying so much attention to this, but I think it is important that this is documented precisely. Regards, Hans > * > * Please note, that the number of buffers in this request must not exceed > * the value configured in XenStore.max-buffers. > * > * See response format for this request. > >> >> Regards, >> >> Hans >> >>> * >>> * Please note, that the number of buffers in this request must not exceed >>> * the value configured in XenStore.max-buffers. >>> * >>> * See response format for this request. >>> >>>> Regards, >>>> >>>> Hans >>>> >>>>>>>> + * >>>>>>>> + * See response format for this request. >>>>>>>> + * >>>>>>>> + * Notes: >>>>>>>> + * - frontend must check the corresponding response in order to see >>>>>>>> + * if the values reported back by the backend do match the desired >>>>>>>> ones >>>>>>>> + * and can be accepted. >>>>>>>> + * - frontend may send multiple XENCAMERA_OP_BUF_REQUEST requests >>>>>>>> before >>>>>>>> + * sending XENCAMERA_OP_STREAM_START request to update or tune the >>>>>>>> + * configuration. >>>>>>>> + * - after this request camera configuration cannot be changed, >>>>>>>> unless >>>>>>> camera configuration -> the camera configuration >>>>>>> >>>>>>>> + * streaming is stopped and buffers destroyed >>>>>>>> + */ >>>>>>> Regards, >>>>>>> >>>>>>> Hans > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |