66 lines
2.5 KiB
C#
66 lines
2.5 KiB
C#
/*
|
|
* Source code originally from RtspClientSharp's player example:
|
|
* https://github.com/BogdanovKirill/RtspClientSharp
|
|
*/
|
|
// ReSharper disable All
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace IPCamLib.FFMPEG
|
|
{
|
|
internal enum FFmpegVideoCodecId
|
|
{
|
|
MJPEG = 7,
|
|
H264 = 27
|
|
}
|
|
|
|
[Flags]
|
|
internal enum FFmpegScalingQuality
|
|
{
|
|
FastBilinear = 1,
|
|
Bilinear = 2,
|
|
Bicubic = 4,
|
|
Point = 0x10,
|
|
Area = 0x20,
|
|
}
|
|
|
|
internal enum FFmpegPixelFormat
|
|
{
|
|
None = -1,
|
|
BGR24 = 3,
|
|
GRAY8 = 8,
|
|
BGRA = 28
|
|
}
|
|
|
|
internal static class FFmpegVideoPInvoke
|
|
{
|
|
private const string LibraryName = "libffmpeghelper.dll";
|
|
|
|
[DllImport(LibraryName, EntryPoint = "create_video_decoder", CallingConvention = CallingConvention.Cdecl)]
|
|
public static extern int CreateVideoDecoder(FFmpegVideoCodecId videoCodecId, out IntPtr handle);
|
|
|
|
[DllImport(LibraryName, EntryPoint = "remove_video_decoder", CallingConvention = CallingConvention.Cdecl)]
|
|
public static extern void RemoveVideoDecoder(IntPtr handle);
|
|
|
|
[DllImport(LibraryName, EntryPoint = "set_video_decoder_extradata",
|
|
CallingConvention = CallingConvention.Cdecl)]
|
|
public static extern int SetVideoDecoderExtraData(IntPtr handle, IntPtr extradata, int extradataLength);
|
|
|
|
[DllImport(LibraryName, EntryPoint = "decode_video_frame", CallingConvention = CallingConvention.Cdecl)]
|
|
public static extern int DecodeFrame(IntPtr handle, IntPtr rawBuffer, int rawBufferLength, out int frameWidth,
|
|
out int frameHeight, out FFmpegPixelFormat framePixelFormat);
|
|
|
|
[DllImport(LibraryName, EntryPoint = "scale_decoded_video_frame", CallingConvention = CallingConvention.Cdecl)]
|
|
public static extern int ScaleDecodedVideoFrame(IntPtr handle, IntPtr scalerHandle, IntPtr scaledBuffer,
|
|
int scaledBufferStride);
|
|
|
|
[DllImport(LibraryName, EntryPoint = "create_video_scaler", CallingConvention = CallingConvention.Cdecl)]
|
|
public static extern int CreateVideoScaler(int sourceLeft, int sourceTop, int sourceWidth, int sourceHeight,
|
|
FFmpegPixelFormat sourcePixelFormat,
|
|
int scaledWidth, int scaledHeight, FFmpegPixelFormat scaledPixelFormat, FFmpegScalingQuality qualityFlags,
|
|
out IntPtr handle);
|
|
|
|
[DllImport(LibraryName, EntryPoint = "remove_video_scaler", CallingConvention = CallingConvention.Cdecl)]
|
|
public static extern void RemoveVideoScaler(IntPtr handle);
|
|
}
|
|
} |