Re: [FFmpeg-devel] [PATCH] avfilter/avf_showwaves: add draw grid support

2017-11-21 Thread Paul B Mahol
On 11/21/17, Dave Rice  wrote:
>
>> On Nov 21, 2017, at 7:36 AM, Paul B Mahol  wrote:
>>
>> Signed-off-by: Paul B Mahol 
>> ---
>> doc/filters.texi|  6 ++
>> libavfilter/avf_showwaves.c | 28 
>> 2 files changed, 34 insertions(+)
>>
>> diff --git a/doc/filters.texi b/doc/filters.texi
>> index 62f633c6f8..9c98f1684b 100644
>> --- a/doc/filters.texi
>> +++ b/doc/filters.texi
>> @@ -19178,6 +19178,12 @@ Cubic root.
>> @end table
>>
>> Default is linear.
>> +
>> +@item grid
>> +Draw grid, default is disabled.
>> +
>> +@item grid_color
>> +Set grid color.
>> @end table
>>
>> @subsection Examples
>> diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
>> index 0866967984..74d4886cd4 100644
>> --- a/libavfilter/avf_showwaves.c
>> +++ b/libavfilter/avf_showwaves.c
>> @@ -69,6 +69,8 @@ typedef struct ShowWavesContext {
>> int mode;   ///< ShowWavesMode
>> int scale;  ///< ShowWavesScale
>> int split_channels;
>> +int grid;
>> +uint8_t grid_rgba[4];
>> uint8_t *fg;
>>
>> int (*get_h)(int16_t sample, int height);
>> @@ -104,6 +106,8 @@ static const AVOption showwaves_options[] = {
>> { "log", "logarithmic",0, AV_OPT_TYPE_CONST, {.i64=SCALE_LOG},
>> .flags=FLAGS, .unit="scale"},
>> { "sqrt", "square root",   0, AV_OPT_TYPE_CONST,
>> {.i64=SCALE_SQRT}, .flags=FLAGS, .unit="scale"},
>> { "cbrt", "cubic root",0, AV_OPT_TYPE_CONST,
>> {.i64=SCALE_CBRT}, .flags=FLAGS, .unit="scale"},
>> +{ "grid", "draw grid", OFFSET(grid), AV_OPT_TYPE_BOOL, {.i64=0}, 0,
>> 1, FLAGS },
>> +{ "grid_color", "set grid color", OFFSET(grid_rgba),
>> AV_OPT_TYPE_COLOR, {.str="0x00"}, 0, 0, FLAGS },
>> { NULL }
>> };
>>
>> @@ -562,6 +566,30 @@ static int alloc_out_frame(ShowWavesContext
>> *showwaves, const int16_t *p,
>>   outlink->time_base);
>> for (j = 0; j < outlink->h; j++)
>> memset(out->data[0] + j*out->linesize[0], 0, outlink->w *
>> showwaves->pixstep);
>> +
>> +if (showwaves->grid) {
>> +const int pixstep = showwaves->pixstep;
>> +int ystep = showwaves->split_channels ? outlink->h /
>> inlink->channels / 4 : outlink->h / 4;
>> +int channels = showwaves->split_channels ? inlink->channels :
>> 1;
>> +int x, s, c, yskip = 0;
>> +
>> +for (c = 0; c < channels; c++) {
>> +for (j = 0; j < 4; j++) {
>> +for (x = 0; x < outlink->w; x+=3) {
>> +for (s = 0; s < pixstep; s++) {
>> +out->data[0][(yskip + j * ystep) *
>> out->linesize[0] + x * pixstep + s] = showwaves->grid_rgba[s];
>> +}
>> +}
>> +}
>> +for (x = 0; x < outlink->w; x+=3) {
>> +for (s = 0; s < pixstep; s++) {
>> +out->data[0][(yskip + j * ystep - 1) *
>> out->linesize[0] + x * pixstep + s] = showwaves->grid_rgba[s];
>> +}
>> +}
>> +
>> +yskip += j * ystep;
>> +}
>> +}
>> }
>> return 0;
>> }
>> --
>> 2.11.0
>
> Seems interesting but do the gridlines convey any meaning? Perhaps a flags
> value too similar to waveform that should label the lines in dB or as a
> float. Also perhaps worth adjustment the placement of the gridlines
> depending on a scale (log vs lin).

