Re: [PATCH v2 1/2] v4l: Add new alpha component control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/28/2011 01:39 PM, Hans Verkuil wrote:
> On Monday 28 November 2011 13:13:32 Sylwester Nawrocki wrote:
>> On 11/28/2011 12:38 PM, Hans Verkuil wrote:
>>> On Friday 25 November 2011 16:39:31 Sylwester Nawrocki wrote:
>>>> This control is intended for the video capture or memory-to-memory
>>>> devices that are capable of setting up a per-pixel alpha component to
>>>> some arbitrary value. The V4L2_CID_ALPHA_COMPONENT control allows to
>>>> set the alpha component for all pixels to a value in range from 0 to
>>>> 255.
>>>>
>>>> Signed-off-by: Sylwester Nawrocki <s.nawrocki@xxxxxxxxxxx>
>>>> Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx>
>>>> ---
>>>>
>>>>  Documentation/DocBook/media/v4l/compat.xml         |   11 ++++++++
>>>>  Documentation/DocBook/media/v4l/controls.xml       |   25
>>>>
>>>> +++++++++++++++---- .../DocBook/media/v4l/pixfmt-packed-rgb.xml        |
>>>>
>>>>  7 ++++-
>>>>  drivers/media/video/v4l2-ctrls.c                   |    7 +++++
>>>>  include/linux/videodev2.h                          |    6 ++--
>>>>  5 files changed, 45 insertions(+), 11 deletions(-)
>>
>> ...
>>
>>>>  	/* MPEG controls */
>>>>  	/* Keep the order of the 'case's the same as in videodev2.h! */
>>>>
>>>> @@ -714,6 +715,12 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum
>>>> v4l2_ctrl_type *type, /* Max is calculated as RGB888 that is 2^24 */
>>>>
>>>>  		*max = 0xFFFFFF;
>>>>  		break;
>>>>
>>>> +	case V4L2_CID_ALPHA_COMPONENT:
>>>> +		*type = V4L2_CTRL_TYPE_INTEGER;
>>>> +		*step = 1;
>>>> +		*min = 0;
>>>> +		*max = 0xff;
>>>> +		break;
>>>
>>> Hmm. Do we really want to fix the max value to 0xff? The bits assigned to
>>> the alpha component will vary between 1 (V4L2_PIX_FMT_RGB555X), 4
>>> (V4L2_PIX_FMT_RGB444) or 8 (V4L2_PIX_FMT_RGB32). It wouldn't surprise me
>>> to see larger sizes as well in the future (e.g. 16 bits).
>>>
>>> I think the max value should be the largest alpha value the hardware can
>>> support. The application has to set it to the right value that
>>> corresponds to the currently chosen pixel format. The driver just copies
>>> the first N bits into the alpha value where N depends on the pixel
>>> format.
>>>
>>> what do you think?
>>
>> Yes, ideally the maximum value of the alpha control should be changing
>> depending on the set colour format.
>> Currently the maximum value of the control equals maximum alpha value for
>> the fourcc of maximum colour depth (V4L2_PIX_FMT_RGB32).
>>
>> What I found missing was a method for changing the control range
>> dynamically, without deleting and re-initializing the control handler.
>> If we reinitalize whole control handler the previously set control values
>> are lost.
> 
> You can just change the maximum field of struct v4l2_ctrl on the fly like 
> this:
> 
> struct v4l2_ctrl *my_ctrl;
> 
> v4l2_ctrl_lock(my_ctrl);
> my_ctrl->maximum = 10;
> if (my_ctrl->cur.val > my_ctrl->maximum)
> 	my_ctrl->cur.val = my_ctrl->maximum;
> v4l2_ctrl_unlock(my_ctrl);
> 
> Although this might warrant a v4l2_ctrl_update_range() function that does this
> for you. Because after a change like this a V4L2_EVENT_CTRL should also be 
> sent.
> 
> In any case, this functionality isn't hard to add. Just let me know if you 
> need it and I can make a patch for this.

Yes, it would be great if you could prepare a patch for v4l2_ctrl_update_range().
Then I could use it in the next iteration of the patches, instead of hacking 
at the driver. IIRC it's not the first time we needed changing the control range
dynamically.

--

Thanks!
Sylwester
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux