mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-23 15:08:07 +02:00
feat: Add streaming handlers for live TV proxying and VOD HLS transcoding using FFmpeg.
This commit is contained in:
1 parent
887bfad433
commit
89bd5bd7cb
51 files changed
+4568
No files matched your search
@@ -0,0 +1,187 @@
|
||||
// Copyright 2013 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef FLUTTER_SHELL_PLATFORM_COMMON_PUBLIC_FLUTTER_TEXTURE_REGISTRAR_H_
|
||||
#define FLUTTER_SHELL_PLATFORM_COMMON_PUBLIC_FLUTTER_TEXTURE_REGISTRAR_H_
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "flutter_export.h"
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct FlutterDesktopTextureRegistrar;
|
||||
// Opaque reference to a texture registrar.
|
||||
typedef struct FlutterDesktopTextureRegistrar*
|
||||
FlutterDesktopTextureRegistrarRef;
|
||||
|
||||
// Possible values for the type specified in FlutterDesktopTextureInfo.
|
||||
// Additional types may be added in the future.
|
||||
typedef enum {
|
||||
// A Pixel buffer-based texture.
|
||||
kFlutterDesktopPixelBufferTexture,
|
||||
// A platform-specific GPU surface-backed texture.
|
||||
kFlutterDesktopGpuSurfaceTexture
|
||||
} FlutterDesktopTextureType;
|
||||
|
||||
// Supported GPU surface types.
|
||||
typedef enum {
|
||||
// Uninitialized.
|
||||
kFlutterDesktopGpuSurfaceTypeNone,
|
||||
// A DXGI shared texture handle (Windows only).
|
||||
// See
|
||||
// https://docs.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgiresource-getsharedhandle
|
||||
kFlutterDesktopGpuSurfaceTypeDxgiSharedHandle,
|
||||
// A |ID3D11Texture2D| (Windows only).
|
||||
kFlutterDesktopGpuSurfaceTypeD3d11Texture2D
|
||||
} FlutterDesktopGpuSurfaceType;
|
||||
|
||||
// Supported pixel formats.
|
||||
typedef enum {
|
||||
// Uninitialized.
|
||||
kFlutterDesktopPixelFormatNone,
|
||||
// Represents a 32-bit RGBA color format with 8 bits each for red, green, blue
|
||||
// and alpha.
|
||||
kFlutterDesktopPixelFormatRGBA8888,
|
||||
// Represents a 32-bit BGRA color format with 8 bits each for blue, green, red
|
||||
// and alpha.
|
||||
kFlutterDesktopPixelFormatBGRA8888
|
||||
} FlutterDesktopPixelFormat;
|
||||
|
||||
// An image buffer object.
|
||||
typedef struct {
|
||||
// The pixel data buffer.
|
||||
const uint8_t* buffer;
|
||||
// Width of the pixel buffer.
|
||||
size_t width;
|
||||
// Height of the pixel buffer.
|
||||
size_t height;
|
||||
// An optional callback that gets invoked when the |buffer| can be released.
|
||||
void (*release_callback)(void* release_context);
|
||||
// Opaque data passed to |release_callback|.
|
||||
void* release_context;
|
||||
} FlutterDesktopPixelBuffer;
|
||||
|
||||
// A GPU surface descriptor.
|
||||
typedef struct {
|
||||
// The size of this struct. Must be
|
||||
// sizeof(FlutterDesktopGpuSurfaceDescriptor).
|
||||
size_t struct_size;
|
||||
// The surface handle. The expected type depends on the
|
||||
// |FlutterDesktopGpuSurfaceType|.
|
||||
//
|
||||
// Provide a |ID3D11Texture2D*| when using
|
||||
// |kFlutterDesktopGpuSurfaceTypeD3d11Texture2D| or a |HANDLE| when using
|
||||
// |kFlutterDesktopGpuSurfaceTypeDxgiSharedHandle|.
|
||||
//
|
||||
// The referenced resource needs to stay valid until it has been opened by
|
||||
// Flutter. Consider incrementing the resource's reference count in the
|
||||
// |FlutterDesktopGpuSurfaceTextureCallback| and registering a
|
||||
// |release_callback| for decrementing the reference count once it has been
|
||||
// opened.
|
||||
void* handle;
|
||||
// The physical width.
|
||||
size_t width;
|
||||
// The physical height.
|
||||
size_t height;
|
||||
// The visible width.
|
||||
// It might be less or equal to the physical |width|.
|
||||
size_t visible_width;
|
||||
// The visible height.
|
||||
// It might be less or equal to the physical |height|.
|
||||
size_t visible_height;
|
||||
// The pixel format which might be optional depending on the surface type.
|
||||
FlutterDesktopPixelFormat format;
|
||||
// An optional callback that gets invoked when the |handle| has been opened.
|
||||
void (*release_callback)(void* release_context);
|
||||
// Opaque data passed to |release_callback|.
|
||||
void* release_context;
|
||||
} FlutterDesktopGpuSurfaceDescriptor;
|
||||
|
||||
// The pixel buffer copy callback definition provided to
|
||||
// the Flutter engine to copy the texture.
|
||||
// It is invoked with the intended surface size specified by |width| and
|
||||
// |height| and the |user_data| held by
|
||||
// |FlutterDesktopPixelBufferTextureConfig|.
|
||||
//
|
||||
// As this is usually called from the render thread, the callee must take
|
||||
// care of proper synchronization. It also needs to be ensured that the
|
||||
// returned |FlutterDesktopPixelBuffer| isn't released prior to unregistering
|
||||
// the corresponding texture.
|
||||
typedef const FlutterDesktopPixelBuffer* (
|
||||
*FlutterDesktopPixelBufferTextureCallback)(size_t width,
|
||||
size_t height,
|
||||
void* user_data);
|
||||
|
||||
// The GPU surface callback definition provided to the Flutter engine to obtain
|
||||
// the surface. It is invoked with the intended surface size specified by
|
||||
// |width| and |height| and the |user_data| held by
|
||||
// |FlutterDesktopGpuSurfaceTextureConfig|.
|
||||
typedef const FlutterDesktopGpuSurfaceDescriptor* (
|
||||
*FlutterDesktopGpuSurfaceTextureCallback)(size_t width,
|
||||
size_t height,
|
||||
void* user_data);
|
||||
|
||||
// An object used to configure pixel buffer textures.
|
||||
typedef struct {
|
||||
// The callback used by the engine to copy the pixel buffer object.
|
||||
FlutterDesktopPixelBufferTextureCallback callback;
|
||||
// Opaque data that will get passed to the provided |callback|.
|
||||
void* user_data;
|
||||
} FlutterDesktopPixelBufferTextureConfig;
|
||||
|
||||
// An object used to configure GPU-surface textures.
|
||||
typedef struct {
|
||||
// The size of this struct. Must be
|
||||
// sizeof(FlutterDesktopGpuSurfaceTextureConfig).
|
||||
size_t struct_size;
|
||||
// The concrete surface type (e.g.
|
||||
// |kFlutterDesktopGpuSurfaceTypeDxgiSharedHandle|)
|
||||
FlutterDesktopGpuSurfaceType type;
|
||||
// The callback used by the engine to obtain the surface descriptor.
|
||||
FlutterDesktopGpuSurfaceTextureCallback callback;
|
||||
// Opaque data that will get passed to the provided |callback|.
|
||||
void* user_data;
|
||||
} FlutterDesktopGpuSurfaceTextureConfig;
|
||||
|
||||
typedef struct {
|
||||
FlutterDesktopTextureType type;
|
||||
union {
|
||||
FlutterDesktopPixelBufferTextureConfig pixel_buffer_config;
|
||||
FlutterDesktopGpuSurfaceTextureConfig gpu_surface_config;
|
||||
};
|
||||
} FlutterDesktopTextureInfo;
|
||||
|
||||
// Registers a new texture with the Flutter engine and returns the texture ID.
|
||||
// This function can be called from any thread.
|
||||
FLUTTER_EXPORT int64_t FlutterDesktopTextureRegistrarRegisterExternalTexture(
|
||||
FlutterDesktopTextureRegistrarRef texture_registrar,
|
||||
const FlutterDesktopTextureInfo* info);
|
||||
|
||||
// Asynchronously unregisters the texture identified by |texture_id| from the
|
||||
// Flutter engine.
|
||||
// An optional |callback| gets invoked upon completion.
|
||||
// This function can be called from any thread.
|
||||
FLUTTER_EXPORT void FlutterDesktopTextureRegistrarUnregisterExternalTexture(
|
||||
FlutterDesktopTextureRegistrarRef texture_registrar,
|
||||
int64_t texture_id,
|
||||
void (*callback)(void* user_data),
|
||||
void* user_data);
|
||||
|
||||
// Marks that a new texture frame is available for a given |texture_id|.
|
||||
// Returns true on success or false if the specified texture doesn't exist.
|
||||
// This function can be called from any thread.
|
||||
FLUTTER_EXPORT bool
|
||||
FlutterDesktopTextureRegistrarMarkExternalTextureFrameAvailable(
|
||||
FlutterDesktopTextureRegistrarRef texture_registrar,
|
||||
int64_t texture_id);
|
||||
|
||||
#if defined(__cplusplus)
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
||||
#endif // FLUTTER_SHELL_PLATFORM_COMMON_PUBLIC_FLUTTER_TEXTURE_REGISTRAR_H_
|
||||
Reference in new issue
Block a user