That would be quite messy for log at least.
The meaning is to find out where is 0, 0.5, -0.5, -1 and 1 in linear scale.

> Dave Rice
>
> ___
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] avfilter/avf_showwaves: add draw grid support

2017-11-21 Thread Dave Rice

> On Nov 21, 2017, at 7:36 AM, Paul B Mahol  wrote:
> 
> Signed-off-by: Paul B Mahol 
> ---
> doc/filters.texi|  6 ++
> libavfilter/avf_showwaves.c | 28 
> 2 files changed, 34 insertions(+)
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 62f633c6f8..9c98f1684b 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -19178,6 +19178,12 @@ Cubic root.
> @end table
> 
> Default is linear.
> +
> +@item grid
> +Draw grid, default is disabled.
> +
> +@item grid_color
> +Set grid color.
> @end table
> 
> @subsection Examples
> diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
> index 0866967984..74d4886cd4 100644
> --- a/libavfilter/avf_showwaves.c
> +++ b/libavfilter/avf_showwaves.c
> @@ -69,6 +69,8 @@ typedef struct ShowWavesContext {
> int mode;   ///< ShowWavesMode
> int scale;  ///< ShowWavesScale
> int split_channels;
> +int grid;
> +uint8_t grid_rgba[4];
> uint8_t *fg;
> 
> int (*get_h)(int16_t sample, int height);
> @@ -104,6 +106,8 @@ static const AVOption showwaves_options[] = {
> { "log", "logarithmic",0, AV_OPT_TYPE_CONST, {.i64=SCALE_LOG}, 
> .flags=FLAGS, .unit="scale"},
> { "sqrt", "square root",   0, AV_OPT_TYPE_CONST, {.i64=SCALE_SQRT}, 
> .flags=FLAGS, .unit="scale"},
> { "cbrt", "cubic root",0, AV_OPT_TYPE_CONST, {.i64=SCALE_CBRT}, 
> .flags=FLAGS, .unit="scale"},
> +{ "grid", "draw grid", OFFSET(grid), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, 
> FLAGS },
> +{ "grid_color", "set grid color", OFFSET(grid_rgba), AV_OPT_TYPE_COLOR, 
> {.str="0x00"}, 0, 0, FLAGS },
> { NULL }
> };
> 
> @@ -562,6 +566,30 @@ static int alloc_out_frame(ShowWavesContext *showwaves, 
> const int16_t *p,
>   outlink->time_base);
> for (j = 0; j < outlink->h; j++)
> memset(out->data[0] + j*out->linesize[0], 0, outlink->w * 
> showwaves->pixstep);
> +
> +if (showwaves->grid) {
> +const int pixstep = showwaves->pixstep;
> +int ystep = showwaves->split_channels ? outlink->h / 
> inlink->channels / 4 : outlink->h / 4;
> +int channels = showwaves->split_channels ? inlink->channels : 1;
> +int x, s, c, yskip = 0;
> +
> +for (c = 0; c < channels; c++) {
> +for (j = 0; j < 4; j++) {
> +for (x = 0; x < outlink->w; x+=3) {
> +for (s = 0; s < pixstep; s++) {
> +out->data[0][(yskip + j * ystep) * 
> out->linesize[0] + x * pixstep + s] = showwaves->grid_rgba[s];
> +}
> +}
> +}
> +for (x = 0; x < outlink->w; x+=3) {
> +for (s = 0; s < pixstep; s++) {
> +out->data[0][(yskip + j * ystep - 1) * 
> out->linesize[0] + x * pixstep + s] = showwaves->grid_rgba[s];
> +}
> +}
> +
> +yskip += j * ystep;
> +}
> +}
> }
> return 0;
> }
> -- 
> 2.11.0

