private void WriteTrackInfo(IntPtr tagsPtr, IntPtr trackInfoPtr) { if (this.TrackNumber == null && this.TotalTracks == null) { NativeMethods.MP4TagsSetTrack(tagsPtr, IntPtr.Zero); } else { NativeMethods.MP4TagTrack trackInfo = new NativeMethods.MP4TagTrack(); if (trackInfoPtr != IntPtr.Zero) { trackInfo = trackInfoPtr.ReadStructure <NativeMethods.MP4TagTrack>(); } if (this.TrackNumber.Value != trackInfo.index || this.TotalTracks != trackInfo.total) { trackInfo.index = (this.TrackNumber == null ? (short)0 : this.TrackNumber.Value); trackInfo.total = (this.TotalTracks == null ? (short)0 : this.TotalTracks.Value); IntPtr trackPtr = Marshal.AllocHGlobal(Marshal.SizeOf(trackInfo)); Marshal.StructureToPtr(trackInfo, trackPtr, false); NativeMethods.MP4TagsSetTrack(tagsPtr, trackPtr); Marshal.FreeHGlobal(trackPtr); } } }
private void ReadTrackInfo(IntPtr trackInfoPointer) { if (trackInfoPointer == IntPtr.Zero) { return; } NativeMethods.MP4TagTrack trackInfo = trackInfoPointer.ReadStructure <NativeMethods.MP4TagTrack>(); this.TrackNumber = trackInfo.index; this.TotalTracks = trackInfo.total; }