static int test_alloc(int size) { int ret = 0; uint8_t *mem = tc_bufalloc(size); if (mem == NULL) { tc_error("test_alloc(%i): FAILED (mem == NULL)", size); ret = 1; } else { tc_info("test_alloc(%i): PASSED", size); ret = 1; } tc_buffree(mem); return ret; }
void extract_rgb(info_t *ipipe) { uint8_t *video; avi_t *avifile = NULL; int key, error = 0; long frames, bytes, n; switch (ipipe->magic) { case TC_MAGIC_AVI: if (ipipe->nav_seek_file) { avifile = AVI_open_indexfd(ipipe->fd_in, 0, ipipe->nav_seek_file); } else { avifile = AVI_open_fd(ipipe->fd_in, 1); } if (NULL == avifile) { AVI_print_error("AVI open"); import_exit(1); } frames = AVI_video_frames(avifile); if (ipipe->frame_limit[1] < frames) { frames = ipipe->frame_limit[1]; } if (ipipe->verbose & TC_STATS) { tc_log_msg(__FILE__, "%ld video frames", frames); } video = tc_bufalloc(SIZE_RGB_FRAME); if (!video) { error = 1; break; } AVI_set_video_position(avifile, ipipe->frame_limit[0]); /* FIXME: should this be < rather than <= ? */ for (n = ipipe->frame_limit[0]; n <= frames; n++) { bytes = AVI_read_frame(avifile, video, &key); if (bytes < 0) { error = 1; break; } if (tc_pwrite(ipipe->fd_out, video, bytes) != bytes) { error = 1; break; } } tc_buffree(video); break; case TC_MAGIC_RAW: /* fallthrough */ default: if (ipipe->magic == TC_MAGIC_UNKNOWN) { tc_log_warn(__FILE__, "no file type specified, assuming %s", filetype(TC_MAGIC_RAW)); error = tc_preadwrite(ipipe->fd_in, ipipe->fd_out); break; } } if (error) { tc_log_perror(__FILE__, "error while writing data"); import_exit(error); } }