예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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;
        }