[PATCH v2] Adding NV{12,21} and Y{U,V}12 pixel formats support.

2015-02-18 Thread Miguel Casas-Sanchez

This is the second attempt at creating a patch doing
that while respecting the pattern movements, crops,
and other artifacts that can be added to the generated
frames. 

Hope it addresses Hans' comments on the first patch.
It should create properly moving patterns, border,
square and noise. SAV/EAV are left out for the new
formats, but can be pulled in if deemed interesting/
necessary. New formats' descriptions are shorter.
Needless to say, previous formats should work 100% 
the same as before.

Text is, still, printed as Y only. I think the 
goal of the text is not pixel-value-based comparisons,
but human reading. Please let me know otherwise.

It needed quite some refactoring of the original
tpg_fillbuffer() function:
- the internal code generating the video buffer
  line-by-line are factored out into a function
  tpg_fill_oneline(). const added wherever it made
  sense.
- this new tpg_fill_oneline() is used by both
  new functions tpg_fillbuffer_packed() and
  tpg_fillbuffer_planar().
- tpg_fillbuffer_packed() does the non-planar
  formats' buffer composition, so it does, or should
  do, pretty much the same as vivid did before this
  patch.

Tested via both guvcview and qv4l2, checking formats,
patterns, pattern movements, box and frame checkboxes.

Hope I managed to get the patch correctly into the mail
i.e. no spurious wraparounds, no whitespaces etc :)

Signed-off-by: Miguel Casas-Sanchez 
---
 drivers/media/platform/vivid/vivid-kthread-cap.c |   6 +-
 drivers/media/platform/vivid/vivid-tpg.c | 481 ---
 drivers/media/platform/vivid/vivid-tpg.h |  24 +-
 drivers/media/platform/vivid/vivid-vid-common.c  |  28 ++
 4 files changed, 383 insertions(+), 156 deletions(-)

diff --git a/drivers/media/platform/vivid/vivid-kthread-cap.c 
b/drivers/media/platform/vivid/vivid-kthread-cap.c
index 39a67cf..93c6ca3 100644
--- a/drivers/media/platform/vivid/vivid-kthread-cap.c
+++ b/drivers/media/platform/vivid/vivid-kthread-cap.c
@@ -669,8 +669,7 @@ static void vivid_thread_vid_cap_tick(struct vivid_dev 
*dev, int dropped_bufs)
if (vid_cap_buf) {
/* Fill buffer */
vivid_fillbuff(dev, vid_cap_buf);
-   dprintk(dev, 1, "filled buffer %d\n",
-   vid_cap_buf->vb.v4l2_buf.index);
+   dprintk(dev, 1, "filled buffer %d\n", 
vid_cap_buf->vb.v4l2_buf.index);
 
/* Handle overlay */
if (dev->overlay_cap_owner && dev->fb_cap.base &&
@@ -679,8 +678,7 @@ static void vivid_thread_vid_cap_tick(struct vivid_dev 
*dev, int dropped_bufs)
 
vb2_buffer_done(&vid_cap_buf->vb, dev->dqbuf_error ?
VB2_BUF_STATE_ERROR : VB2_BUF_STATE_DONE);
-   dprintk(dev, 2, "vid_cap buffer %d done\n",
-   vid_cap_buf->vb.v4l2_buf.index);
+   dprintk(dev, 2, "vid_cap buffer %d done\n", 
vid_cap_buf->vb.v4l2_buf.index);
}
 
if (vbi_cap_buf) {
diff --git a/drivers/media/platform/vivid/vivid-tpg.c 
b/drivers/media/platform/vivid/vivid-tpg.c
index 34493f4..802ba2c 100644
--- a/drivers/media/platform/vivid/vivid-tpg.c
+++ b/drivers/media/platform/vivid/vivid-tpg.c
@@ -140,6 +140,10 @@ int tpg_alloc(struct tpg_data *tpg, unsigned max_w)
if (!tpg->random_line[plane])
return -ENOMEM;
}
+   tpg->scratchpad_line = vzalloc(max_w * 2);
+   if (!tpg->scratchpad_line)
+   return -ENOMEM;
+
return 0;
 }
 
