阿里sdk 回调机制例子

#include <stdio.h>

typedef enum {
    ITE_STATE_EVERYTHING,
    ITE_STATE_DEV_MODEL
}EVEN_E;

typedef struct {
    int eventid;
    void *callback;
} impl_event_map_t;

static impl_event_map_t g_impl_event_map[] = {
   {ITE_STATE_EVERYTHING,  NULL},
   {ITE_STATE_DEV_MODEL,   NULL}
};


#define IOT_RegisterCallback(evt, cb)           iotx_register_for_##evt(cb)
#define DECLARE_EVENT_CALLBACK(evt, cb)         int iotx_register_for_##evt(cb);
#define DEFINE_EVENT_CALLBACK(evt, cb)          int iotx_register_for_##evt(cb) { \
        if (evt < 0 || evt >= sizeof(g_impl_event_map)/sizeof(impl_event_map_t)) {return -1;} \
        g_impl_event_map[evt].callback = (void *)callback;return 0;}


/* 状态 */
typedef void (*sighandler_t)(int);
typedef int (*state_handler_t)(const int state_code, const char *state_message);
DECLARE_EVENT_CALLBACK(ITE_STATE_EVERYTHING, state_handler_t cb);
DECLARE_EVENT_CALLBACK(ITE_STATE_DEV_MODEL, state_handler_t cb);


DEFINE_EVENT_CALLBACK(ITE_STATE_EVERYTHING,  int (*callback)(const int, const char *))
DEFINE_EVENT_CALLBACK(ITE_STATE_DEV_MODEL,  int (*callback)(const int, const char *))



void *iotx_event_callback(int evt)
{
    if (evt < 0 || evt >= sizeof(g_impl_event_map) / sizeof(impl_event_map_t)) {
        return NULL;
    }
    return g_impl_event_map[evt].callback;
}


int everything_state_handle(const int state_code, const char *state_message);
int everything_state_handle2(const int state_code, const char * state_message);

int main(void)
{

    IOT_RegisterCallback(ITE_STATE_EVERYTHING, everything_state_handle); 
    IOT_RegisterCallback(ITE_STATE_DEV_MODEL, everything_state_handle2);  
    void *callback = NULL;
 

    int intstate_code = 123; 
    const char * state_message = "44444";

    callback = iotx_event_callback(ITE_STATE_EVERYTHING);
    if (callback)
    {
        ((int(*) (const int state_code, const char *state_message)) callback)(intstate_code, state_message);
    }


    intstate_code = 999; 
    state_message = "6666666";

    callback = iotx_event_callback(ITE_STATE_DEV_MODEL);
    if (callback)
    {
        ((int(*) (const int state_code, const char *state_message)) callback)(intstate_code, state_message);
    }
    
    while(1);
    return 0;
}


int everything_state_handle(const int state_code, const char * state_message)
{
    printf("code: %d, message: %s\r\n", state_code, state_message);
    return 0;
}


int everything_state_handle2(const int state_code, const char * state_message)
{
    printf("code: %d, message: %s\r\n", state_code, state_message);
    return 0;
}



在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
海康SDK是一种用于视频监控和安防系统的软件开发工具包,可以帮助开发者实现监控视频的采集、传输和播放等功能。在使用海康SDK时,可以通过回调函数来设置流类型。 回调函数是在特定事件发生时自动触发的函数,用于处理相应的事件。在海康SDK中,可以通过注册回调函数来处理视频流相关的事件,例如获取流数据、控制流的传输等。 要设置流类型,可以通过设置回调函数的参数来实现。在注册回调函数时,可以指定需要接收的视频流类型,比如主码流、子码流、双码流等。这样在接收到相应的流数据时,回调函数将会触发,并根据设置的流类型进行相应的处理。 具体来说,可以按照以下步骤设置流类型的回调: 1. 定义一个回调函数,用于接收视频流数据。 2. 在需要接收视频流的地方,使用SDK提供的函数注册回调函数,同时指定期望接收的流类型。 3. 在回调函数中,对接收到的视频流数据进行处理,可以进行解码、显示等操作。 例如,如果想要接收主码流,可以在注册回调函数时指定流类型为主码流。当有主码流数据到达时,回调函数将会触发,并将这些数据传递给相应的处理函数。通过这种方式,就可以实现对不同流类型的选择和处理。 总之,海康SDK提供了回调函数来设置流类型,通过注册回调函数并指定流类型,可以实现对不同类型的视频流进行处理和操作。这样可以满足不同应用场景对流的需求,提升视频监控和安防系统的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天使也有爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值