[vlc-devel] Problem transporting psz (string) data with a libvlc event

basos g noxelia at gmail.com
Fri Nov 7 11:45:16 CET 2008


I'm going to implenent a new mediaplayer event
"libvlc_MediaPlayerSnapshotTaken" that should also transport the new
image filename. The event sending mechanism is based on a libvlc
object variable (STRING variable) that is set (var_Set) from
vout_thread when the snap occurs with psz data concerning new image
filename.

I'm using the following callback function to proccess the var_Set and
emit the libvlc_MediaPlayerSnapshotTaken event. Of course i have
extended the event u structure to include the new transporter
media_player_snapshot_taken.psz_filename.
 The problem is that i got a segi when i try to read the string data
outside vlc (from the libvlc user thread). I have comfirmed that the
psz_filename address is the same inside and outside of libvlc.
Is there some point i'm missing about free storage concerning
interthread transport ? Is there a limitation for access rights on
memmory allocated withing a thread from another ?? Or is there some
implicit mechanism that might free the string data asynchronously
while we are inside libvlc_event_send ?????

--------------------------------------------------------------------------------------------------

/**************************************************************************
 * Trigger a snapshot Taken Event
 *************************************************************************/
static int SnapshotTakenCallback( vlc_object_t *p_this, char const *psz_cmd,
                       vlc_value_t oldval, vlc_value_t newval, void *p_data )
{
    VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval);
    VLC_UNUSED(p_this) ;

	libvlc_media_player_t* p_mi = (libvlc_media_player_t*) p_data ;
	libvlc_event_t event ;
	event.type = libvlc_MediaPlayerSnapshotTaken ;
	event.u.media_player_snapshot_taken.psz_filename = newval.psz_string ;

    msg_Dbg( p_this, "about to emit libvlc_snapshot_taken.make
psz_str=0x%x (%s)",
		 event.u.media_player_snapshot_taken.psz_filename
,event.u.media_player_snapshot_taken.psz_filename );

    libvlc_event_send( p_mi->p_event_manager, &event );

    return VLC_SUCCESS;
}



More information about the vlc-devel mailing list