Oh, fft_r[] and fft_l[] are similar memory areas from calloc which
hold the FFT output data once it's moved from the fft3w output array.
I pick left and right channels out of the PCM data and FFT them
individually, then plot them separately on the same frame image.

On 5/6/21, Alan Corey <alan01...@gmail.com> wrote:
> This is under Debian Bullseye Linux on a PineBook Pro so ARM 64-bit I
> think although sizeof(int) is still 4.   It's a fairly complicated
> program at 750 lines in it's almost-done state so I'm not posting the
> whole thing.  I have this program that does audiograms
> https://sourceforge.net/projects/audiogram-c/ and I got the bright
> idea of adding FFT plots to the video generated.  I read a wav file
> into RAM, draw the envelope of the audio.  Then move a cursor bar over
> it by generating frames at different times, saving as jpegs and
> calling ffmpeg at the end to make a video.  Originally it was a
> work-around for not being able to post audio files to social media
> sites.
>
> The FFT version works with the PCM data in the wav file in memory and
> draws more onto the same frames.  tmpbuf is a per-frame output drawing
> area allocated with calloc and then cleared with bzero but I still get
> these uninitialized warnings:
>
> ==26220==
> ==26220== Invalid write of size 1
> ==26220==    at 0x402460: plot (agf.c:573)
> ==26220==    by 0x402B9F: main (agf.c:713)
> ==26220==  Address 0x4d2b993 is 13 bytes before an unallocated block
> of size 3,278,400 in arena "client"
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x401504: plotffts (agf.c:301)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x40153C: plotffts (agf.c:303)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x401598: plotffts (agf.c:307)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x4015D0: plotffts (agf.c:309)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x40165C: plotffts (agf.c:315)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x401678: plotffts (agf.c:317)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x4016E0: plotffts (agf.c:328)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x4016F8: plotffts (agf.c:329)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x401710: plotffts (agf.c:330)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x401788: plotffts (agf.c:337)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Conditional jump or move depends on uninitialised value(s)
> ==26220==    at 0x4017A4: plotffts (agf.c:339)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x4017EC: plotffts (agf.c:342)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Invalid write of size 1
> ==26220==    at 0x4017EC: plotffts (agf.c:342)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Address 0x4dbb9dc is 4 bytes before an unallocated block of
> size 2,688,512 in arena "client"
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x401804: plotffts (agf.c:343)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Invalid write of size 1
> ==26220==    at 0x401804: plotffts (agf.c:343)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Address 0x4dbb9dd is 3 bytes before an unallocated block of
> size 2,688,512 in arena "client"
> ==26220==
> ==26220== Use of uninitialised value of size 8
> ==26220==    at 0x40181C: plotffts (agf.c:344)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Uninitialised value was created by a heap allocation
> ==26220==    at 0x4849E4C: malloc (vg_replace_malloc.c:307)
> ==26220==    by 0x40125B: fft_init (agf.c:173)
> ==26220==    by 0x402B63: main (agf.c:707)
> ==26220==
> ==26220== Invalid write of size 1
> ==26220==    at 0x40181C: plotffts (agf.c:344)
> ==26220==    by 0x401DDF: makeframes (agf.c:442)
> ==26220==    by 0x402BA3: main (agf.c:714)
> ==26220==  Address 0x4dbb9de is 2 bytes before an unallocated block of
> size 2,688,512 in arena "client"
> ==26220==
>
> The invalid writes I can't figure out either.  The code section looks like
> this:
>
> void plotffts(void) { // draw to tmpbuf
>   int i = 0; // initialize everything for Valgrind
>   int ofs = 0;
>   float min = -99999.9;  // floats work better
>   float max = 99999.9;
>   int x = EDGESKIP; // start at left side
>   int y = 0;
>   int oldx = EDGESKIP;
>   int oldy = 0;
>   int first = 1;
>   half = HEIGHT/2; // redundant
>   for (i=EDGESKIP; i<(FFTSIZE-EDGESKIP); i++) { // common values for both
> L&R
>     if (fft_r[i] < min)  // unitialized value
>       min = fft_r[i];
>     if (fft_r[i] > max) // something not initialized
>       max = fft_r[i];
>   }
>   for (i=EDGESKIP; i<(FFTSIZE-EDGESKIP); i++) { // read other channel
>     if (fft_l[i] > max) // uninit
>       max = fft_l[i];
>     if (fft_l[i] < min) // uninit
>       min = fft_l[i];
>   }
>   for (i=EDGESKIP; i<(FFTSIZE-EDGESKIP); i++) {  // right channel
>     x = i;  // correct?
>     y = ((fft_r[i] - min) / max) * half;
>     if (y > half) // uninit
>       y = half;
>     if (y < 0) // uninit
>       y = 0;
>     if (first > 0) {
>       oldy = y;
>       first = 0;
>     }
> //    line(oldx,oldy,x,y);
>     oldx = x;
>     oldy = y;
> ///*
>     ofs = (y * WIDTH * 3) + (x * 3);
>     tmpbuf[ofs] = 0x01;  // Use of uninitialised value of size 8
>     tmpbuf[ofs+1] = 0xf5; // Use of uninitialised value of size 8
>     tmpbuf[ofs+2] = 0xf6; // Use of uninitialised value of size 8
> //*/
>   }
>   oldx = EDGESKIP;
>   for (i=EDGESKIP; i<(FFTSIZE-EDGESKIP); i++) {  // left channel
>     x = i;
>     y = ((fft_l[i] - min) / max) * half;
>     if (y > half)  // uninit
>       y = half;
>     if (y < 0) // uninit
>       y = 0;
>     ofs = ((y + half)* WIDTH * 3) + (x * 3);
>     tmpbuf[ofs] = 0x01; // uninitialised value of size 8 & Invalid
> write of size 1
>     tmpbuf[ofs+1] = 0xf5;  // uninitialised value of size 8 & Invalid
> write of size 1
>     tmpbuf[ofs+2] = 0xf6; // uninitialised value of size 8 & Invalid
> write of size 1
>   }
>   // lines instead of dots would work better
> }
>
> I've looked up the line numbers given in the Valgrind error messages
> and put comments on those lines above.  tmpbuf is where I'm doing
> graphics, it's a chunk of RAM from calloc with an int8_t  pointer
> making it accessible.  It's not live graphics but a buffer of 24-bit
> color values which get written out to jpegs.  Maybe I should use
> 32-bit color?  This code does work, but I'm adding to it (Bresenham
> line drawing) and the error messages are distracting me from errors in
> the new code I'm working on.  My hunch is that something is still
> incomplete in Valgrind on aarch64 platforms.
>
>   Alan
> --
> -------------
> Education is contagious.
>


-- 
-------------
Education is contagious.


_______________________________________________
Valgrind-users mailing list
Valgrind-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-users

Reply via email to