[08:56:21 CET] <skident> hi, does anybody have build an ffmpeg library for windows 10 using MSVC 2017? [09:01:38 CET] <skident> I tried to use this guide https://trac.ffmpeg.org/wiki/CompilationGuide/WinRT, but paths are different from VS2015 [11:33:31 CET] <cslcm> Hi everyone - I have a big memory leak in this program: https://pastebin.com/raw/3X5h9YiK centered around av_bitstream_filter_filter - if i remove this call there is no leak. Could someone take a look and tell me if i'm handling resources incorrectly? [12:07:34 CET] <skident> \cslcm have you checked a return value from av_bitstream_filter_filter (int a = )? [12:10:36 CET] <skident> cslcm: have you checked a return value from av_bitstream_filter_filter (int a = )? [12:16:18 CET] <cslcm> the return value is always 1 [13:20:51 CET] <skident> how does this memleak looks like? It eats memory on each call of av_bitstream_filter_filter and doesn't free memory at all& [13:20:52 CET] <skident> ? [13:24:20 CET] <cslcm> right, it quickly fills up to gigabytes of allocations [13:24:48 CET] <cslcm> I posted a question on stackoverflow including valgrind output https://stackoverflow.com/questions/53498403/av-bitstream-filter-filter-memo... [13:25:21 CET] <cslcm> i suspect the leak may be internal to ffmpeg [13:25:37 CET] <BtbN> Unlikely, that functions is used a lot. [13:25:49 CET] <cslcm> with h264_mp4toannexb? [13:25:52 CET] <BtbN> yes [13:25:58 CET] <BtbN> it's auto-inserted whenever it's needed [13:26:51 CET] <cslcm> i could try with ffmpeg itself, is there a command line option to tell it to keep looping the input indefinitely [13:26:59 CET] <BtbN> -loop [13:27:05 CET] <cslcm> hah [13:27:07 CET] <cslcm> fancy that [13:28:23 CET] <BtbN> But I see your leek [13:28:26 CET] <BtbN> https://github.com/FFmpeg/FFmpeg/blob/0c14b73e435cf3373df7bca149e665d4e6b80a... [13:28:38 CET] <BtbN> av_free_packet only frees buffers, not raw data on the packet [13:28:48 CET] <BtbN> *leak [13:29:45 CET] <BtbN> so your pkt2 is never freed [13:31:47 CET] <cslcm> but it's reused [13:31:59 CET] <BtbN> doesn't matter [13:32:00 CET] <cslcm> so it will leak once [13:32:17 CET] <BtbN> each call to av_bitstream_filter_filter calls malloc and assigns the result to pkt2.data [13:32:29 CET] <BtbN> And you just overwrite it with NULL again, never freeing it [13:32:40 CET] <cslcm> ah right, how do i free that data? [13:32:47 CET] <cslcm> literally just free? [13:32:51 CET] <BtbN> av_free [13:32:54 CET] <cslcm> ok [13:32:57 CET] <cslcm> will try that, thanks [13:33:08 CET] <BtbN> av_freep(&pkt.data) ideally [13:33:45 CET] <BtbN> You probably shouldn't use a packet there [13:34:05 CET] <BtbN> Or take a look at how the legacy compat code handles it: https://github.com/FFmpeg/FFmpeg/blob/f72b9904fefa79d799d0f6ecc8bd97ce526587... [13:36:33 CET] <BtbN> av_free_packet is also deprecated and should not be used. Use unref instead [13:37:50 CET] <cslcm> should i be freeing the data and the packet on each iteration? [13:37:53 CET] <cslcm> or just the data? [13:40:27 CET] <BtbN> The whole API you are using is deprecated btw. [13:40:45 CET] <BtbN> You should be using the av_bsf_* API instead [13:40:50 CET] <cslcm> I'm only following the examples on the ffmpeg website heh [13:40:53 CET] <cslcm> this is new to me [13:41:26 CET] <BtbN> https://www.ffmpeg.org/doxygen/trunk/group__lavc__misc.html#ga511d9ec0593e70... [13:41:48 CET] <cslcm> is there an example anywhere showing how to do it the new way? [13:42:37 CET] <BtbN> plenty all over the ffmpeg codebase. [13:42:44 CET] <BtbN> Search for av_bsf_ for example in http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavcodec/cuviddec.c [13:44:02 CET] <cslcm> looks like it's av_freep i needed and not av_free. and if i also try to av_free_packet it complains of a double-free. [13:44:15 CET] <cslcm> but the leak is fixed, thanks for your help [13:44:21 CET] <cslcm> i'll look into the new api [13:44:22 CET] <BtbN> av_free and av_freep do the same, but freep sets the pointer to NULL [13:44:41 CET] <BtbN> av_free(v); v = NULL; is equivalent to av_freep(&v); [13:45:45 CET] <cslcm> hm, that's very weird, because I am setting data to null after ever free... but free results in "munmap_chunk(): invalid pointer" whereas freep does not [13:46:18 CET] <BtbN> You're doing something wrong then [13:50:42 CET] <BtbN> The new API is way less prone to this btw. [13:50:54 CET] <cslcm> if av_free_packet doesn't free the packet data then why does it result in a double free when i try to free both [13:51:17 CET] <BtbN> You are freeing something you are not supposed to free I guess [13:51:29 CET] <BtbN> but really, use the new API, it makes a whole lot more sense [13:51:42 CET] <BtbN> And avoid that issue entirely [13:51:56 CET] <cslcm> i'm trying to find some actual examples [13:52:49 CET] <cslcm> anyway, thanks for your help :) I appreciate it [13:55:46 CET] <BtbN> The new API is fairly self-explanatory [13:55:58 CET] <BtbN> Why do you even want to use it directly? Usually the encoders that need it do it themselves [13:58:02 CET] <cslcm> openmaxil on the raspberry pi requires h264 data in this format [13:58:55 CET] <cslcm> interestingly none of the examples i could find on the web which use this filter free the frame data with av_free [13:59:00 CET] <cslcm> so they all leak i guess [14:16:00 CET] <cslcm> BtbN: So it appears that av_free is only necessary on the output from av_bitstream_filter_filter.. i guess av_read_frame does it for us [14:16:17 CET] <cslcm> that's why i was getting the double free issue [14:17:09 CET] <BtbN> The old API is really bad for that. It was replaced for a reason [14:17:26 CET] <cslcm> i get it, i know. I will look into it. Just have a deadline for this phase. [14:18:46 CET] <cslcm> ==44787== LEAK SUMMARY: ==44787== definitely lost: 0 bytes in 0 blocks ==44787== indirectly lost: 0 bytes in 0 blocks ==44787== possibly lost: 0 bytes in 0 blocks [14:18:48 CET] <cslcm> success :D [14:18:49 CET] <cslcm> cheers [14:19:04 CET] <cslcm> ls [14:19:07 CET] <cslcm> whoops [17:31:27 CET] <mooniac> I can't believe I can't find this with a simple web search. I want to use ffmpeg to record mike audio into a file. No video needed. Should be pretty simple I thought. [17:41:00 CET] <CoreX> mooniac maybe spell mic correctly [17:41:01 CET] <CoreX> http://free-tutorials.org/how-to-record-sound-from-microphone-with-ffmpeg/ [17:41:30 CET] <CoreX> or [17:41:31 CET] <CoreX> http://www.pc-freak.net/blog/record-microphone-input-sound-good-ffmpeg/ [17:44:24 CET] <mooniac> thx [17:54:52 CET] <rainey> when using libavresample to convert to a lesser amount of audio channels (eg stereo to mono), is it possible to specify which channel is taken? [18:06:48 CET] <mooniac> none of them worked for me. Oh well, I'll just use OBS then, that has a pulseaudio option (audio only, not screen capture). Works great. [18:12:22 CET] <rainey> I guess converting to mono I can just convert to stereo planar and get a pointer to whichever channel I need [21:28:55 CET] <TheAMM> How do I get RGBA from the lafvi color input filter? [21:29:08 CET] <TheAMM> ffmpeg -f lavfi -i "color=color=0xFFFFFF00:size=50x50" gives me yuv420p [21:29:35 CET] <TheAMM> vf format=rgba is technically rgba, but it's just a white square, because the input doesn't have the alpha [21:33:37 CET] <furq> TheAMM: color=...,format=yuva420p [21:34:26 CET] <TheAMM> Thanks [00:00:00 CET] --- Wed Nov 28 2018
participants (1)
-
burek