diff mbox

[FFmpeg-devel,2/2] avfilter/ebur128: fix relative threshold calculation for multiple contexts

Message ID 20170125005725.16675-2-cus@passwd.hu
State Superseded
Headers show

Commit Message

Marton Balint Jan. 25, 2017, 12:57 a.m. UTC
Also disallow NULL contexts.

Fixes Coverity CID 1396273, 1396279.

Signed-off-by: Marton Balint <cus@passwd.hu>
---
 libavfilter/ebur128.c | 40 +++++++++++++++++++---------------------
 1 file changed, 19 insertions(+), 21 deletions(-)

Comments

Marton Balint Jan. 30, 2017, 11:49 p.m. UTC | #1
On Wed, 25 Jan 2017, Marton Balint wrote:

> Also disallow NULL contexts.
>
> Fixes Coverity CID 1396273, 1396279.
>
> Signed-off-by: Marton Balint <cus@passwd.hu>
> ---
> libavfilter/ebur128.c | 40 +++++++++++++++++++---------------------
> 1 file changed, 19 insertions(+), 21 deletions(-)
>
> diff --git a/libavfilter/ebur128.c b/libavfilter/ebur128.c
> index 012df54..e064c59 100644
> --- a/libavfilter/ebur128.c
> +++ b/libavfilter/ebur128.c
> @@ -519,49 +519,45 @@ FF_EBUR128_ADD_FRAMES(int)
> FF_EBUR128_ADD_FRAMES(float)
> FF_EBUR128_ADD_FRAMES(double)
> 
> -static int ebur128_calc_relative_threshold(FFEBUR128State * st,
> +static void ebur128_sum_relative_threshold(FFEBUR128State * st,
>                                            size_t * above_thresh_counter,
>                                            double *relative_threshold)
> {
>     size_t i;
> -    *relative_threshold = 0.0;
> -    *above_thresh_counter = 0;
>
>     for (i = 0; i < 1000; ++i) {
>         *relative_threshold += st->d->block_energy_histogram[i] *
>             histogram_energies[i];
>         *above_thresh_counter += st->d->block_energy_histogram[i];
>     }
> +}
> 
> +static void ebur128_finalize_relative_threshold(size_t *above_thresh_counter,
> +                                                double *relative_threshold)
> +{
>     if (*above_thresh_counter != 0) {
>         *relative_threshold /= (double) *above_thresh_counter;
>         *relative_threshold *= RELATIVE_GATE_FACTOR;
>     }
> -
> -    return 0;
> }
> 
> static int ebur128_gated_loudness(FFEBUR128State ** sts, size_t size,
>                                   double *out)
> {
>     double gated_loudness = 0.0;
> -    double relative_threshold;
> -    size_t above_thresh_counter;
> +    double relative_threshold = 0.0;
> +    size_t above_thresh_counter = 0;
>     size_t i, j, start_index;
> 
> -    for (i = 0; i < size; i++) {
> -        if (sts[i]
> -            && (sts[i]->mode & FF_EBUR128_MODE_I) != FF_EBUR128_MODE_I) {
> +    for (i = 0; i < size; i++)
> +        if ((sts[i]->mode & FF_EBUR128_MODE_I) != FF_EBUR128_MODE_I)
>             return AVERROR(EINVAL);
> -        }
> -    }
> 
> -    for (i = 0; i < size; i++) {
> -        if (!sts[i])
> -            continue;
> -        ebur128_calc_relative_threshold(sts[i], &above_thresh_counter,
> +    for (i = 0; i < size; i++)
> +        ebur128_sum_relative_threshold(sts[i], &above_thresh_counter,
> +                                       &relative_threshold);
> +    ebur128_finalize_relative_threshold(&above_thresh_counter,
>                                         &relative_threshold);
> -    }
>     if (!above_thresh_counter) {
>         *out = -HUGE_VAL;
>         return 0;
> @@ -596,14 +592,16 @@ static int ebur128_gated_loudness(FFEBUR128State ** sts, size_t size,
> 
> int ff_ebur128_relative_threshold(FFEBUR128State * st, double *out)
> {
> -    double relative_threshold;
> -    size_t above_thresh_counter;
> +    double relative_threshold = 0.0;
> +    size_t above_thresh_counter = 0;
>
>     if ((st->mode & FF_EBUR128_MODE_I) != FF_EBUR128_MODE_I)
>         return AVERROR(EINVAL);
> 
> -    ebur128_calc_relative_threshold(st, &above_thresh_counter,
> -                                    &relative_threshold);
> +    ebur128_sum_relative_threshold(st, &above_thresh_counter,
> +                                   &relative_threshold);
> +    ebur128_finalize_relative_threshold(&above_thresh_counter,
> +                                        &relative_threshold);
>
>     if (!above_thresh_counter) {
>         *out = -70.0;
> -- 
> 2.10.2

Ping...

Thanks,
Marton
diff mbox

Patch

diff --git a/libavfilter/ebur128.c b/libavfilter/ebur128.c
index 012df54..e064c59 100644
--- a/libavfilter/ebur128.c
+++ b/libavfilter/ebur128.c
@@ -519,49 +519,45 @@  FF_EBUR128_ADD_FRAMES(int)
 FF_EBUR128_ADD_FRAMES(float)
 FF_EBUR128_ADD_FRAMES(double)
 
-static int ebur128_calc_relative_threshold(FFEBUR128State * st,
+static void ebur128_sum_relative_threshold(FFEBUR128State * st,
                                            size_t * above_thresh_counter,
                                            double *relative_threshold)
 {
     size_t i;
-    *relative_threshold = 0.0;
-    *above_thresh_counter = 0;
 
     for (i = 0; i < 1000; ++i) {
         *relative_threshold += st->d->block_energy_histogram[i] *
             histogram_energies[i];
         *above_thresh_counter += st->d->block_energy_histogram[i];
     }
+}
 
+static void ebur128_finalize_relative_threshold(size_t *above_thresh_counter,
+                                                double *relative_threshold)
+{
     if (*above_thresh_counter != 0) {
         *relative_threshold /= (double) *above_thresh_counter;
         *relative_threshold *= RELATIVE_GATE_FACTOR;
     }
-
-    return 0;
 }
 
 static int ebur128_gated_loudness(FFEBUR128State ** sts, size_t size,
                                   double *out)
 {
     double gated_loudness = 0.0;
-    double relative_threshold;
-    size_t above_thresh_counter;
+    double relative_threshold = 0.0;
+    size_t above_thresh_counter = 0;
     size_t i, j, start_index;
 
-    for (i = 0; i < size; i++) {
-        if (sts[i]
-            && (sts[i]->mode & FF_EBUR128_MODE_I) != FF_EBUR128_MODE_I) {
+    for (i = 0; i < size; i++)
+        if ((sts[i]->mode & FF_EBUR128_MODE_I) != FF_EBUR128_MODE_I)
             return AVERROR(EINVAL);
-        }
-    }
 
-    for (i = 0; i < size; i++) {
-        if (!sts[i])
-            continue;
-        ebur128_calc_relative_threshold(sts[i], &above_thresh_counter,
+    for (i = 0; i < size; i++)
+        ebur128_sum_relative_threshold(sts[i], &above_thresh_counter,
+                                       &relative_threshold);
+    ebur128_finalize_relative_threshold(&above_thresh_counter,
                                         &relative_threshold);
-    }
     if (!above_thresh_counter) {
         *out = -HUGE_VAL;
         return 0;
@@ -596,14 +592,16 @@  static int ebur128_gated_loudness(FFEBUR128State ** sts, size_t size,
 
 int ff_ebur128_relative_threshold(FFEBUR128State * st, double *out)
 {
-    double relative_threshold;
-    size_t above_thresh_counter;
+    double relative_threshold = 0.0;
+    size_t above_thresh_counter = 0;
 
     if ((st->mode & FF_EBUR128_MODE_I) != FF_EBUR128_MODE_I)
         return AVERROR(EINVAL);
 
-    ebur128_calc_relative_threshold(st, &above_thresh_counter,
-                                    &relative_threshold);
+    ebur128_sum_relative_threshold(st, &above_thresh_counter,
+                                   &relative_threshold);
+    ebur128_finalize_relative_threshold(&above_thresh_counter,
+                                        &relative_threshold);
 
     if (!above_thresh_counter) {
         *out = -70.0;