コード例 #1
0
 private void DisposeCheck(MediaEncoderHandle handle)
 {
     if (!IsCreated(handle))
     {
         throw new ObjectDisposedException("Media Encoder handle already disposed!");
     }
 }
コード例 #2
0
        internal unsafe MediaEncoderHandle Instantiate <T>()
            where T : class, IMediaEncoder, new()
        {
            InternalEncoderData encoder = new InternalEncoderData();

            encoder.VHandle.Index      = m_Encoders.Count;
            encoder.VHandle.Version    = 1;
            encoder.m_TypeIndex        = -1;
            encoder.m_encoderInterface = new T();
            m_Encoders.Add(encoder);

            var versionedHandler = m_Encoders[encoder.VHandle.Index];
            var handle           = new MediaEncoderHandle(versionedHandler.VHandle);

            var mediaEncoderType = typeof(T);

            for (var i = 0; i < m_Types.Count; ++i)
            {
                if (m_Types[i] == mediaEncoderType)
                {
                    encoder.m_TypeIndex = i;
                    break;
                }
            }

            if (encoder.m_TypeIndex == -1)
            {
                encoder.m_TypeIndex = m_Types.Count;
                m_Types.Add(mediaEncoderType);
            }

            return(handle);
        }
コード例 #3
0
        public void Destroy(MediaEncoderHandle handle)
        {
            VersionCheck(handle.m_VersionHandle);
            var encoder = m_Encoders[handle.m_VersionHandle.Index];

            encoder.m_encoderInterface.Dispose();
            encoder.m_encoderInterface = null;
            encoder.VHandle.Version++;
        }
コード例 #4
0
 internal bool Is <T>(MediaEncoderHandle handle)
     where T : struct, IMediaEncoder
 {
     if (Exists(handle))
     {
         var index = m_Encoders[handle.m_VersionHandle.Index].m_TypeIndex;
         if (index < m_Types.Count && index >= 0)
         {
             return(m_Types[index] == typeof(T));
         }
     }
     return(false);
 }
コード例 #5
0
 public bool AddSamples(MediaEncoderHandle handle, NativeArray <float> interleavedSamples)
 {
     DisposeCheck(handle);
     return(m_Encoders[handle.m_VersionHandle.Index].m_encoderInterface.AddSamples(interleavedSamples));
 }
コード例 #6
0
 public bool AddFrame(MediaEncoderHandle handle, Texture2D texture, MediaTime time)
 {
     DisposeCheck(handle);
     return(m_Encoders[handle.m_VersionHandle.Index].m_encoderInterface.AddFrame(texture, time));
 }
コード例 #7
0
 public bool AddFrame(MediaEncoderHandle handle, int width, int height, int rowBytes, TextureFormat format, NativeArray <byte> data, MediaTime time)
 {
     DisposeCheck(handle);
     return(m_Encoders[handle.m_VersionHandle.Index].m_encoderInterface.AddFrame(width, height, rowBytes, format, data, time));
 }
コード例 #8
0
 public void Construct(MediaEncoderHandle handle, string path, VideoTrackAttributes vAttr, NativeArray <AudioTrackAttributes> aAttr)
 {
     DisposeCheck(handle);
     m_Encoders[handle.m_VersionHandle.Index].m_encoderInterface.Construct(path, vAttr, aAttr);
 }
コード例 #9
0
 public void Construct(MediaEncoderHandle handle, string path, List <IMediaEncoderAttribute> attributes)
 {
     DisposeCheck(handle);
     m_Encoders[handle.m_VersionHandle.Index].m_encoderInterface.Construct(path, attributes);
 }
コード例 #10
0
 public bool IsCreated(MediaEncoderHandle handle)
 {
     VersionCheck(handle.m_VersionHandle);
     return(m_Encoders[handle.m_VersionHandle.Index].IsCreated);
 }
コード例 #11
0
 public bool Exists(MediaEncoderHandle handle)
 {
     return(handle.m_VersionHandle.Index >= 0 && handle.m_VersionHandle.Index < m_Encoders.Count &&
            handle.m_VersionHandle.Version == m_Encoders[handle.m_VersionHandle.Index].VHandle.Version);
 }