[LAD] Need help with LV2 midi events.

Ulrich Lorenz Schlüter audio-mobster at gmx.de
Wed Jul 29 21:47:29 UTC 2009


Lars Luthman schrieb:
> On Fri, 2009-07-24 at 23:35 +0200, Ulrich Lorenz Schlüter wrote:
>   
>> Hello list,
>>
>> I never get a valid event iterator with lv2_event_is_valid(). Can
>> somebody tell me why please?
>>
>> [...]
>>       LV2_Event_Buffer* inbuf = p<LV2_Event_Buffer>(*p(6));
>>     
>
> The template version of p() works just like the non-template version, it
> takes a uint32_t port index argument and returns a pointer to the buffer
> for that port. The only difference is that while the non-template
> version returns the buffer pointer as a pointer-to-float, the template
> version returns it as a pointer-to-T, where T is the template parameter.
> So in order to get the MIDI event input buffer for the port with index 6
> you do
>
>   LV2_Event_Buffer* inbuf = p<LV2_Event_Buffer>(6);
>
> or, equivalently
>
>   LV2_Event_Buffer* inbuf = reinterpret_cast<LV2_Event_Buffer*>(p(6));
>
> What you are doing above is to first get the buffer as a
> pointer-to-float although the buffer really contains an
> LV2_Event_Buffer, then dereference it to get some garbage float value,
> then truncate that float value to an uint32_t and pass it as the index
> parameter to p<LV2_Event_Buffer>(). This will cause undefined behaviour.
> It could crash with a segmentation fault, it could give you garbage MIDI
> events or it could do nothing at all.
>
>
> --ll
>   
Was about to ask especially you about that until I solved this on my
own. But thanks a lot for your explanation.

Uli :-)



More information about the Linux-audio-dev mailing list