#include #include #include #include #include #include #include #include "histogram.h" /* Process-local diagnostic sink. It changes logging only, not capture policy. */ void printLog(const char *context,int level,const char *message_id, const char *file,const char *function,int line,const char *format,...) { (void)context;(void)level;(void)message_id;(void)file; fprintf(stderr,"LG %s:%d: ",function?function:"?",line); if(format){va_list args;va_start(args,format);vfprintf(stderr,format,args);va_end(args);}fputc('\n',stderr); } static bool policy(void) { fprintf(stderr,"Capture revoked by LG policy\n"); return true; } int main(void) { void *lib=dlopen("libvtcapture.so.1",RTLD_NOW); if(!lib){fprintf(stderr,"dlopen: %s\n",dlerror());return 1;} void *(*init)(bool(*)(void))=dlsym(lib,"vtCapture_initHistogram"); int (*preset)(void*,int)=dlsym(lib,"vtCapture_setPresetHistogram"); int (*get)(void*,Histogram*)=dlsym(lib,"vtCapture_getHistogram"); int (*finish)(void*)=dlsym(lib,"vtCapture_finalizeHistogram"); if(!init||!preset||!get||!finish)return 2; void *handle=init(policy); fprintf(stderr,"handle=%p\n",handle); if(!handle)return 3; int rc=preset(handle,0);fprintf(stderr,"preset=%d\n",rc); Histogram hist[16]; for(int frame=0;rc==0 && frame<3;frame++) { usleep(100000); rc=get(handle,hist); printf("frame=%d rc=%d\n",frame,rc); if(rc==0)for(int i=0;i<16;i++) {printf("region=%u",hist[i].id);for(int c=0;c<3;c++){uint64_t sum=0;for(int b=0;b<256;b++)sum+=hist[i].bins[c][b];printf(" ch%d_count=%llu mean=%u",c,(unsigned long long)sum,histogram_mean(hist[i].bins[c]));} puts("");} } fprintf(stderr,"finalize=%d\n",finish(handle)); return rc?4:0; }