예제 #1
0
 public void SetConfiguration(VpxCodecEncoderConfiguration config)
 {
     if (config == null)
     {
         throw new ArgumentNullException(nameof(config));
     }
     VpxMarshal.vpx_codec_enc_config_set(ctx, config.Handle);
 }
예제 #2
0
        public void Encode(VpxImage image, int presentationTimestamp, ulong duration, VpxEncoderFlags flags, VpxDeadline deadline)
        {
            var err = VpxMarshal.vpx_codec_encode(ctx, image.Handle, presentationTimestamp, duration, flags, deadline);

            if (err != VpxCodecError.OK)
            {
                throw new VpxInteropException(err);
            }
        }
예제 #3
0
 public void Dispose()
 {
     if (release)
     {
         release = false;
         if (ImageData.Handle == IntPtr.Zero)
         {
             VpxMarshal.vpx_img_free(Handle);
         }
         Marshal.FreeHGlobal(Handle.Handle);
     }
 }
예제 #4
0
        public static VpxCodecEncoderConfiguration CreateDefault(VpxCodec codec)
        {
            vpx_codec_enc_cfg cfg;
            VpxCodecError     error;

            error = VpxMarshal.vpx_codec_enc_config_default(codec.Handle, out cfg, 0);
            if (error != VpxCodecError.OK)
            {
                throw new VpxInteropException(error);
            }
            var ptr = Vpx.AllocateHGlobalPointerOfStruct(cfg);

            return(new VpxCodecEncoderConfiguration(ptr, true));
        }
예제 #5
0
        public VpxEncoder(VpxCodec codec, VpxCodecEncoderConfiguration config, VpxCodecFlags flags)
        {
            if (codec == null)
            {
                throw new ArgumentNullException(nameof(codec));
            }
            config = config ?? VpxCodecEncoderConfiguration.CreateDefault(codec);
            vpx_codec_ctx enc;
            var           error = VpxMarshal.vpx_codec_enc_init_ver(out enc, codec.Handle, config.Handle, flags, VpxMarshal.EncoderAbiVersion);

            if (error != VpxCodecError.OK)
            {
                throw new VpxInteropException(error);
            }
            ctx = Vpx.AllocateHGlobalPointerOfStruct(enc);
        }
예제 #6
0
 public VpxImage(VpxImageFormat format, int width, int height, int align)
 {
     Handle  = VpxMarshal.vpx_img_alloc(new Pointer <vpx_image> (IntPtr.Zero), format, (uint)width, (uint)height, (uint)align);
     release = true;
 }
예제 #7
0
 public void Flip()
 {
     VpxMarshal.vpx_img_flip(Handle);
 }
예제 #8
0
 public void SetRect(int x, int y, int width, int height)
 {
     var error = VpxMarshal.vpx_img_set_rect(Handle, (uint)x, (uint)y, (uint)width, (uint)height);
 }
예제 #9
0
 public VpxImage(VpxImageFormat format, int width, int height, int align, Pointer <byte> imageData)
 {
     Handle    = VpxMarshal.vpx_img_wrap(new Pointer <vpx_image> (IntPtr.Zero), format, (uint)width, (uint)height, (uint)align, imageData);
     ImageData = imageData;
     release   = true;
 }
예제 #10
0
 static string ToMessageAddendum(VpxCodecError error)
 {
     return(error == VpxCodecError.OK ? null : " : " + Marshal.PtrToStringAuto(VpxMarshal.vpx_codec_err_to_string(error)));
 }
예제 #11
0
 public void SetCxDataBuffer(Pointer <VpxFixedBuffer> buffer, int padBefore, int padAfter)
 {
     VpxMarshal.vpx_codec_set_cx_data_buf(ctx, buffer, (uint)padBefore, (uint)padAfter);
 }
예제 #12
0
        public VpxFixedBuffer GetGlobalHeaders()
        {
            var ptr = VpxMarshal.vpx_codec_get_global_headers(ctx);

            return((ptr.Handle == IntPtr.Zero) ? default(VpxFixedBuffer) : (VpxFixedBuffer)Marshal.PtrToStructure(VpxMarshal.vpx_codec_get_global_headers(ctx), typeof(VpxFixedBuffer)));
        }