Hello...<br><br><div class="gmail_quote">On 22 August 2012 19:31, Alexey Sokolov <span dir="ltr"><<a href="mailto:alexey@asokolov.org" target="_blank">alexey@asokolov.org</a>></span> wrote:<br>[snip]<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

If the data is stored in the aout, is the application free to release it<br>
right after doing libvlc_media_player_set_equalizer(p_mp, p_eq)?<br>
And only set it to NULL when the application is finished.<br>
So in this case libvlc_media_player_get_equalizer will return stale pointer?<br>
<br>
I don't think that requiring users to call<br>
libvlc_audio_equalizer_release() only when the application is finished<br>
just to make result of libvlc_media_player_get_equalizer to be<br>
non-broken, is good.<br>
<br>
Maybe just drop libvlc_media_player_get_equalizer then? Or let it create<br>
new instance of libvlc_equalizer_t, or let it put existing equalizer<br>
data into the parameter of the function, like "void<br>
libvlc_media_player_get_equalizer(libvlc_media_player_t*,<br>
libvlc_equalizer_t* result);<br>
</blockquote></div><br>I have already been working on a new patch to address this problem.<br><br>The only reason I kept that pointer to the equalizer was so it could be returned back to the application. At the time, that seemed like a reasonable API to have. Once the equalizer has been set the pointer is no longer actually used.<br>
<br>For the new patch, I ended up considering these approaches, some are similar or the same as you suggest:<br><br>1. Drop libvlc_media_player_get_equalizer altogether. The media player now no longer cares about the lifecycle of equalizer instances. It uses the equalizer to set the values, and that's it.<br>
<br>2. When setting the equalizer, make a copy of the equalizer and store that copy in the media player. Then, when getting the equalizer another copy is made and returned - or NULL is returned if there is no equalizer. This means the media player maintains the lifecycle of its own equalizer pointer, at the expense of making copies (and requiring the application to release the copy).<br>

<br>3. Instead of storing the equalizer, or storing a copy of the equalizer, create and populate a new one on demand. This works, but the code is more complicated since it must translate the equalizer bands string variable into an array of floats.<br>

<br>Right now I'm not so sure which way to go, #1 is obviously the simplest, but #2 is currently my preference.<br><br>I'm still mulling it over, any direction or other ideas are welcome.<br>