123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- #if UNITY_5_4_OR_NEWER || (UNITY_5 && !UNITY_5_0 && !UNITY_5_1)
- #define AVPRO_MOVIECAPTURE_ISSUEPLUGINEVENT_52
- #endif
- using UnityEngine;
- using System.Text;
- using System.Runtime.InteropServices;
- //-----------------------------------------------------------------------------
- // Copyright 2012-2017 RenderHeads Ltd. All rights reserved.
- //-----------------------------------------------------------------------------
- namespace RenderHeads.Media.AVProMovieCapture
- {
- public enum StereoPacking
- {
- None,
- TopBottom,
- LeftRight,
- }
- public enum StopMode
- {
- None,
- FramesEncoded,
- SecondsEncoded,
- SecondsElapsed,
- }
- public class NativePlugin
- {
- public enum PixelFormat
- {
- RGBA32,
- BGRA32, // Note: This is the native format for Unity textures with red and blue swapped.
- YCbCr422_YUY2,
- YCbCr422_UYVY,
- YCbCr422_HDYC,
- }
- // Used by GL.IssuePluginEvent
- public const int PluginID = 0xFA30000;
- public enum PluginEvent
- {
- CaptureFrameBuffer = 0,
- FreeResources = 1,
- }
- public const string ScriptVersion = "3.3.1";
- public const string ExpectedPluginVersion = "3.30";
- public const int MaxRenderWidth = 16384;
- public const int MaxRenderHeight = 16384;
- #if AVPRO_MOVIECAPTURE_ISSUEPLUGINEVENT_52
- [DllImport("AVProMovieCapture")]
- public static extern System.IntPtr GetRenderEventFunc();
- [DllImport("AVProMovieCapture")]
- public static extern System.IntPtr GetFreeResourcesEventFunc();
- #endif
- //////////////////////////////////////////////////////////////////////////
- // Global Init/Deinit
- [DllImport("AVProMovieCapture")]
- public static extern bool Init();
- [DllImport("AVProMovieCapture")]
- public static extern void Deinit();
- [DllImport("AVProMovieCapture")]
- public static extern float GetPluginVersion();
- [DllImport("AVProMovieCapture")]
- public static extern bool IsTrialVersion();
- //////////////////////////////////////////////////////////////////////////
- // Video Codecs
- [DllImport("AVProMovieCapture")]
- public static extern int GetNumAVIVideoCodecs();
- [DllImport("AVProMovieCapture")]
- public static extern bool IsConfigureVideoCodecSupported(int index);
- [DllImport("AVProMovieCapture")]
- public static extern void ConfigureVideoCodec(int index);
- public static string GetAVIVideoCodecName(int index)
- {
- string result = "Invalid";
- StringBuilder nameBuffer = new StringBuilder(256);
- if (GetAVIVideoCodecName(index, nameBuffer, nameBuffer.Capacity))
- {
- result = nameBuffer.ToString();
- }
- return result;
- }
- //////////////////////////////////////////////////////////////////////////
- // Audio Codecs
- [DllImport("AVProMovieCapture")]
- public static extern int GetNumAVIAudioCodecs();
- [DllImport("AVProMovieCapture")]
- public static extern bool IsConfigureAudioCodecSupported(int index);
- [DllImport("AVProMovieCapture")]
- public static extern void ConfigureAudioCodec(int index);
- public static string GetAVIAudioCodecName(int index)
- {
- string result = "Invalid";
- StringBuilder nameBuffer = new StringBuilder(256);
- if (GetAVIAudioCodecName(index, nameBuffer, nameBuffer.Capacity))
- {
- result = nameBuffer.ToString();
- }
- return result;
- }
- //////////////////////////////////////////////////////////////////////////
- // Audio Devices
- [DllImport("AVProMovieCapture")]
- public static extern int GetNumAVIAudioInputDevices();
- public static string GetAVIAudioInputDeviceName(int index)
- {
- string result = "Invalid";
- StringBuilder nameBuffer = new StringBuilder(256);
- if (GetAVIAudioInputDeviceName(index, nameBuffer, nameBuffer.Capacity))
- {
- result = nameBuffer.ToString();
- }
- return result;
- }
- //////////////////////////////////////////////////////////////////////////
- // Create the recorder
- [DllImport("AVProMovieCapture")]
- public static extern int CreateRecorderAVI([MarshalAs(UnmanagedType.LPWStr)] string filename, uint width, uint height, int frameRate, int format,
- bool isTopDown, int videoCodecIndex, bool hasAudio, int audioSampleRate, int audioChannelCount, int audioInputDeviceIndex, int audioCodecIndex, bool isRealTime, bool useMediaFoundationH264, bool supportAlpha);
- [DllImport("AVProMovieCapture")]
- public static extern int CreateRecorderPipe([MarshalAs(UnmanagedType.LPWStr)] string filename, uint width, uint height, int frameRate, int format, bool isTopDown, bool supportAlpha);
- //////////////////////////////////////////////////////////////////////////
- // Update recorder
- [DllImport("AVProMovieCapture")]
- public static extern bool Start(int handle);
- [DllImport("AVProMovieCapture")]
- public static extern bool IsNewFrameDue(int handle);
- [DllImport("AVProMovieCapture")]
- public static extern void EncodeFrame(int handle, System.IntPtr data);
- [DllImport("AVProMovieCapture")]
- public static extern void EncodeAudio(int handle, System.IntPtr data, uint length);
- [DllImport("AVProMovieCapture")]
- public static extern void EncodeFrameWithAudio(int handle, System.IntPtr videoData, System.IntPtr audioData, uint audioLength);
- [DllImport("AVProMovieCapture")]
- public static extern void Pause(int handle);
- [DllImport("AVProMovieCapture")]
- public static extern void Stop(int handle, bool skipPendingFrames);
- [DllImport("AVProMovieCapture")]
- public static extern void SetTexturePointer(int handle, System.IntPtr texture);
- //////////////////////////////////////////////////////////////////////////
- // Destroy recorder
- [DllImport("AVProMovieCapture")]
- public static extern void FreeRecorder(int handle);
- //////////////////////////////////////////////////////////////////////////
- // Debugging
- [DllImport("AVProMovieCapture")]
- public static extern uint GetNumDroppedFrames(int handle);
- [DllImport("AVProMovieCapture")]
- public static extern uint GetNumDroppedEncoderFrames(int handle);
- [DllImport("AVProMovieCapture")]
- public static extern uint GetNumEncodedFrames(int handle);
- [DllImport("AVProMovieCapture")]
- public static extern uint GetEncodedSeconds(int handle);
- //////////////////////////////////////////////////////////////////////////
- // Private internal functions
- [DllImport("AVProMovieCapture")]
- private static extern bool GetAVIVideoCodecName(int index, StringBuilder name, int nameBufferLength);
- [DllImport("AVProMovieCapture")]
- private static extern bool GetAVIAudioCodecName(int index, StringBuilder name, int nameBufferLength);
- [DllImport("AVProMovieCapture")]
- private static extern bool GetAVIAudioInputDeviceName(int index, StringBuilder name, int nameBufferLength);
- }
- }
|