@@ -193,6 +197,10 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
case V4L2_PIX_FMT_UYVY:
case V4L2_PIX_FMT_YVYU:
case V4L2_PIX_FMT_VYUY:
+   case V4L2_PIX_FMT_NV12:
+   case V4L2_PIX_FMT_NV21:
+   case V4L2_PIX_FMT_YUV420:
+   case V4L2_PIX_FMT_YVU420:
tpg->is_yuv = true;
break;
default:
@@ -224,12 +232,32 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
case V4L2_PIX_FMT_ABGR32:
tpg->twopixelsize[0] = 2 * 4;
break;
+   case V4L2_PIX_FMT_NV12:
+   case V4L2_PIX_FMT_NV21:
+   case V4L2_PIX_FMT_YUV420:
+   case V4L2_PIX_FMT_YVU420:
+   tpg->twopixelsize[0] = 3;
+   break;
case V4L2_PIX_FMT_NV16M:
case V4L2_PIX_FMT_NV61M:
tpg->twopixelsize[0] = 2;
tpg->twopixelsize[1] = 2;
break;
}
+
+   switch (fourcc) {
+   case V4L2_PIX_FMT_NV12:
+   case V4L2_PIX_FMT_NV21:
+   case V4L2_PIX_FMT_YUV420:
+   case V4L2_PIX_FMT_YVU420:
+   tpg->vertical_downsampling = 2;
+   tpg->horizontal_downsampling = 2;
+   break;
+   default:
+   tpg->vertical_downsampling = 0;
+   tpg->horizontal_downsampling = 0;
+   }
+
return true;
 }
 
@@ -271,6 +299,12 @@ void tpg_reset_source(struct tpg_data *tpg, unsigned 
width, unsig

Re: [PATCH v2] Adding NV{12,21} and Y{U,V}12 pixel formats support.

2015-02-24 Thread Hans Verkuil
Hi Miguel,

Thanks for the patch. However, after reviewing it and testing it
I decided to implement my own version. Partially because several
features were still failing (crop/compose/scale), partially because
I didn't like the way the tpg was changed: too much change basically.

Yesterday I added YUV 420 support. It's still work in progress as I
am not happy with some of the internal changes and because changing the
compose height fails to work at the moment.

You can find my preliminary work here:

http://git.linuxtv.org/cgit.cgi/hverkuil/media_tree.git/log/?h=vivid-420

I plan to continue work on this on Friday and Monday, fixing any
remaining bugs, adding support for the other planar formats and
carefully reviewing if I handle the downsampling correctly. I also
want to add output support for these formats.

Regards,

Hans

On 02/19/2015 03:18 AM, Miguel Casas-Sanchez wrote:
> 
> This is the second attempt at creating a patch doing
> that while respecting the pattern movements, crops,
> and other artifacts that can be added to the generated
> frames. 
> 
> Hope it addresses Hans' comments on the first patch.
> It should create properly moving patterns, border,
> square and noise. SAV/EAV are left out for the new
> formats, but can be pulled in if deemed interesting/
> necessary. New formats' descriptions are shorter.
> Needless to say, previous formats should work 100% 
> the same as before.
> 
> Text is, still, printed as Y only. I think the 
> goal of the text is not pixel-value-based comparisons,
> but human reading. Please let me know otherwise.
> 
> It needed quite some refactoring of the original
> tpg_fillbuffer() function:
> - the internal code generating the video buffer
>   line-by-line are factored out into a function
>   tpg_fill_oneline(). const added wherever it made
>   sense.
> - this new tpg_fill_oneline() is used by both
>   new functions tpg_fillbuffer_packed() and
>   tpg_fillbuffer_planar().
> - tpg_fillbuffer_packed() does the non-planar
>   formats' buffer composition, so it does, or should
>   do, pretty much the same as vivid did before this
>   patch.
> 
> Tested via both guvcview and qv4l2, checking formats,
> patterns, pattern movements, box and frame checkboxes.
> 
> Hope I managed to get the patch correctly into the mail
> i.e. no spurious wraparounds, no whitespaces etc :)
> 
> Signed-off-by: Miguel Casas-Sanchez 

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


Re: [PATCH v2] Adding NV{12,21} and Y{U,V}12 pixel formats support.

2015-02-24 Thread Miguel Casas-Sanchez
Hi Hans,

go for it if you feel it's the best approach. Are you planning to add
multiplanar formats? Particularly, I'm interested in YUV420M and its
twin evil brother YVU420M.

I would recommend adding support for a less-common format such as
YUV410 (or variation thereof). Since this format is so different, it
stresses the added code in revealing ways. I was planning to support
it as a bonus, but I noticed is not recognised in lib4vl -- neither in
qv4l2, therefore. Just saying, it'd be cool.

Cheers
M

