[FFmpeg-devel] [PATCH] smptebars filter

Paul B Mahol onemda at gmail.com
Thu Aug 2 18:04:18 CEST 2012


On 8/2/12, Tim Nicholson <nichot20 at yahoo.com> wrote:
> On 01/08/12 12:16, Stefano Sabatini wrote:
>> On date Wednesday 2012-06-20 16:48:37 +0000, Paul B Mahol encoded:
>>> On 6/20/12, Tim Nicholson <nichot20 at yahoo.com> wrote:
>>>> On 20/06/12 09:19, Thierry Foucu wrote:
>>>>> On Wed, Jun 20, 2012 at 9:54 AM, Paul B Mahol <onemda at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Signed-off-by: Paul B Mahol <onemda at gmail.com>
>>>>>> ---
>>>>>>  doc/filters.texi             |   20 ++++
>>>>>>  libavfilter/Makefile         |    1 +
>>>>>>  libavfilter/allfilters.c     |    1 +
>>>>>>  libavfilter/vsrc_smptebars.c |  215
>>>>>> ++++++++++++++++++++++++++++++++++++++++++
>>>>>>  4 files changed, 237 insertions(+), 0 deletions(-)
>>>>>>  create mode 100644 libavfilter/vsrc_smptebars.c
>>>>>>
>>>>>> diff --git a/doc/filters.texi b/doc/filters.texi
>>>>>> index 566fbfc..0c0c490 100644
>>>>>> --- a/doc/filters.texi
>>>>>> +++ b/doc/filters.texi
>>>>>> @@ -3799,6 +3799,26 @@ the @code{mp=geq} filter:
>>>>>>  nullsrc=s=256x256, mp=geq=random(1)*255:128:128
>>>>>>  @end example
>>>>>>
>>>>>> + at section smptebars
>>>>>> +
>>>>>> +Generate SMPTE color bars.
>>>>>>
>>>>>
>>>>>
>>>>> Am i correct to assume that this SMPTE color bar is the SD version.
>>>>>
>>>>> For HD, I though to remember the SMPTE color bar is different.
>>>>> see http://en.wikipedia.org/wiki/File:SMPTE_Color_Bars_16x9.svg
>>>>>
>>>>> If so, should we not call this one SMPTE_SD? or add both into the same
>>>>> filter?
>>>>>
>>>>>
>>>>
>>>> I think bars should be in the correct format for the colorspace
>>>> intended
>>>> with true black at RGB 16  units and true white at 235. (Those are the
>>>> European figures I guess they may differ for 525/60 standards)
>>>
>>> Colors (rainbow and wobnair) are exactly as generated by y4mcolorbars.
>>>
>
> For full range RGB values and 75% bars they look correct to me
>
>>> Other colors like mentioned in comments are just made up and can not
>>> be really reproduced in RGB or YUV(J) colorspace.
>>>
>>> Also drawutils only supports RGB color input.
>>>
>>>>
>>>> ISTR that the blackest black on SMPTE bars is actually 2% below true
>>>> black in order to test for black clipping, but that true back on NTSC
>>>> was 5% up on true black in PAL back in the analogue days....
>>>>
>>>> As for HD bars being different, they certainly look different in HD on
>>>> a
>>>> waveform monitor, but the different colorspace matrix will do that for
>>>> you. I'm not aware of the actual generated RGB levels being different,
>>>> but again this may be different outside of Europe...
>>>>
>>>> Time to dig out the specs again....
>>
>> Updated (against a few patches which still need to be applied), but
>> you get the idea.
>
> Not sure about the PLUGE values though...
> I am used to working 16-235 YUV so may have got some maths wrong but by
> my understanding:-
>
>> +static uint8_t white[4] = { 255, 255, 255, 255 };
>> +static uint8_t black[4] = {   0,   0,   0, 255 };
>
> Whilst, in SMPTE bars, white is 100% black is 7.5%, with blanking at 0%,
> which would give:-
>
>    static uint8_t black[4] = { 19,  19,  19, 255 };
>
>> +
>> +/* made up values */
>> +static const uint8_t neg4ire[4] = {   7,   7,   7, 255 };
>> +static const uint8_t pos4ire[4] = {  17,  17,  17, 255 };
>
> These values would both be brighter than the original "black" above
> (0,0,0) surely?

They are not part of RGB/YUV, they can not be showed in such colorspace
they are completly made up values, and your values will not make them
any better.

>
> Based on my figures I would reckon:-
>
>   static const uint8_t neg4ire[4] = {   9,   9,   9, 255 };
>   static const uint8_t pos4ire[4] = {  29,  29,  29, 255 };
>
>
>> +static const uint8_t i_pixel[4] = { 224,   0,   0, 255 };
>> +static const uint8_t q_pixel[4] = {   0,   0, 176, 255 };
>
> Again these look a little curious to me, the "pure" values only exist in
> YUV land and are often "fudged" by bumping up the Y to avoid negative
> values in RGB land but preserve the phase so it looks correct on a
> vectorscope.
>
> My values are:-
>
>    static const uint8_t i_pixel[4] = {   0,  68, 114, 255 };
>    static const uint8_t q_pixel[4] = {  67,   0, 130, 255 };
>
> Which give the converted CbCr values of  158,95 and 175,148.


More information about the ffmpeg-devel mailing list