Seems interesting but do the gridlines convey any meaning? Perhaps a flags 
value too similar to waveform that should label the lines in dB or as a float. 
Also perhaps worth adjustment the placement of the gridlines depending on a 
scale (log vs lin).
Dave Rice

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH] avfilter/avf_showwaves: add draw grid support

2017-11-21 Thread Paul B Mahol
Signed-off-by: Paul B Mahol 
---
 doc/filters.texi|  6 ++
 libavfilter/avf_showwaves.c | 28 
 2 files changed, 34 insertions(+)

diff --git a/doc/filters.texi b/doc/filters.texi
index 62f633c6f8..9c98f1684b 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -19178,6 +19178,12 @@ Cubic root.
 @end table
 
 Default is linear.
+
+@item grid
+Draw grid, default is disabled.
+
+@item grid_color
+Set grid color.
 @end table
 
 @subsection Examples
diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
index 0866967984..74d4886cd4 100644
--- a/libavfilter/avf_showwaves.c
+++ b/libavfilter/avf_showwaves.c
@@ -69,6 +69,8 @@ typedef struct ShowWavesContext {
 int mode;   ///< ShowWavesMode
 int scale;  ///< ShowWavesScale
 int split_channels;
+int grid;
+uint8_t grid_rgba[4];
 uint8_t *fg;
 
 int (*get_h)(int16_t sample, int height);
@@ -104,6 +106,8 @@ static const AVOption showwaves_options[] = {
 { "log", "logarithmic",0, AV_OPT_TYPE_CONST, {.i64=SCALE_LOG}, 
.flags=FLAGS, .unit="scale"},
 { "sqrt", "square root",   0, AV_OPT_TYPE_CONST, {.i64=SCALE_SQRT}, 
.flags=FLAGS, .unit="scale"},
 { "cbrt", "cubic root",0, AV_OPT_TYPE_CONST, {.i64=SCALE_CBRT}, 
.flags=FLAGS, .unit="scale"},
+{ "grid", "draw grid", OFFSET(grid), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, 
FLAGS },
+{ "grid_color", "set grid color", OFFSET(grid_rgba), AV_OPT_TYPE_COLOR, 
{.str="0x00"}, 0, 0, FLAGS },
 { NULL }
 };
 
@@ -562,6 +566,30 @@ static int alloc_out_frame(ShowWavesContext *showwaves, 
const int16_t *p,
   outlink->time_base);
 for (j = 0; j < outlink->h; j++)
 memset(out->data[0] + j*out->linesize[0], 0, outlink->w * 
showwaves->pixstep);
+
+if (showwaves->grid) {
+const int pixstep = showwaves->pixstep;
+int ystep = showwaves->split_channels ? outlink->h / 
inlink->channels / 4 : outlink->h / 4;
+int channels = showwaves->split_channels ? inlink->channels : 1;
+int x, s, c, yskip = 0;
+
+for (c = 0; c < channels; c++) {
+for (j = 0; j < 4; j++) {
+for (x = 0; x < outlink->w; x+=3) {
+for (s = 0; s < pixstep; s++) {
+out->data[0][(yskip + j * ystep) * 
out->linesize[0] + x * pixstep + s] = showwaves->grid_rgba[s];
+}
+}
+}
+for (x = 0; x < outlink->w; x+=3) {
+for (s = 0; s < pixstep; s++) {
+out->data[0][(yskip + j * ystep - 1) * 
out->linesize[0] + x * pixstep + s] = showwaves->grid_rgba[s];
+}
+}
+
+yskip += j * ystep;
+}
+}
 }
 return 0;
 }
-- 
2.11.0

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel