mangayomi-mirror/packages/media_kit_video/linux/video_output_manager.cc
kodjomoustapha 7cd4ab860c fix #206
2024-06-29 10:48:47 +01:00

75 lines
3 KiB
C++

// This file is a part of media_kit
// (https://github.com/media-kit/media-kit).
//
// Copyright © 2021 & onwards, Hitesh Kumar Saini <saini123hitesh@gmail.com>.
// All rights reserved.
// Use of this source code is governed by MIT license that can be found in the
// LICENSE file.
#include "include/media_kit_video/video_output_manager.h"
struct _VideoOutputManager {
GObject parent_instance;
GHashTable* video_outputs;
FlTextureRegistrar* texture_registrar;
FlView* view;
};
G_DEFINE_TYPE(VideoOutputManager, video_output_manager, G_TYPE_OBJECT)
static void video_output_manager_init(VideoOutputManager* self) {
self->video_outputs = g_hash_table_new_full(g_direct_hash, g_direct_equal,
nullptr, g_object_unref);
}
static void video_output_manager_dispose(GObject* object) {
VideoOutputManager* self = VIDEO_OUTPUT_MANAGER(object);
g_hash_table_unref(self->video_outputs);
G_OBJECT_CLASS(video_output_manager_parent_class)->dispose(object);
}
static void video_output_manager_class_init(VideoOutputManagerClass* klass) {
G_OBJECT_CLASS(klass)->dispose = video_output_manager_dispose;
}
VideoOutputManager* video_output_manager_new(
FlTextureRegistrar* texture_registrar,
FlView* view) {
VideoOutputManager* video_output_manager = VIDEO_OUTPUT_MANAGER(
g_object_new(video_output_manager_get_type(), nullptr));
video_output_manager->texture_registrar = texture_registrar;
video_output_manager->view = view;
return video_output_manager;
}
void video_output_manager_create(VideoOutputManager* self,
gint64 handle,
VideoOutputConfiguration configuration,
TextureUpdateCallback texture_update_callback,
gpointer texture_update_callback_context) {
if (!g_hash_table_contains(self->video_outputs, GINT_TO_POINTER(handle))) {
g_autoptr(VideoOutput) video_output = video_output_new(
self->texture_registrar, self->view, handle, configuration);
video_output_set_texture_update_callback(
video_output, texture_update_callback, texture_update_callback_context);
g_hash_table_insert(self->video_outputs, GINT_TO_POINTER(handle),
g_object_ref(video_output));
}
}
void video_output_manager_set_size(VideoOutputManager* self,
gint64 handle,
gint64 width,
gint64 height) {
if (g_hash_table_contains(self->video_outputs, GINT_TO_POINTER(handle))) {
VideoOutput* video_output = VIDEO_OUTPUT(
g_hash_table_lookup(self->video_outputs, GINT_TO_POINTER(handle)));
video_output_set_size(video_output, width, height);
}
}
void video_output_manager_dispose(VideoOutputManager* self, gint64 handle) {
if (g_hash_table_contains(self->video_outputs, GINT_TO_POINTER(handle))) {
g_hash_table_remove(self->video_outputs, GINT_TO_POINTER(handle));
}
}