maa_framework/custom/
custom_recognizer.rs1use crate::{
2 buffer::{image_buffer::MaaImageBuffer, rect_buffer::MaaRectBuffer},
3 internal,
4 string,
5 sync_context::MaaSyncContext,
6};
7
8#[allow(unused)]
9pub trait MaaCustomRecognizer {
10 fn analyze(
11 &mut self,
12 sync_context: MaaSyncContext,
13 image: MaaImageBuffer,
14 task_name: String,
15 custom_recognition_param: String,
16 out_rect: MaaRectBuffer,
17 ) -> Option<String> {
18 None
19 }
20}
21
22pub(crate) unsafe extern "C" fn custom_recognier_analyze<R>(
23 sync_context: internal::MaaSyncContextHandle,
24 image: internal::MaaImageBufferHandle,
25 task_name: internal::MaaStringView,
26 custom_recognition_param: internal::MaaStringView,
27 recognizer: internal::MaaTransparentArg,
28 out_box: internal::MaaRectHandle,
29 out_string: internal::MaaStringBufferHandle,
30) -> internal::MaaBool
31where
32 R: MaaCustomRecognizer,
33{
34 let sync_context = MaaSyncContext::from(sync_context);
35 let image = MaaImageBuffer::from(image);
36 let task_name = string!(task_name);
37 let custom_recognition_param = string!(custom_recognition_param);
38 let recognizer = &mut *(recognizer as *mut R);
39 let out_box = MaaRectBuffer::from(out_box);
40 match recognizer.analyze(
41 sync_context,
42 image,
43 task_name,
44 custom_recognition_param,
45 out_box,
46 ) {
47 Some(string) => {
48 let string = internal::to_cstring(&string);
49 internal::MaaSetString(out_string, string);
50 internal::MaaBool::from(true)
51 }
52 None => internal::MaaBool::from(false),
53 }
54}