//========================================================================== public libvlc_track_description_t libvlc_video_get_track_description(IntPtr p_mi) { VerifyAccess(); IntPtr pointer = m_libvlc_video_get_track_description(p_mi); if (pointer == IntPtr.Zero) { return(null); } // I still have no clue whether the returned descriptions have to be freed // in any way; but i assume not internal_libvlc_track_description_t track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(pointer, typeof(internal_libvlc_track_description_t)); libvlc_track_description_t result = new libvlc_track_description_t { i_id = track_description.i_id, psz_name = track_description.psz_name }; libvlc_track_description_t current = result; while (track_description.p_next != IntPtr.Zero) { track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(track_description.p_next, typeof(internal_libvlc_track_description_t)); current.p_next = new libvlc_track_description_t { i_id = track_description.i_id, psz_name = track_description.psz_name }; current = current.p_next; } current.p_next = null; m_libvlc_track_description_list_release(pointer); return(result); }
//========================================================================== public libvlc_track_description_t libvlc_video_get_spu_description(IntPtr p_mi) { VerifyAccess(); IntPtr pointer = m_libvlc_video_get_spu_description(p_mi); if (pointer == IntPtr.Zero) { return(null); } internal_libvlc_track_description_t track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(pointer, typeof(internal_libvlc_track_description_t)); libvlc_track_description_t result = new libvlc_track_description_t { i_id = track_description.i_id, psz_name = track_description.psz_name }; libvlc_track_description_t current = result; while (track_description.p_next != IntPtr.Zero) { track_description = (internal_libvlc_track_description_t)Marshal.PtrToStructure(track_description.p_next, typeof(internal_libvlc_track_description_t)); current.p_next = new libvlc_track_description_t { i_id = track_description.i_id, psz_name = track_description.psz_name }; current = current.p_next; } current.p_next = null; m_libvlc_track_description_list_release(pointer); return(result); }