On 24 February 2015 at 00:02, Hans Verkuil  wrote:
>
> Hi Miguel,
>
> Thanks for the patch. However, after reviewing it and testing it
> I decided to implement my own version. Partially because several
> features were still failing (crop/compose/scale), partially because
> I didn't like the way the tpg was changed: too much change basically.
>
> Yesterday I added YUV 420 support. It's still work in progress as I
> am not happy with some of the internal changes and because changing the
> compose height fails to work at the moment.
>
> You can find my preliminary work here:
>
> http://git.linuxtv.org/cgit.cgi/hverkuil/media_tree.git/log/?h=vivid-420
>
> I plan to continue work on this on Friday and Monday, fixing any
> remaining bugs, adding support for the other planar formats and
> carefully reviewing if I handle the downsampling correctly. I also
> want to add output support for these formats.
>
> Regards,
>
> Hans
>
> On 02/19/2015 03:18 AM, Miguel Casas-Sanchez wrote:
> >
> > This is the second attempt at creating a patch doing
> > that while respecting the pattern movements, crops,
> > and other artifacts that can be added to the generated
> > frames.
> >
> > Hope it addresses Hans' comments on the first patch.
> > It should create properly moving patterns, border,
> > square and noise. SAV/EAV are left out for the new
> > formats, but can be pulled in if deemed interesting/
> > necessary. New formats' descriptions are shorter.
> > Needless to say, previous formats should work 100%
> > the same as before.
> >
> > Text is, still, printed as Y only. I think the
> > goal of the text is not pixel-value-based comparisons,
> > but human reading. Please let me know otherwise.
> >
> > It needed quite some refactoring of the original
> > tpg_fillbuffer() function:
> > - the internal code generating the video buffer
> >   line-by-line are factored out into a function
> >   tpg_fill_oneline(). const added wherever it made
> >   sense.
> > - this new tpg_fill_oneline() is used by both
> >   new functions tpg_fillbuffer_packed() and
> >   tpg_fillbuffer_planar().
> > - tpg_fillbuffer_packed() does the non-planar
> >   formats' buffer composition, so it does, or should
> >   do, pretty much the same as vivid did before this
> >   patch.
> >
> > Tested via both guvcview and qv4l2, checking formats,
> > patterns, pattern movements, box and frame checkboxes.
> >
> > Hope I managed to get the patch correctly into the mail
> > i.e. no spurious wraparounds, no whitespaces etc :)
> >
> > Signed-off-by: Miguel Casas-Sanchez 
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] Adding NV{12,21} and Y{U,V}12 pixel formats support.

2015-02-24 Thread Hans Verkuil
On 02/24/2015 06:00 PM, Miguel Casas-Sanchez wrote:
> Hi Hans,
> 
> go for it if you feel it's the best approach. Are you planning to add
> multiplanar formats? Particularly, I'm interested in YUV420M and its
> twin evil brother YVU420M.

Certainly. I'm planning to add all those YUV420 variants. Once you have
one working, the others are trivial.

> I would recommend adding support for a less-common format such as
> YUV410 (or variation thereof). Since this format is so different, it
> stresses the added code in revealing ways. I was planning to support
> it as a bonus, but I noticed is not recognised in lib4vl -- neither in
> qv4l2, therefore. Just saying, it'd be cool.

I'll look at it. Is it something you will need? It's a really rare format,
and I don't know if I want to spend a lot of time on it.

Regards,

Hans

> 
> Cheers
> M
> 
> On 24 February 2015 at 00:02, Hans Verkuil  wrote:
>>
>> Hi Miguel,
>>
>> Thanks for the patch. However, after reviewing it and testing it
>> I decided to implement my own version. Partially because several
>> features were still failing (crop/compose/scale), partially because
>> I didn't like the way the tpg was changed: too much change basically.
>>
>> Yesterday I added YUV 420 support. It's still work in progress as I
>> am not happy with some of the internal changes and because changing the
>> compose height fails to work at the moment.
>>
>> You can find my preliminary work here:
>>
>> http://git.linuxtv.org/cgit.cgi/hverkuil/media_tree.git/log/?h=vivid-420
>>
>> I plan to continue work on this on Friday and Monday, fixing any
>> remaining bugs, adding support for the other planar formats and
>> carefully reviewing if I handle the downsampling correctly. I also
>> want to add output support for these formats.
>>
>> Regards,
>>
>> Hans
>>
>> On 02/19/2015 03:18 AM, Miguel Casas-Sanchez wrote:
>>>
>>> This is the second attempt at creating a patch doing
>>> that while respecting the pattern movements, crops,
>>> and other artifacts that can be added to the generated
>>> frames.
>>>
>>> Hope it addresses Hans' comments on the first patch.
>>> It should create properly moving patterns, border,
>>> square and noise. SAV/EAV are left out for the new
>>> formats, but can be pulled in if deemed interesting/
>>> necessary. New formats' descriptions are shorter.
>>> Needless to say, previous formats should work 100%
>>> the same as before.
>>>
>>> Text is, still, printed as Y only. I think the
>>> goal of the text is not pixel-value-based comparisons,
>>> but human reading. Please let me know otherwise.
>>>
>>> It needed quite some refactoring of the original
>>> tpg_fillbuffer() function:
>>> - the internal code generating the video buffer
>>>   line-by-line are factored out into a function
>>>   tpg_fill_oneline(). const added wherever it made
>>>   sense.
>>> - this new tpg_fill_oneline() is used by both
>>>   new functions tpg_fillbuffer_packed() and
>>>   tpg_fillbuffer_planar().
>>> - tpg_fillbuffer_packed() does the non-planar
>>>   formats' buffer composition, so it does, or should
>>>   do, pretty much the same as vivid did before this
>>>   patch.
>>>
>>> Tested via both guvcview and qv4l2, checking formats,
>>> patterns, pattern movements, box and frame checkboxes.
>>>
>>> Hope I managed to get the patch correctly into the mail
>>> i.e. no spurious wraparounds, no whitespaces etc :)
>>>
>>> Signed-off-by: Miguel Casas-Sanchez 
>>

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


