Initial vp9 decoder implementation
This commit is contained in:
104
godot-project/scripts/Platform/IVP9PlatformDecoder.cs
Normal file
104
godot-project/scripts/Platform/IVP9PlatformDecoder.cs
Normal file
@@ -0,0 +1,104 @@
|
||||
using Godot;
|
||||
using System;
|
||||
|
||||
namespace VideoOrchestra.Platform
|
||||
{
|
||||
/// <summary>
|
||||
/// Cross-platform interface for VP9 video decoding implementations
|
||||
/// </summary>
|
||||
public interface IVP9PlatformDecoder : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// Platform identifier
|
||||
/// </summary>
|
||||
string PlatformName { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Check if VP9 hardware decoding is supported on this platform
|
||||
/// </summary>
|
||||
bool IsHardwareDecodingSupported { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Initialize the decoder with specified dimensions
|
||||
/// </summary>
|
||||
/// <param name="width">Video width</param>
|
||||
/// <param name="height">Video height</param>
|
||||
/// <param name="enableHardware">Enable hardware acceleration if available</param>
|
||||
/// <returns>True if initialization succeeded</returns>
|
||||
bool Initialize(int width, int height, bool enableHardware = true);
|
||||
|
||||
/// <summary>
|
||||
/// Decode a VP9 frame for the specified stream
|
||||
/// </summary>
|
||||
/// <param name="frameData">VP9 encoded frame data</param>
|
||||
/// <param name="streamId">Stream identifier (0-2)</param>
|
||||
/// <returns>True if decoding succeeded</returns>
|
||||
bool DecodeFrame(byte[] frameData, int streamId);
|
||||
|
||||
/// <summary>
|
||||
/// Get the decoded frame as ImageTexture for the specified stream
|
||||
/// </summary>
|
||||
/// <param name="streamId">Stream identifier (0-2)</param>
|
||||
/// <returns>Decoded frame texture, or null if not available</returns>
|
||||
ImageTexture GetDecodedTexture(int streamId);
|
||||
|
||||
/// <summary>
|
||||
/// Get platform-specific texture ID (OpenGL/DirectX/Metal)
|
||||
/// </summary>
|
||||
/// <param name="streamId">Stream identifier (0-2)</param>
|
||||
/// <returns>Native texture ID, or 0 if not available</returns>
|
||||
uint GetNativeTextureId(int streamId);
|
||||
|
||||
/// <summary>
|
||||
/// Get current decoder status
|
||||
/// </summary>
|
||||
VP9DecoderStatus GetStatus();
|
||||
|
||||
/// <summary>
|
||||
/// Release all resources
|
||||
/// </summary>
|
||||
void Release();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// VP9 decoder status enumeration
|
||||
/// </summary>
|
||||
public enum VP9DecoderStatus
|
||||
{
|
||||
Uninitialized,
|
||||
Initialized,
|
||||
Decoding,
|
||||
Error,
|
||||
Released
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Exception thrown by VP9 platform decoders
|
||||
/// </summary>
|
||||
public class VP9DecoderException : Exception
|
||||
{
|
||||
public string PlatformName { get; }
|
||||
public int StreamId { get; }
|
||||
|
||||
public VP9DecoderException(string platformName, string message)
|
||||
: base($"[{platformName}] {message}")
|
||||
{
|
||||
PlatformName = platformName;
|
||||
StreamId = -1;
|
||||
}
|
||||
|
||||
public VP9DecoderException(string platformName, int streamId, string message)
|
||||
: base($"[{platformName}] Stream {streamId}: {message}")
|
||||
{
|
||||
PlatformName = platformName;
|
||||
StreamId = streamId;
|
||||
}
|
||||
|
||||
public VP9DecoderException(string platformName, string message, Exception innerException)
|
||||
: base($"[{platformName}] {message}", innerException)
|
||||
{
|
||||
PlatformName = platformName;
|
||||
StreamId = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user