[FFmpeg-cvslog] avfilter/avf_showwaves: cleanup and simplify some draw calls
Paul B Mahol
git at videolan.org
Tue May 30 17:55:13 EEST 2023
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Tue May 30 16:55:02 2023 +0200| [b01cfdb4ab1900f4908c2659f8c3f107fcd31605] | committer: Paul B Mahol
avfilter/avf_showwaves: cleanup and simplify some draw calls
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b01cfdb4ab1900f4908c2659f8c3f107fcd31605
---
libavfilter/avf_showwaves.c | 91 ++++++++++++++++++++-------------------------
1 file changed, 41 insertions(+), 50 deletions(-)
diff --git a/libavfilter/avf_showwaves.c b/libavfilter/avf_showwaves.c
index c0b9c8c88e..7597ee2723 100644
--- a/libavfilter/avf_showwaves.c
+++ b/libavfilter/avf_showwaves.c
@@ -28,6 +28,7 @@
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/channel_layout.h"
+#include "libavutil/intreadwrite.h"
#include "libavutil/opt.h"
#include "libavutil/parseutils.h"
#include "avfilter.h"
@@ -241,28 +242,26 @@ static void draw_sample_point_rgba_full(uint8_t *buf, int height, int linesize,
int16_t *prev_y,
const uint8_t color[4], int h)
{
- if (h >= 0 && h < height) {
- buf[h * linesize + 0] = color[0];
- buf[h * linesize + 1] = color[1];
- buf[h * linesize + 2] = color[2];
- buf[h * linesize + 3] = color[3];
- }
+ uint32_t clr = AV_RN32(color);
+ if (h >= 0 && h < height)
+ AV_WN32(buf + h * linesize, clr);
}
static void draw_sample_line_rgba_scale(uint8_t *buf, int height, int linesize,
int16_t *prev_y,
const uint8_t color[4], int h)
{
- int k;
int start = height/2;
int end = av_clip(h, 0, height-1);
+ uint8_t *bufk;
if (start > end)
FFSWAP(int16_t, start, end);
- for (k = start; k < end; k++) {
- buf[k * linesize + 0] += color[0];
- buf[k * linesize + 1] += color[1];
- buf[k * linesize + 2] += color[2];
- buf[k * linesize + 3] += color[3];
+ bufk = buf + start * linesize;
+ for (int k = start; k < end; k++, bufk += linesize) {
+ bufk[0] += color[0];
+ bufk[1] += color[1];
+ bufk[2] += color[2];
+ bufk[3] += color[3];
}
}
@@ -270,24 +269,21 @@ static void draw_sample_line_rgba_full(uint8_t *buf, int height, int linesize,
int16_t *prev_y,
const uint8_t color[4], int h)
{
- int k;
int start = height/2;
int end = av_clip(h, 0, height-1);
+ uint32_t clr = AV_RN32(color);
+ uint8_t *bufk;
if (start > end)
FFSWAP(int16_t, start, end);
- for (k = start; k < end; k++) {
- buf[k * linesize + 0] = color[0];
- buf[k * linesize + 1] = color[1];
- buf[k * linesize + 2] = color[2];
- buf[k * linesize + 3] = color[3];
- }
+ bufk = buf + start * linesize;
+ for (int k = start; k < end; k++, bufk += linesize)
+ AV_WN32(bufk, clr);
}
static void draw_sample_p2p_rgba_scale(uint8_t *buf, int height, int linesize,
int16_t *prev_y,
const uint8_t color[4], int h)
{
- int k;
if (h >= 0 && h < height) {
buf[h * linesize + 0] += color[0];
buf[h * linesize + 1] += color[1];
@@ -295,14 +291,16 @@ static void draw_sample_p2p_rgba_scale(uint8_t *buf, int height, int linesize,
buf[h * linesize + 3] += color[3];
if (*prev_y && h != *prev_y) {
int start = *prev_y;
+ uint8_t *bufk;
int end = av_clip(h, 0, height-1);
if (start > end)
FFSWAP(int16_t, start, end);
- for (k = start + 1; k < end; k++) {
- buf[k * linesize + 0] += color[0];
- buf[k * linesize + 1] += color[1];
- buf[k * linesize + 2] += color[2];
- buf[k * linesize + 3] += color[3];
+ bufk = buf + (start + 1) * linesize;
+ for (int k = start + 1; k < end; k++, bufk += linesize) {
+ bufk[0] += color[0];
+ bufk[1] += color[1];
+ bufk[2] += color[2];
+ bufk[3] += color[3];
}
}
}
@@ -313,23 +311,18 @@ static void draw_sample_p2p_rgba_full(uint8_t *buf, int height, int linesize,
int16_t *prev_y,
const uint8_t color[4], int h)
{
- int k;
+ uint32_t clr = AV_RN32(color);
if (h >= 0 && h < height) {
- buf[h * linesize + 0] = color[0];
- buf[h * linesize + 1] = color[1];
- buf[h * linesize + 2] = color[2];
- buf[h * linesize + 3] = color[3];
+ AV_WN32(buf + h * linesize, clr);
if (*prev_y && h != *prev_y) {
int start = *prev_y;
+ uint8_t *bufk;
int end = av_clip(h, 0, height-1);
if (start > end)
FFSWAP(int16_t, start, end);
- for (k = start + 1; k < end; k++) {
- buf[k * linesize + 0] = color[0];
- buf[k * linesize + 1] = color[1];
- buf[k * linesize + 2] = color[2];
- buf[k * linesize + 3] = color[3];
- }
+ bufk = buf + (start + 1) * linesize;
+ for (int k = start + 1; k < end; k++, bufk += linesize)
+ AV_WN32(bufk, clr);
}
}
*prev_y = h;
@@ -339,29 +332,27 @@ static void draw_sample_cline_rgba_scale(uint8_t *buf, int height, int linesize,
int16_t *prev_y,
const uint8_t color[4], int h)
{
- int k;
const int start = (height - h) / 2;
const int end = start + h;
- for (k = start; k < end; k++) {
- buf[k * linesize + 0] += color[0];
- buf[k * linesize + 1] += color[1];
- buf[k * linesize + 2] += color[2];
- buf[k * linesize + 3] += color[3];
+ uint8_t *bufk = buf + start * linesize;
+ for (int k = start; k < end; k++, bufk += linesize) {
+ bufk[0] += color[0];
+ bufk[1] += color[1];
+ bufk[2] += color[2];
+ bufk[3] += color[3];
}
}
- static void draw_sample_cline_rgba_full(uint8_t *buf, int height, int linesize,
+
+static void draw_sample_cline_rgba_full(uint8_t *buf, int height, int linesize,
int16_t *prev_y,
const uint8_t color[4], int h)
{
- int k;
+ uint32_t clr = AV_RN32(color);
const int start = (height - h) / 2;
const int end = start + h;
- for (k = start; k < end; k++) {
- buf[k * linesize + 0] = color[0];
- buf[k * linesize + 1] = color[1];
- buf[k * linesize + 2] = color[2];
- buf[k * linesize + 3] = color[3];
- }
+ uint8_t *bufk = buf + start * linesize;
+ for (int k = start; k < end; k++, bufk += linesize)
+ AV_WN32(bufk, clr);
}
static void draw_sample_point_gray(uint8_t *buf, int height, int linesize,
More information about the ffmpeg-cvslog
mailing list