Example #1
0
 void OnVideoFragmentReady(NikonDevice sender, NikonVideoFragment fragment)
 {
     if (_videoFragmentReady != null)
     {
         _videoFragmentReady(sender, fragment);
     }
 }
Example #2
0
        unsafe void DataItemGetVideoImage(NikonObject data)
        {
            string     name            = data.GetString(eNkMAIDCapability.kNkMAIDCapability_Name);
            NkMAIDSize videoDimensions = data.GetSize(eNkMAIDCapability.kNkMAIDCapability_Pixels);

            NkMAIDGetVideoImage videoImage = new NkMAIDGetVideoImage();

            data.GetGeneric(eNkMAIDCapability.kNkMAIDCapability_GetVideoImage, new IntPtr(&videoImage));

            // Note: Download 4MB at the time
            const int chunkSize = 4 * 1024 * 1024;

            uint totalSize = videoImage.ulDataSize;

            for (uint offset = 0; offset < totalSize; offset += chunkSize)
            {
                uint fragmentSize = Math.Min(chunkSize, totalSize - offset);

                byte[] buffer = new byte[fragmentSize];

                fixed(byte *pBuffer = buffer)
                {
                    videoImage.ulOffset   = offset;
                    videoImage.ulReadSize = (uint)buffer.Length;
                    videoImage.ulDataSize = (uint)buffer.Length;
                    videoImage.pData      = new IntPtr(pBuffer);

                    data.GetArrayGeneric(eNkMAIDCapability.kNkMAIDCapability_GetVideoImage, new IntPtr(&videoImage));
                }

                NikonVideoFragment fragment = new NikonVideoFragment(
                    name,
                    totalSize,
                    offset,
                    buffer,
                    videoDimensions.w,
                    videoDimensions.h);

                Scheduler.Callback(new VideoFragmentReadyDelegate(OnVideoFragmentReady), this, fragment);
            }
        }
Example #3
0
        void device_VideoFragmentReady(NikonDevice sender, NikonVideoFragment fragment)
        {
            string path = Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.MyVideos), fragment.Filename);

            if (fragment.IsFirst)
            {
                Debug.Assert(_videoFile == null);
                _videoFile = new FileStream(path, FileMode.Create, FileAccess.Write);
                Log.GetInstance().WriteLine("Downloading Video...");
            }

            Log.GetInstance().WriteLine(fragment.PercentComplete.ToString(".0") + "%");

            Debug.Assert(_videoFile != null);
            _videoFile.Write(fragment.Buffer, 0, fragment.Buffer.Length);

            if (fragment.IsLast)
            {
                _videoFile.Close();
                _videoFile = null;
                Log.GetInstance().WriteLine("Saved Video: " + path + " (" + fragment.VideoWidth + "x" + fragment.VideoHeight + ")");
            }
        }
Example #4
0
        unsafe void DataItemGetVideoImage(NikonObject data)
        {
            string name = data.GetString(eNkMAIDCapability.kNkMAIDCapability_Name);
            NkMAIDSize videoDimensions = data.GetSize(eNkMAIDCapability.kNkMAIDCapability_Pixels);

            NkMAIDGetVideoImage videoImage = new NkMAIDGetVideoImage();
            data.GetGeneric(eNkMAIDCapability.kNkMAIDCapability_GetVideoImage, new IntPtr(&videoImage));

            // Note: Download 4MB at the time
            const int chunkSize = 4 * 1024 * 1024;

            uint totalSize = videoImage.ulDataSize;

            for (uint offset = 0; offset < totalSize; offset += chunkSize)
            {
                uint fragmentSize = Math.Min(chunkSize, totalSize - offset);

                byte[] buffer = new byte[fragmentSize];

                fixed (byte* pBuffer = buffer)
                {
                    videoImage.ulOffset = offset;
                    videoImage.ulReadSize = (uint)buffer.Length;
                    videoImage.ulDataSize = (uint)buffer.Length;
                    videoImage.pData = new IntPtr(pBuffer);

                    data.GetArrayGeneric(eNkMAIDCapability.kNkMAIDCapability_GetVideoImage, new IntPtr(&videoImage));
                }

                NikonVideoFragment fragment = new NikonVideoFragment(
                    name,
                    totalSize,
                    offset,
                    buffer,
                    videoDimensions.w,
                    videoDimensions.h);

                Scheduler.Callback(new VideoFragmentReadyDelegate(OnVideoFragmentReady), this, fragment);
            }
        }
Example #5
0
 void OnVideoFragmentReady(NikonDevice sender, NikonVideoFragment fragment)
 {
     if (_videoFragmentReady != null)
     {
         _videoFragmentReady(sender, fragment);
     }
 }
Example #6
0
        void _device_VideoFragmentReady(NikonDevice sender, NikonVideoFragment fragment)
        {
            // Open the filestream when we receive the first video fragment
            if (fragment.IsFirst)
            {
                _fileStream = new FileStream(fragment.Filename, FileMode.Create, FileAccess.Write);
            }

            // Save video fragments to file
            _fileStream.Write(fragment.Buffer, 0, fragment.Buffer.Length);

            // When we recive the last fragment, close the file and signal that we're done
            if (fragment.IsLast)
            {
                _fileStream.Close();
                _waitForVideoCompleted.Set();
            }
        }