<html><head></head><body><div style="color:#000; background-color:#fff; font-family:Helvetica Neue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, Sans-Serif;font-size:16px"><div id="yui_3_16_0_ym19_1_1460486594994_10874"></div><div id="yui_3_16_0_ym19_1_1460486594994_11090" role="presentation"> <div id="yui_3_16_0_ym19_1_1460486594994_11091" tabindex="0"><div id="yui_3_16_0_ym19_1_1460486594994_11092"><div id="yui_3_16_0_ym19_1_1460486594994_11093"><div id="yui_3_16_0_ym19_1_1460486594994_11094"><div id="yui_3_16_0_ym19_1_1460486594994_11095" style="color:#000;background-color:#fff;font-family:Helvetica Neue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, Sans-Serif;font-size:16px;"><div id="yui_3_16_0_ym19_1_1460486594994_11096" dir="ltr">I
am in the middle of trying to add a VU Meter to my application but when
I try and convert the audio buffer from FLTP to S16 I get a crash and I
cannot see what im doing wrong. Now this code also fails in the demo
applications.</div><div id="yui_3_16_0_ym19_1_1460486594994_11097" dir="ltr"><br id="yui_3_16_0_ym19_1_1460486594994_11098"></div><div id="yui_3_16_0_ym19_1_1460486594994_11099" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11100">outputSettings->audio_channels = 2;</span></div><div id="yui_3_16_0_ym19_1_1460486594994_11101" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11102">outputSettings->audio_format = AV_SAMPLE_FMT_S16;</span></div><div id="yui_3_16_0_ym19_1_1460486594994_11103" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11104">outputSettings->audio_sample_rate = 32000;<br id="yui_3_16_0_ym19_1_1460486594994_11105"></span></div><div id="yui_3_16_0_ym19_1_1460486594994_11106" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11107"><br id="yui_3_16_0_ym19_1_1460486594994_11108"></span></div><div id="yui_3_16_0_ym19_1_1460486594994_11109" dir="ltr">This is the source file and its output</div><div id="yui_3_16_0_ym19_1_1460486594994_11110" dir="ltr">ffprobe version N-78956-g920f592 Copyright (c) 2007-2016 the FFmpeg developers<br id="yui_3_16_0_ym19_1_1460486594994_11111">Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'mv/ABC - The Look Of Love (1982).mp4':<br id="yui_3_16_0_ym19_1_1460486594994_11112"> Metadata:<br id="yui_3_16_0_ym19_1_1460486594994_11113"> major_brand : isom<br id="yui_3_16_0_ym19_1_1460486594994_11114"> minor_version : 1<br id="yui_3_16_0_ym19_1_1460486594994_11115"> compatible_brands: isomavc1<br id="yui_3_16_0_ym19_1_1460486594994_11116"> creation_time : 2011-08-31 10:04:04<br id="yui_3_16_0_ym19_1_1460486594994_11117"> Duration: 00:03:33.21, start: 0.000000, bitrate: 1114 kb/s<br id="yui_3_16_0_ym19_1_1460486594994_11118">
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p,
640x480 [SAR 1:1 DAR 4:3], 919 kb/s, 29.97 fps, 29.97 tbr, 120k tbn,
59.94 tbc (default)<br id="yui_3_16_0_ym19_1_1460486594994_11119"> Metadata:<br id="yui_3_16_0_ym19_1_1460486594994_11120"> creation_time : 2011-08-31 10:04:04<br id="yui_3_16_0_ym19_1_1460486594994_11121"> Stream #0:1(und): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, stereo, fltp, 192 kb/s (default)<br id="yui_3_16_0_ym19_1_1460486594994_11122"> Metadata:<br id="yui_3_16_0_ym19_1_1460486594994_11123"> creation_time : 2011-08-31 10:04:08<br id="yui_3_16_0_ym19_1_1460486594994_11124"> Side data:<br id="yui_3_16_0_ym19_1_1460486594994_11125"> audio service type: main</div><div id="yui_3_16_0_ym19_1_1460486594994_11126" dir="ltr"><br id="yui_3_16_0_ym19_1_1460486594994_11127"></div><div id="yui_3_16_0_ym19_1_1460486594994_11128" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11129">So I want the audio to be converted to S16 so I can use this as the output to the new stream and also processed as a VuMeter</span></div><div id="yui_3_16_0_ym19_1_1460486594994_11130" dir="ltr"><br id="yui_3_16_0_ym19_1_1460486594994_11131"><span id="yui_3_16_0_ym19_1_1460486594994_11132"></span></div><div id="yui_3_16_0_ym19_1_1460486594994_11133" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11134"> if( !inputSource->audio_scale_ctx) {<br id="yui_3_16_0_ym19_1_1460486594994_11135"> /* create resampler context */<br id="yui_3_16_0_ym19_1_1460486594994_11136"> inputSource->audio_scale_ctx = swr_alloc_set_opts(NULL,<br id="yui_3_16_0_ym19_1_1460486594994_11137"> av_get_default_channel_layout(outputSettings->audio_channels),<br id="yui_3_16_0_ym19_1_1460486594994_11138"> outputSettings->audio_format,<br id="yui_3_16_0_ym19_1_1460486594994_11139"> outputSettings->audio_sample_rate,<br id="yui_3_16_0_ym19_1_1460486594994_11140">
av_get_default_channel_layout(inputSource->fmt_ctx->streams[inputSource->audio_stream_idx]->codec->channels),<br id="yui_3_16_0_ym19_1_1460486594994_11141">
inputSource->fmt_ctx->streams[inputSource->audio_stream_idx]->codec->sample_fmt,<br id="yui_3_16_0_ym19_1_1460486594994_11142">
inputSource->fmt_ctx->streams[inputSource->audio_stream_idx]->codec->sample_rate,<br id="yui_3_16_0_ym19_1_1460486594994_11143"> 0, NULL);<br id="yui_3_16_0_ym19_1_1460486594994_11144"><br id="yui_3_16_0_ym19_1_1460486594994_11145"> /* initialize the resampling context */<br id="yui_3_16_0_ym19_1_1460486594994_11146"> if ( swr_init(inputSource->audio_scale_ctx)<0) {<br id="yui_3_16_0_ym19_1_1460486594994_11147"> fprintf(stderr, "Failed to initialize the resampling context\n");<br id="yui_3_16_0_ym19_1_1460486594994_11148"> exit(1);<br id="yui_3_16_0_ym19_1_1460486594994_11149"></span></div><div id="yui_3_16_0_ym19_1_1460486594994_11150" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11151"> }<br id="yui_3_16_0_ym19_1_1460486594994_11152"> printf( "Tile audio resampling from %d:%d:%s to %d:%d:%s\n",<br id="yui_3_16_0_ym19_1_1460486594994_11153"> inputSource->fmt_ctx->streams[inputSource->audio_stream_idx]->codec->channels,<br id="yui_3_16_0_ym19_1_1460486594994_11154"> inputSource->fmt_ctx->streams[inputSource->audio_stream_idx]->codec->sample_rate,<br id="yui_3_16_0_ym19_1_1460486594994_11155">
audioFormats[inputSource->fmt_ctx->streams[inputSource->audio_stream_idx]->codec->sample_fmt].name,<br id="yui_3_16_0_ym19_1_1460486594994_11156"> outputSettings->audio_channels,<br id="yui_3_16_0_ym19_1_1460486594994_11157"> outputSettings->audio_sample_rate,<br id="yui_3_16_0_ym19_1_1460486594994_11158"> audioFormats[outputSettings->audio_format].name);<br id="yui_3_16_0_ym19_1_1460486594994_11159"> }<br id="yui_3_16_0_ym19_1_1460486594994_11160"><br id="yui_3_16_0_ym19_1_1460486594994_11161">
dst_nb_samples =
av_rescale_rnd(swr_get_delay(inputSource->audio_scale_ctx,
inputSource->audio_dec_ctx->sample_rate) + frame->nb_samples,<br id="yui_3_16_0_ym19_1_1460486594994_11162">
outputSettings->audio_sample_rate,
inputSource->audio_dec_ctx->sample_rate, AV_ROUND_UP);<br id="yui_3_16_0_ym19_1_1460486594994_11163"><br id="yui_3_16_0_ym19_1_1460486594994_11164"> if( dst_nb_samples>inputSource->audio_frame_size) {<br id="yui_3_16_0_ym19_1_1460486594994_11165"> if( inputSource->audio_frame)<br id="yui_3_16_0_ym19_1_1460486594994_11166"> av_frame_free(&inputSource->audio_frame);<br id="yui_3_16_0_ym19_1_1460486594994_11167">
inputSource->audio_frame =
alloc_audio_frame(outputSettings->audio_format,
outputSettings->audio_channels, outputSettings->audio_sample_rate,
dst_nb_samples);<br id="yui_3_16_0_ym19_1_1460486594994_11168">// inputSource->audio_frame_size = dst_nb_samples;<br id="yui_3_16_0_ym19_1_1460486594994_11169">
printf( "Tile audio resampling frame size changed from %d to %d\r\n",
inputSource->audio_frame_size, dst_nb_samples);<br id="yui_3_16_0_ym19_1_1460486594994_11170"></span></div><div id="yui_3_16_0_ym19_1_1460486594994_11171" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11172"> }<br id="yui_3_16_0_ym19_1_1460486594994_11173"> else if( !inputSource->audio_frame_size) {<br id="yui_3_16_0_ym19_1_1460486594994_11174">
inputSource->audio_frame =
alloc_audio_frame(outputSettings->audio_format,
outputSettings->audio_channels, outputSettings->audio_sample_rate,
dst_nb_samples);<br id="yui_3_16_0_ym19_1_1460486594994_11175">// inputSource->audio_frame_size = dst_nb_samples;<br id="yui_3_16_0_ym19_1_1460486594994_11176">
printf( "Tile audio resampling frame size changed from %d to %d\r\n",
inputSource->audio_frame_size, dst_nb_samples);<br id="yui_3_16_0_ym19_1_1460486594994_11177"> }<br id="yui_3_16_0_ym19_1_1460486594994_11178"><br id="yui_3_16_0_ym19_1_1460486594994_11179"> if( av_frame_make_writable(inputSource->audio_frame)<0) {<br id="yui_3_16_0_ym19_1_1460486594994_11180"> exit(1);<br id="yui_3_16_0_ym19_1_1460486594994_11181"> }<br id="yui_3_16_0_ym19_1_1460486594994_11182"><br id="yui_3_16_0_ym19_1_1460486594994_11183"> /* convert to destination format */<br id="yui_3_16_0_ym19_1_1460486594994_11184"> printf( "%p %p %d %p %d\n",<br id="yui_3_16_0_ym19_1_1460486594994_11185">
inputSource->audio_scale_ctx, inputSource->audio_frame->data,
inputSource->audio_frame->nb_samples,<br id="yui_3_16_0_ym19_1_1460486594994_11186"> (const uint8_t **)frame->data, frame->nb_samples);<br id="yui_3_16_0_ym19_1_1460486594994_11187"><br id="yui_3_16_0_ym19_1_1460486594994_11188"> /* convert to destination format */<br id="yui_3_16_0_ym19_1_1460486594994_11189">
ret = swr_convert(inputSource->audio_scale_ctx,
inputSource->audio_frame->data,
inputSource->audio_frame->nb_samples,<br id="yui_3_16_0_ym19_1_1460486594994_11190"> (const uint8_t **)frame->data, frame->nb_samples);<br id="yui_3_16_0_ym19_1_1460486594994_11191"> if (ret < 0) {<br id="yui_3_16_0_ym19_1_1460486594994_11192"> fprintf(stderr, "Error while converting\n");<br id="yui_3_16_0_ym19_1_1460486594994_11193"> exit(1);<br id="yui_3_16_0_ym19_1_1460486594994_11194"> }</span></div><div id="yui_3_16_0_ym19_1_1460486594994_11195" dir="ltr"><br id="yui_3_16_0_ym19_1_1460486594994_11196"><span id="yui_3_16_0_ym19_1_1460486594994_11197"></span></div><div id="yui_3_16_0_ym19_1_1460486594994_11198" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11199">output from the above with debug</span></div><div id="yui_3_16_0_ym19_1_1460486594994_11200" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11201">Tile audio resampling from 2:48000:FLTP to 2:32000:S16<br id="yui_3_16_0_ym19_1_1460486594994_11202">Tile audio resampling frame size changed from 0 to 1024<br id="yui_3_16_0_ym19_1_1460486594994_11203">0x7f24b40008c0 0x7f24b4045bc0 1024 0x7f24f46b49c0 1536</span></div><div id="yui_3_16_0_ym19_1_1460486594994_11204" dir="ltr">*** Error in `./generator': double free or corruption (!prev): 0x00007f24b4045e00 ***</div><div id="yui_3_16_0_ym19_1_1460486594994_11205" dir="ltr"><br id="yui_3_16_0_ym19_1_1460486594994_11206"></div><div id="yui_3_16_0_ym19_1_1460486594994_11207" dir="ltr">Now in Valgrind i get the following stack trace</div><div id="yui_3_16_0_ym19_1_1460486594994_11208" dir="ltr">==13145== Thread 23:<br id="yui_3_16_0_ym19_1_1460486594994_11209">==13145== Invalid write of size 8<br id="yui_3_16_0_ym19_1_1460486594994_11210">==13145== at 0xD4EDBF: ff_pack_2ch_float_to_int16_a_sse2 (audio_convert.asm:667)<br id="yui_3_16_0_ym19_1_1460486594994_11211">==13145== by 0xD49279: swri_audio_convert (audioconvert.c:207)<br id="yui_3_16_0_ym19_1_1460486594994_11212">==13145== by 0xD45881: swr_convert_internal.part.3 (swresample.c:686)<br id="yui_3_16_0_ym19_1_1460486594994_11213">==13145== by 0xD4652B: swr_convert_internal (swresample.c:783)<br id="yui_3_16_0_ym19_1_1460486594994_11214">==13145== by 0xD4652B: swr_convert (swresample.c:747)<br id="yui_3_16_0_ym19_1_1460486594994_11215">==13145== by 0x47551E: inputThreadAudio (generator.c:2106)<br id="yui_3_16_0_ym19_1_1460486594994_11216">==13145== by 0x7900181: start_thread (pthread_create.c:312)<br id="yui_3_16_0_ym19_1_1460486594994_11217">==13145== by 0x7F7747C: clone (clone.S:111)<br id="yui_3_16_0_ym19_1_1460486594994_11218">==13145== Address 0x1ee85080 is 0 bytes after a block of size 2,048 alloc'd<br id="yui_3_16_0_ym19_1_1460486594994_11219">==13145== at 0x4C2D110: memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)<br id="yui_3_16_0_ym19_1_1460486594994_11220">==13145== by 0x4C2D227: posix_memalign (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)<br id="yui_3_16_0_ym19_1_1460486594994_11221">==13145== by 0xDCAA39: av_malloc (mem.c:97)<br id="yui_3_16_0_ym19_1_1460486594994_11222">==13145== by 0xDBA917: av_buffer_alloc (buffer.c:71)<br id="yui_3_16_0_ym19_1_1460486594994_11223">==13145== by 0xDC4401: get_audio_buffer (frame.c:251)<br id="yui_3_16_0_ym19_1_1460486594994_11224">==13145== by 0xDC4401: av_frame_get_buffer (frame.c:278)<br id="yui_3_16_0_ym19_1_1460486594994_11225">==13145== by 0x475DF3: alloc_audio_frame (generator.c:3023)<br id="yui_3_16_0_ym19_1_1460486594994_11226">==13145== by 0x4753DF: inputThreadAudio (generator.c:2086)<br id="yui_3_16_0_ym19_1_1460486594994_11227">==13145== by 0x7900181: start_thread (pthread_create.c:312)<br id="yui_3_16_0_ym19_1_1460486594994_11228">==13145== by 0x7F7747C: clone (clone.S:111)<br id="yui_3_16_0_ym19_1_1460486594994_11229"></div><div id="yui_3_16_0_ym19_1_1460486594994_11230" dir="ltr"><br id="yui_3_16_0_ym19_1_1460486594994_11231"><span id="yui_3_16_0_ym19_1_1460486594994_11232"></span></div><div id="yui_3_16_0_ym19_1_1460486594994_11233" dir="ltr"><span id="yui_3_16_0_ym19_1_1460486594994_11234">Anybody see my silly mistake as I cant.</span></div><div id="yui_3_16_0_ym19_1_1460486594994_11235"> </div><div id="yui_3_16_0_ym19_1_1460486594994_11236">Joolz</div></div></div></div></div></div><div dir="ltr"> </div></div><div> </div><div class="signature">Joolz</div></div></body></html>