[FFmpeg-devel] [PATCH] all: simplify qsort comparators, and add const-correctness
Ganesh Ajjanagadde
gajjanagadde at gmail.com
Sun Oct 25 02:02:11 CET 2015
All the comparator API needs is > 0, < 0, or = 0 signalling: it does not
need +1, -1, 0. This avoids some useless branching.
This also adds const-correctness when needed for the comparators.
Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
---
cmdutils_opencl.c | 2 +-
ffmpeg.c | 3 +--
libavfilter/f_sendcmd.c | 2 +-
libavfilter/vf_removegrain.c | 5 +----
libavformat/subtitles.c | 9 +++------
libswresample/swresample-test.c | 6 +++---
6 files changed, 10 insertions(+), 17 deletions(-)
diff --git a/cmdutils_opencl.c b/cmdutils_opencl.c
index 61478e2..d9095b6 100644
--- a/cmdutils_opencl.c
+++ b/cmdutils_opencl.c
@@ -206,7 +206,7 @@ end:
static int compare_ocl_device_desc(const void *a, const void *b)
{
- return ((OpenCLDeviceBenchmark*)a)->runtime - ((OpenCLDeviceBenchmark*)b)->runtime;
+ return ((const OpenCLDeviceBenchmark*)a)->runtime - ((const OpenCLDeviceBenchmark*)b)->runtime;
}
int opt_opencl_bench(void *optctx, const char *opt, const char *arg)
diff --git a/ffmpeg.c b/ffmpeg.c
index a19c816..26c5ae9 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -2578,8 +2578,7 @@ static InputStream *get_input_stream(OutputStream *ost)
static int compare_int64(const void *a, const void *b)
{
- int64_t va = *(int64_t *)a, vb = *(int64_t *)b;
- return va < vb ? -1 : va > vb ? +1 : 0;
+ return *(const int64_t *)a - *(const int64_t *)b;
}
static int init_output_stream(OutputStream *ost, char *error, int error_len)
diff --git a/libavfilter/f_sendcmd.c b/libavfilter/f_sendcmd.c
index 37aedc5..539be9c 100644
--- a/libavfilter/f_sendcmd.c
+++ b/libavfilter/f_sendcmd.c
@@ -367,7 +367,7 @@ static int cmp_intervals(const void *a, const void *b)
int64_t ts_diff = i1->start_ts - i2->start_ts;
int ret;
- ret = ts_diff > 0 ? 1 : ts_diff < 0 ? -1 : 0;
+ ret = ts_diff;
return ret == 0 ? i1->index - i2->index : ret;
}
diff --git a/libavfilter/vf_removegrain.c b/libavfilter/vf_removegrain.c
index da17f6a..f675edd 100644
--- a/libavfilter/vf_removegrain.c
+++ b/libavfilter/vf_removegrain.c
@@ -82,10 +82,7 @@ static int mode01(int c, int a1, int a2, int a3, int a4, int a5, int a6, int a7,
static int cmp_int(const void *p1, const void *p2)
{
- int left = *(const int *)p1;
- int right = *(const int *)p2;
-
- return ((left > right) - (left < right));
+ return *(const int *)p1 - *(const int *)p2;
}
static int mode02(int c, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8)
diff --git a/libavformat/subtitles.c b/libavformat/subtitles.c
index bb89766..1c1928b 100644
--- a/libavformat/subtitles.c
+++ b/libavformat/subtitles.c
@@ -146,12 +146,9 @@ static int cmp_pkt_sub_ts_pos(const void *a, const void *b)
{
const AVPacket *s1 = a;
const AVPacket *s2 = b;
- if (s1->pts == s2->pts) {
- if (s1->pos == s2->pos)
- return 0;
- return s1->pos > s2->pos ? 1 : -1;
- }
- return s1->pts > s2->pts ? 1 : -1;
+ if (s1->pts == s2->pts)
+ return s1->pos - s2->pos;
+ return s1->pts - s2->pts;
}
static int cmp_pkt_sub_pos_ts(const void *a, const void *b)
diff --git a/libswresample/swresample-test.c b/libswresample/swresample-test.c
index 9caa750..0aa47c8 100644
--- a/libswresample/swresample-test.c
+++ b/libswresample/swresample-test.c
@@ -138,8 +138,8 @@ static void setup_array(uint8_t *out[SWR_CH_MAX], uint8_t *in, enum AVSampleForm
}
}
-static int cmp(const int *a, const int *b){
- return *a - *b;
+static int cmp(const void *a, const void *b){
+ return *(const int *)a - *(const int *)b;
}
static void audiogen(void *data, enum AVSampleFormat sample_fmt,
@@ -271,7 +271,7 @@ int main(int argc, char **argv){
r = (seed * (uint64_t)(max_tests - test)) >>32;
FFSWAP(int, remaining_tests[r], remaining_tests[max_tests - test - 1]);
}
- qsort(remaining_tests + max_tests - num_tests, num_tests, sizeof(remaining_tests[0]), (void*)cmp);
+ qsort(remaining_tests + max_tests - num_tests, num_tests, sizeof(remaining_tests[0]), cmp);
in_sample_rate=16000;
for(test=0; test<num_tests; test++){
char in_layout_string[256];
--
2.6.2
More information about the ffmpeg-devel
mailing list