On 28/04/15 16:50, Vittorio Giovara wrote:
> This avoids allocating memory at every function call, checking its
> return value, and carry the error around.
> ---
>  libavcodec/flacenc.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/libavcodec/flacenc.c b/libavcodec/flacenc.c
> index 2277cf3..804333d 100644
> --- a/libavcodec/flacenc.c
> +++ b/libavcodec/flacenc.c
> @@ -67,6 +67,7 @@ typedef struct RiceContext {
>      enum CodingMode coding_mode;
>      int porder;
>      int params[MAX_PARTITIONS];
> +    uint32_t udata[FLAC_MAX_BLOCKSIZE];
>  } RiceContext;
>  
>  typedef struct FlacSubframe {
> @@ -616,7 +617,6 @@ static uint64_t calc_rice_params(RiceContext *rc, int 
> pmin, int pmax,
>      uint64_t bits[MAX_PARTITION_ORDER+1];
>      int opt_porder;
>      RiceContext tmp_rc;
> -    uint32_t *udata;
>      uint64_t sums[MAX_PARTITION_ORDER + 1][MAX_PARTITIONS] = { { 0 } };
>  
>      assert(pmin >= 0 && pmin <= MAX_PARTITION_ORDER);
> @@ -625,11 +625,10 @@ static uint64_t calc_rice_params(RiceContext *rc, int 
> pmin, int pmax,
>  
>      tmp_rc.coding_mode = rc->coding_mode;
>  
> -    udata = av_malloc(n * sizeof(uint32_t));
>      for (i = 0; i < n; i++)
> -        udata[i] = (2*data[i]) ^ (data[i]>>31);
> +        rc->udata[i] = (2 * data[i]) ^ (data[i] >> 31);
>  
> -    calc_sums(pmin, pmax, udata, n, pred_order, sums);
> +    calc_sums(pmin, pmax, rc->udata, n, pred_order, sums);
>  
>      opt_porder = pmin;
>      bits[pmin] = UINT32_MAX;
> @@ -641,7 +640,6 @@ static uint64_t calc_rice_params(RiceContext *rc, int 
> pmin, int pmax,
>          }
>      }
>  
> -    av_freep(&udata);
>      return bits[opt_porder];
>  }
>  
> 

Fine for me if oracles is happy after the change (and we have a test for
encoding flac).

lu
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to