67 lines
2.9 KiB
C
67 lines
2.9 KiB
C
/* utils.h
|
|
|
|
Copyright (c) 2003-2025 HandBrake Team
|
|
This file is part of the HandBrake source code
|
|
Homepage: <http://handbrake.fr/>.
|
|
It may be used under the terms of the GNU General Public License v2.
|
|
For full terms see the file COPYING file or visit http://www.gnu.org/licenses/gpl-2.0.html
|
|
*/
|
|
|
|
#ifndef HB_METAL_UTILS_H
|
|
#define HB_METAL_UTILS_H
|
|
|
|
#include <Metal/Metal.h>
|
|
#include <CoreVideo/CoreVideo.h>
|
|
#include "libavutil/avutil.h"
|
|
|
|
struct hb_metal_context_s
|
|
{
|
|
id<MTLDevice> device;
|
|
id<MTLLibrary> library;
|
|
id<MTLCommandQueue> queue;
|
|
id<MTLBuffer> params_buffer;
|
|
id<MTLComputePipelineState> *pipelines;
|
|
id<MTLFunction> *functions;
|
|
size_t pipelines_count;
|
|
|
|
CVMetalTextureCacheRef cache;
|
|
CVPixelBufferPoolRef pool;
|
|
};
|
|
typedef struct hb_metal_context_s hb_metal_context_t;
|
|
|
|
hb_metal_context_t * hb_metal_context_init(const char *metallib_data,
|
|
size_t metallib_len,
|
|
const char *function_name,
|
|
MTLFunctionConstantValues *constant_values,
|
|
size_t params_buffer_len,
|
|
int width, int height,
|
|
int pix_fmt, int color_range);
|
|
|
|
void hb_metal_context_close(hb_metal_context_t **_ctx);
|
|
|
|
void hb_metal_compute_encoder_dispatch(id<MTLDevice> device,
|
|
id<MTLComputePipelineState> pipeline,
|
|
id<MTLComputeCommandEncoder> encoder,
|
|
NSUInteger width, NSUInteger height);
|
|
|
|
void hb_metal_compute_encoder_dispatch_fixed_threadgroup_size(id<MTLDevice> device,
|
|
id<MTLComputePipelineState> pipeline,
|
|
id<MTLComputeCommandEncoder> encoder,
|
|
NSUInteger width, NSUInteger height,
|
|
NSUInteger w, NSUInteger h);
|
|
|
|
MTLPixelFormat hb_metal_pix_fmt_from_component(const AVComponentDescriptor *comp,
|
|
int readwrite,
|
|
int *channels_out);
|
|
|
|
CVMetalTextureRef hb_metal_create_texture_from_pixbuf(CVMetalTextureCacheRef textureCache,
|
|
CVPixelBufferRef pixbuf,
|
|
int plane,
|
|
int channels,
|
|
MTLPixelFormat format);
|
|
|
|
int hb_metal_add_pipeline(hb_metal_context_t *ctx, const char *function_name,
|
|
MTLFunctionConstantValues *constant_values, size_t index);
|
|
|
|
#endif /* HB_METAL_UTILS_H */
|