Re: [PATCH v2] Adding NV{12,21} and Y{U,V}12 pixel formats support.

2015-02-24 Thread Miguel Casas-Sanchez
On 24 February 2015 at 09:41, Hans Verkuil  wrote:
> On 02/24/2015 06:00 PM, Miguel Casas-Sanchez wrote:
>> Hi Hans,
>>
>> go for it if you feel it's the best approach. Are you planning to add
>> multiplanar formats? Particularly, I'm interested in YUV420M and its
>> twin evil brother YVU420M.
>
> Certainly. I'm planning to add all those YUV420 variants. Once you have
> one working, the others are trivial.

Hooray!

>
>> I would recommend adding support for a less-common format such as
>> YUV410 (or variation thereof). Since this format is so different, it
>> stresses the added code in revealing ways. I was planning to support
>> it as a bonus, but I noticed is not recognised in lib4vl -- neither in
>> qv4l2, therefore. Just saying, it'd be cool.
>
> I'll look at it. Is it something you will need? It's a really rare format,
> and I don't know if I want to spend a lot of time on it.
>

Not particularly high need no; moreover the high downsampling makes
it look visually awful. I just found it was good to stretch assumptions in
the code such as missed hardcoded loop boundaries etc. It'd be a
nice-to-have. Like I said, it also depends on adding support for it in
libv4l (typo before).

> Regards,
>
> Hans
>
>>
>> Cheers
>> M
>>
>> On 24 February 2015 at 00:02, Hans Verkuil  wrote:
>>>
>>> Hi Miguel,
>>>
>>> Thanks for the patch. However, after reviewing it and testing it
>>> I decided to implement my own version. Partially because several
>>> features were still failing (crop/compose/scale), partially because
>>> I didn't like the way the tpg was changed: too much change basically.
>>>
>>> Yesterday I added YUV 420 support. It's still work in progress as I
>>> am not happy with some of the internal changes and because changing the
>>> compose height fails to work at the moment.
>>>
>>> You can find my preliminary work here:
>>>
>>> http://git.linuxtv.org/cgit.cgi/hverkuil/media_tree.git/log/?h=vivid-420
>>>
>>> I plan to continue work on this on Friday and Monday, fixing any
>>> remaining bugs, adding support for the other planar formats and
>>> carefully reviewing if I handle the downsampling correctly. I also
>>> want to add output support for these formats.
>>>
>>> Regards,
>>>
>>> Hans
>>>
>>> On 02/19/2015 03:18 AM, Miguel Casas-Sanchez wrote:

 This is the second attempt at creating a patch doing
 that while respecting the pattern movements, crops,
 and other artifacts that can be added to the generated
 frames.

 Hope it addresses Hans' comments on the first patch.
 It should create properly moving patterns, border,
 square and noise. SAV/EAV are left out for the new
 formats, but can be pulled in if deemed interesting/
 necessary. New formats' descriptions are shorter.
 Needless to say, previous formats should work 100%
 the same as before.

 Text is, still, printed as Y only. I think the
 goal of the text is not pixel-value-based comparisons,
 but human reading. Please let me know otherwise.

 It needed quite some refactoring of the original
 tpg_fillbuffer() function:
 - the internal code generating the video buffer
   line-by-line are factored out into a function
   tpg_fill_oneline(). const added wherever it made
   sense.
 - this new tpg_fill_oneline() is used by both
   new functions tpg_fillbuffer_packed() and
   tpg_fillbuffer_planar().
 - tpg_fillbuffer_packed() does the non-planar
   formats' buffer composition, so it does, or should
   do, pretty much the same as vivid did before this
   patch.

 Tested via both guvcview and qv4l2, checking formats,
 patterns, pattern movements, box and frame checkboxes.

 Hope I managed to get the patch correctly into the mail
 i.e. no spurious wraparounds, no whitespaces etc :)

 Signed-off-by: Miguel Casas-Sanchez 
>>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html