153 lines
7.2 KiB
C#
153 lines
7.2 KiB
C#
using System;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
using unity.libwebp.Interop;
|
|
|
|
namespace unity.libwebp
|
|
{
|
|
|
|
public static unsafe partial class NativeLibwebpdemux
|
|
{
|
|
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
|
|
const string DLL_NAME = "libwebpdemux";
|
|
#elif UNITY_EDITOR || UNITY_STANDALONE_OSX || UNITY_STANDALONE_LINUX
|
|
const string DLL_NAME = "webpdemux";
|
|
#elif UNITY_ANDROID
|
|
const string DLL_NAME = "webpdemux";
|
|
#elif UNITY_IOS || UNITY_WEBGL
|
|
const string DLL_NAME = "__Internal";
|
|
#endif
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPGetDemuxVersion();
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern WebPDemuxer* WebPDemuxInternal([NativeTypeName("const WebPData *")] WebPData* param0, int param1, WebPDemuxState* param2, int param3);
|
|
|
|
public static WebPDemuxer* WebPDemux([NativeTypeName("const WebPData *")] WebPData* data)
|
|
{
|
|
return WebPDemuxInternal(data, 0, null, 0x0107);
|
|
}
|
|
|
|
public static WebPDemuxer* WebPDemuxPartial([NativeTypeName("const WebPData *")] WebPData* data, WebPDemuxState* state)
|
|
{
|
|
return WebPDemuxInternal(data, 1, state, 0x0107);
|
|
}
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern void WebPDemuxDelete(WebPDemuxer* dmux);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
[return: NativeTypeName("uint32_t")]
|
|
public static extern uint WebPDemuxGetI([NativeTypeName("const WebPDemuxer *")] WebPDemuxer* dmux, WebPFormatFeature feature);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPDemuxGetFrame([NativeTypeName("const WebPDemuxer *")] WebPDemuxer* dmux, int frame_number, WebPIterator* iter);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPDemuxNextFrame(WebPIterator* iter);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPDemuxPrevFrame(WebPIterator* iter);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern void WebPDemuxReleaseIterator(WebPIterator* iter);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPDemuxGetChunk([NativeTypeName("const WebPDemuxer *")] WebPDemuxer* dmux, [NativeTypeName("const char [4]")] sbyte* fourcc, int chunk_number, WebPChunkIterator* iter);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPDemuxNextChunk(WebPChunkIterator* iter);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPDemuxPrevChunk(WebPChunkIterator* iter);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern void WebPDemuxReleaseChunkIterator(WebPChunkIterator* iter);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPAnimDecoderOptionsInitInternal(WebPAnimDecoderOptions* param0, int param1);
|
|
|
|
public static int WebPAnimDecoderOptionsInit(WebPAnimDecoderOptions* dec_options)
|
|
{
|
|
return WebPAnimDecoderOptionsInitInternal(dec_options, 0x0107);
|
|
}
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern WebPAnimDecoder* WebPAnimDecoderNewInternal([NativeTypeName("const WebPData *")] WebPData* param0, [NativeTypeName("const WebPAnimDecoderOptions *")] WebPAnimDecoderOptions* param1, int param2);
|
|
|
|
public static WebPAnimDecoder* WebPAnimDecoderNew([NativeTypeName("const WebPData *")] WebPData* webp_data, [NativeTypeName("const WebPAnimDecoderOptions *")] WebPAnimDecoderOptions* dec_options)
|
|
{
|
|
return WebPAnimDecoderNewInternal(webp_data, dec_options, 0x0107);
|
|
}
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPAnimDecoderGetInfo([NativeTypeName("const WebPAnimDecoder *")] WebPAnimDecoder* dec, WebPAnimInfo* info);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPAnimDecoderGetNext(WebPAnimDecoder* dec, [NativeTypeName("uint8_t **")] byte** buf, int* timestamp);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern int WebPAnimDecoderHasMoreFrames([NativeTypeName("const WebPAnimDecoder *")] WebPAnimDecoder* dec);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern void WebPAnimDecoderReset(WebPAnimDecoder* dec);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
[return: NativeTypeName("const WebPDemuxer *")]
|
|
public static extern WebPDemuxer* WebPAnimDecoderGetDemuxer([NativeTypeName("const WebPAnimDecoder *")] WebPAnimDecoder* dec);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern void WebPAnimDecoderDelete(WebPAnimDecoder* dec);
|
|
|
|
[NativeTypeName("#define WEBP_DEMUX_ABI_VERSION 0x0107")]
|
|
public const int WEBP_DEMUX_ABI_VERSION = 0x0107;
|
|
|
|
public static void WebPDataInit(WebPData* webp_data)
|
|
{
|
|
if (webp_data != null)
|
|
{
|
|
Unsafe.InitBlockUnaligned(webp_data, 0, (uint)sizeof(WebPData));
|
|
}
|
|
}
|
|
|
|
public static void WebPDataClear(WebPData* webp_data)
|
|
{
|
|
if (webp_data != null)
|
|
{
|
|
WebPFree((void*)(webp_data->bytes));
|
|
WebPDataInit(webp_data);
|
|
}
|
|
}
|
|
|
|
public static int WebPDataCopy([NativeTypeName("const WebPData *")] WebPData* src, WebPData* dst)
|
|
{
|
|
if (src == null || dst == null)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
WebPDataInit(dst);
|
|
if (src->bytes != null && (uint)src->size != 0)
|
|
{
|
|
dst->bytes = (byte*)(WebPMalloc(src->size));
|
|
if (dst->bytes == null)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
Unsafe.CopyBlockUnaligned((void*)(dst->bytes), src->bytes, (uint)src->size);
|
|
dst->size = src->size;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern void* WebPMalloc([NativeTypeName("size_t")] UIntPtr size);
|
|
|
|
[DllImport(DLL_NAME, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)]
|
|
public static extern void WebPFree(void* ptr);
|
|
}
|
|
}
|