Skip to content

Commit 61ee81d

Browse files
committed
Add OCR filter callbacks for media events and enable state management
1 parent 0c1314d commit 61ee81d

File tree

4 files changed

+84
-0
lines changed

4 files changed

+84
-0
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ target_sources(
8585
src/obs-utils.cpp
8686
src/tesseract-ocr-utils.cpp
8787
src/ocr-filter.cpp
88+
src/ocr-filter-callbacks.cpp
8889
src/ocr-filter-info.c
8990
src/text-render-helper.cpp)
9091

src/ocr-filter-callbacks.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
2+
#include "filter-data.h"
3+
#include "plugin-support.h"
4+
5+
#include <obs.h>
6+
7+
void media_play_callback(void *data_, calldata_t *cd)
8+
{
9+
UNUSED_PARAMETER(cd);
10+
filter_data *gf_ = static_cast<struct filter_data *>(data_);
11+
obs_log(LOG_INFO, "media_play");
12+
gf_->isDisabled = false;
13+
}
14+
15+
void media_started_callback(void *data_, calldata_t *cd)
16+
{
17+
UNUSED_PARAMETER(cd);
18+
filter_data *gf_ = static_cast<struct filter_data *>(data_);
19+
obs_log(LOG_INFO, "media_started");
20+
gf_->isDisabled = false;
21+
}
22+
23+
void media_pause_callback(void *data_, calldata_t *cd)
24+
{
25+
UNUSED_PARAMETER(cd);
26+
filter_data *gf_ = static_cast<struct filter_data *>(data_);
27+
obs_log(LOG_INFO, "media_pause");
28+
gf_->isDisabled = true;
29+
}
30+
31+
void media_restart_callback(void *data_, calldata_t *cd)
32+
{
33+
UNUSED_PARAMETER(cd);
34+
filter_data *gf_ = static_cast<struct filter_data *>(data_);
35+
obs_log(LOG_INFO, "media_restart");
36+
gf_->isDisabled = false;
37+
}
38+
39+
void media_stopped_callback(void *data_, calldata_t *cd)
40+
{
41+
UNUSED_PARAMETER(cd);
42+
filter_data *gf_ = static_cast<struct filter_data *>(data_);
43+
obs_log(LOG_INFO, "media_stopped");
44+
gf_->isDisabled = true;
45+
}
46+
47+
void enable_callback(void *data_, calldata_t *cd)
48+
{
49+
filter_data *gf_ = static_cast<struct filter_data *>(data_);
50+
bool enable = calldata_bool(cd, "enabled");
51+
if (enable) {
52+
obs_log(LOG_INFO, "enable_callback: enable");
53+
gf_->isDisabled = false;
54+
} else {
55+
obs_log(LOG_INFO, "enable_callback: disable");
56+
gf_->isDisabled = true;
57+
}
58+
}

src/ocr-filter-callbacks.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#pragma once
2+
3+
#include <callback/calldata.h>
4+
5+
void media_play_callback(void *data_, calldata_t *cd);
6+
void media_started_callback(void *data_, calldata_t *cd);
7+
void media_pause_callback(void *data_, calldata_t *cd);
8+
void media_restart_callback(void *data_, calldata_t *cd);
9+
void media_stopped_callback(void *data_, calldata_t *cd);
10+
void enable_callback(void *data_, calldata_t *cd);

src/ocr-filter.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "consts.h"
1818
#include "tesseract-ocr-utils.h"
1919
#include "ocr-filter.h"
20+
#include "ocr-filter-callbacks.h"
2021

2122
const char *ocr_filter_getname(void *unused)
2223
{
@@ -79,12 +80,14 @@ void ocr_filter_update(void *data, obs_data_t *settings)
7980
void ocr_filter_activate(void *data)
8081
{
8182
struct filter_data *tf = reinterpret_cast<filter_data *>(data);
83+
obs_log(LOG_INFO, "ocr_filter_activate");
8284
tf->isDisabled = false;
8385
}
8486

8587
void ocr_filter_deactivate(void *data)
8688
{
8789
struct filter_data *tf = reinterpret_cast<filter_data *>(data);
90+
obs_log(LOG_INFO, "ocr_filter_deactivate");
8891
tf->isDisabled = true;
8992
}
9093

@@ -119,13 +122,25 @@ void *ocr_filter_create(obs_data_t *settings, obs_source_t *source)
119122

120123
ocr_filter_update(tf, settings);
121124

125+
signal_handler_t *sh_filter = obs_source_get_signal_handler(tf->source);
126+
if (sh_filter == nullptr) {
127+
obs_log(LOG_ERROR, "Failed to get signal handler");
128+
tf->isDisabled = true;
129+
return nullptr;
130+
}
131+
132+
signal_handler_connect(sh_filter, "enable", enable_callback, tf);
133+
122134
return tf;
123135
}
124136

125137
void ocr_filter_destroy(void *data)
126138
{
127139
struct filter_data *tf = reinterpret_cast<filter_data *>(data);
128140

141+
signal_handler_t *sh_filter = obs_source_get_signal_handler(tf->source);
142+
signal_handler_disconnect(sh_filter, "enable", enable_callback, tf);
143+
129144
if (tf) {
130145
obs_enter_graphics();
131146
gs_texrender_destroy(tf->texrender);

0 commit comments

Comments
 (0)