int liblinphone_tester_after_each(void) { if (!liblinphone_tester_leak_detector_disabled){ int leaked_objects = belle_sip_object_get_object_count() - leaked_objects_count; if (leaked_objects > 0) { char* format = ms_strdup_printf("%d object%s leaked in suite [%s] test [%s], please fix that!", leaked_objects, leaked_objects>1?"s were":" was", bc_tester_current_suite_name(), bc_tester_current_test_name()); belle_sip_object_dump_active_objects(); belle_sip_object_flush_active_objects(); bc_tester_printf(ORTP_MESSAGE, format); ms_error("%s", format); all_leaks_buffer = ms_strcat_printf(all_leaks_buffer, "\n%s", format); } // prevent any future leaks { const char **tags = bc_tester_current_test_tags(); int leaks_expected = (tags && ((tags[0] && !strcmp(tags[0], "LeaksMemory")) || (tags[1] && !strcmp(tags[1], "LeaksMemory")))); // if the test is NOT marked as leaking memory and it actually is, we should make it fail if (!leaks_expected && leaked_objects > 0) { BC_FAIL("This test is leaking memory!"); return 1; // and reciprocally } else if (leaks_expected && leaked_objects == 0) { BC_FAIL("This test is not leaking anymore, please remove LeaksMemory tag!"); return 1; } } } if (manager_count != 0) { ms_fatal("%d Linphone core managers are still alive!", manager_count); } return 0; }
void registration_state_changed(struct _LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState cstate, const char *message){ stats* counters; ms_message("New registration state %s for user id [%s] at proxy [%s]\n" ,linphone_registration_state_to_string(cstate) ,linphone_proxy_config_get_identity(cfg) ,linphone_proxy_config_get_addr(cfg)); counters = get_stats(lc); switch (cstate) { case LinphoneRegistrationNone:counters->number_of_LinphoneRegistrationNone++;break; case LinphoneRegistrationProgress:counters->number_of_LinphoneRegistrationProgress++;break; case LinphoneRegistrationOk:counters->number_of_LinphoneRegistrationOk++;break; case LinphoneRegistrationCleared:counters->number_of_LinphoneRegistrationCleared++;break; case LinphoneRegistrationFailed:counters->number_of_LinphoneRegistrationFailed++;break; default: BC_FAIL("unexpected event");break; } }
static void test_video_processing_base (bool_t downscaling,bool_t rotate_clock_wise,bool_t flip) { MSVideoSize src_size = { MS_VIDEO_SIZE_VGA_W, MS_VIDEO_SIZE_VGA_H }; MSVideoSize dest_size = src_size; mblk_t * yuv_block2; YuvBuf yuv; int y_bytes_per_row = src_size.width + src_size.width%32 ; uint8_t* y = (uint8_t*)ms_malloc(y_bytes_per_row*src_size.height); /*to allow bloc to work with multiple of 32*/ int crcb_bytes_per_row = src_size.width/2 + (src_size.width/2)%32 ; uint8_t* cbcr = (uint8_t*)ms_malloc(crcb_bytes_per_row*src_size.height); int i,j; MSYuvBufAllocator *yba = ms_yuv_buf_allocator_new(); int factor=downscaling?2:1; int rotation = 0; if (rotate_clock_wise && flip) { ms_fatal("fix you test"); } if (rotate_clock_wise) { rotation = 90; dest_size.height=src_size.width; dest_size.width=src_size.height; } else if (flip) { rotation = 180; } dest_size.height = dest_size.height/factor; dest_size.width=dest_size.width/factor; for (i=0;i<src_size.height*src_size.width;i++) { y[i]=i%256; } for (i=0;i<src_size.height*src_size.width/2;i++) { cbcr[i]=i%256; } yuv_block2 = copy_ycbcrbiplanar_to_true_yuv_with_rotation_and_down_scale_by_2(yba, y ,cbcr ,rotation , dest_size.width , dest_size.height , y_bytes_per_row , crcb_bytes_per_row , 1 , downscaling); BC_ASSERT_FALSE(ms_yuv_buf_init_from_mblk(&yuv, yuv_block2)); BC_ASSERT_EQUAL(dest_size.width,yuv.w, int, "%d"); BC_ASSERT_EQUAL(dest_size.height,yuv.h, int, "%d"); if (rotate_clock_wise) { /*check y*/ for (i=0;i<yuv.h;i++) { for (j=0;j<yuv.w;j++) if (yuv.planes[0][i*yuv.strides[0]+j] != y[(yuv.w-1-j)*factor*y_bytes_per_row+i*factor]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[0][i*yuv.strides[0]+j],i*yuv.strides[0]+j,y[(yuv.w-1-j)*factor*y_bytes_per_row+i*factor]); BC_FAIL("bad y value"); break; } } /*check cb*/ for (i=0;i<yuv.h/2;i++) { for (j=0;j<yuv.w/2;j++) { if (yuv.planes[1][i*yuv.strides[1]+j] != cbcr[(yuv.w/2-1-j)*factor*crcb_bytes_per_row+2*i*factor]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[1][i*yuv.strides[1]+j],i*yuv.strides[1]+j,cbcr[(yuv.w/2-1-j)*factor*crcb_bytes_per_row+2*i*factor]); BC_FAIL("bad cb value"); break; } if (yuv.planes[2][i*yuv.strides[2]+j] != cbcr[(yuv.w/2-1-j)*factor*crcb_bytes_per_row+2*i*factor+1]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[2][i*yuv.strides[2]+j],i*yuv.strides[2]+j,cbcr[(yuv.w/2-1-j)*factor*crcb_bytes_per_row+2*i*factor+1]); BC_FAIL("bad cr value"); break; } } } } else if (flip) { /*check y*/ for (i=0;i<yuv.h;i++) { for (j=0;j<yuv.w;j++) if (yuv.planes[0][i*yuv.strides[0]+j] != y[(yuv.h-1-i)*factor*y_bytes_per_row+(yuv.w-1-j)*factor]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[0][i*yuv.strides[0]+j],i*yuv.strides[0]+j,y[(yuv.h-1-i)*factor*y_bytes_per_row+(yuv.w-1-j)*factor]); BC_FAIL("bad y value"); break; } } for (i=0;i<yuv.h/2;i++) { for (j=0;j<yuv.w/2;j++) { /*check cb*/ if (yuv.planes[1][i*yuv.strides[1]+j] != cbcr[(yuv.h/2-1-i)*factor*crcb_bytes_per_row+2*(yuv.w/2-1-j)*factor]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[1][i*yuv.strides[1]+j],i*yuv.strides[1]+j,cbcr[(yuv.h/2-1-i)*factor*crcb_bytes_per_row+2*(yuv.w/2-1-j)*factor]); BC_FAIL("bad cb value"); break; } /*check cr*/ if (yuv.planes[2][i*yuv.strides[2]+j] != cbcr[(yuv.h/2-1-i)*factor*crcb_bytes_per_row+2*(yuv.w/2-1-j)*factor+1]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[2][i*yuv.strides[2]+j],i*yuv.strides[2]+j,cbcr[(yuv.h/2-1-i)*factor*crcb_bytes_per_row+2*(yuv.w/2-1-j)*factor+1]); BC_FAIL("bad cr value"); break; } } } } else { /*check y*/ for (i=0;i<yuv.h;i++) { for (j=0;j<yuv.w;j++) if (yuv.planes[0][i*yuv.strides[0]+j] != y[i*factor*y_bytes_per_row+j*factor]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[0][i*yuv.strides[0]+j],i*yuv.strides[0]+j,y[i*factor*y_bytes_per_row+j*factor]); BC_FAIL("bad y value"); break; } } for (i=0;i<yuv.h/2;i++) { for (j=0;j<yuv.w/2;j++) { /*check cb*/ if (yuv.planes[1][i*yuv.strides[1]+j] != cbcr[i*factor*crcb_bytes_per_row+2*j*factor]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[1][i*yuv.strides[1]+j],i*yuv.strides[1]+j,cbcr[i*factor*crcb_bytes_per_row+2*j*factor]); BC_FAIL("bad cb value"); break; } /*check cr*/ if (yuv.planes[2][i*yuv.strides[2]+j] != cbcr[i*factor*crcb_bytes_per_row+2*j*factor+1]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[2][i*yuv.strides[2]+j],i*yuv.strides[2]+j,cbcr[i*factor*crcb_bytes_per_row+2*j*factor+1]); BC_FAIL("bad cr value"); break; } } } } freemsg(yuv_block2); ms_free(y); ms_free(cbcr); ms_yuv_buf_allocator_free(yba); }
static void test_video_processing (void) { MSVideoSize src_size = { MS_VIDEO_SIZE_VGA_W, MS_VIDEO_SIZE_VGA_H }; MSVideoSize src_dest = { MS_VIDEO_SIZE_VGA_W, MS_VIDEO_SIZE_VGA_H }; mblk_t * yuv_block2; YuvBuf yuv; int y_bytes_per_row = src_size.width + src_size.width%32 ; uint8_t* y = (uint8_t*)ms_malloc(y_bytes_per_row*src_size.height); /*to allow bloc to work with multiple of 32*/ int crcb_bytes_per_row = src_size.width/2 + (src_size.width/2)%32 ; uint8_t* cbcr = (uint8_t*)ms_malloc(crcb_bytes_per_row*src_size.height); int i,j; for (i=0;i<src_size.height*src_size.width;i++) { y[i]=i%256; } for (i=0;i<src_size.height*src_size.width/2;i++) { cbcr[i]=i%256; } yuv_block2 = copy_ycbcrbiplanar_to_true_yuv_with_rotation_and_down_scale_by_2( y ,cbcr ,0 , src_size.width , src_size.height , y_bytes_per_row , crcb_bytes_per_row , 1 , 0); BC_ASSERT_FALSE(ms_yuv_buf_init_from_mblk(&yuv, yuv_block2)); BC_ASSERT_EQUAL(src_dest.width,yuv.w, int, "%d"); BC_ASSERT_EQUAL(src_dest.height,yuv.h, int, "%d"); /*check y*/ for (i=0;i<yuv.h;i++) { for (j=0;j<yuv.w;j++) if (yuv.planes[0][i*yuv.strides[0]+j] != y[i*y_bytes_per_row+j]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[0][i*yuv.strides[0]+j],i*yuv.strides[0]+j,y[i*y_bytes_per_row+j]); BC_FAIL("bad y value"); break; } } /*check cb*/ for (i=0;i<yuv.h/2;i++) { for (j=0;j<yuv.w/2;j++) if (yuv.planes[1][i*yuv.strides[1]+j] != cbcr[i*crcb_bytes_per_row+2*j]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[1][i*yuv.strides[1]+j],i*yuv.strides[1]+j,y[i*crcb_bytes_per_row+2*j]); BC_FAIL("bad cb value"); break; } } /*check cr*/ for (i=0;i<yuv.h/2;i++) { for (j=0;j<yuv.w/2;j++) if (yuv.planes[2][i*yuv.strides[2]+j] != cbcr[i*crcb_bytes_per_row+2*j+1]) { ms_error("Wrong value [%i] at ofset [%i], should be [%i]",yuv.planes[2][i*yuv.strides[2]+j],i*yuv.strides[2]+j,y[i*crcb_bytes_per_row+2*j+1]); BC_FAIL("bad cr value"); break; } } ms_free(y); ms_free(cbcr); }