Lines Matching refs:cntr

42 int container_recursive_read(struct container_context *cntr, void *buf,
49 while (consumed < byte_count && !cntr->interrupted) {
50 result = read(cntr->fd, dst + consumed, byte_count - consumed);
54 if (cntr->interrupted)
62 cntr->eof = true;
72 int container_recursive_write(struct container_context *cntr, void *buf,
79 while (consumed < byte_count && !cntr->interrupted) {
80 result = write(cntr->fd, src + consumed, byte_count - consumed);
84 if (cntr->interrupted)
116 int container_seek_offset(struct container_context *cntr, off_t offset)
120 pos = lseek(cntr->fd, offset, SEEK_SET);
146 int container_parser_init(struct container_context *cntr, int fd,
159 assert(cntr);
163 assert(cntr->fd == 0);
164 assert(cntr->private_data == NULL);
166 memset(cntr, 0, sizeof(*cntr));
168 cntr->fd = fd;
170 cntr->stdio = (cntr->fd == fileno(stdin));
171 if (cntr->stdio) {
172 if (isatty(cntr->fd)) {
181 err = set_nonblock_flag(cntr->fd);
186 err = container_recursive_read(cntr, cntr->magic, sizeof(cntr->magic));
194 if (!strncmp(cntr->magic, parser->magic, size))
200 cntr->magic_handled = false;
208 cntr->private_data = malloc(parser->private_size);
209 if (cntr->private_data == NULL)
211 memset(cntr->private_data, 0, parser->private_size);
214 cntr->type = CONTAINER_TYPE_PARSER;
215 cntr->process_bytes = container_recursive_read;
216 cntr->format = parser->format;
217 cntr->ops = &parser->ops;
218 cntr->max_size = parser->max_size;
219 cntr->verbose = verbose;
224 int container_builder_init(struct container_context *cntr, int fd,
236 assert(cntr);
240 assert(cntr->fd == 0);
241 assert(cntr->private_data == NULL);
243 memset(cntr, 0, sizeof(*cntr));
245 cntr->fd = fd;
247 cntr->stdio = (cntr->fd == fileno(stdout));
248 if (cntr->stdio) {
249 if (isatty(cntr->fd)) {
258 err = set_nonblock_flag(cntr->fd);
266 cntr->private_data = malloc(builder->private_size);
267 if (cntr->private_data == NULL)
269 memset(cntr->private_data, 0, builder->private_size);
272 cntr->type = CONTAINER_TYPE_BUILDER;
273 cntr->process_bytes = container_recursive_write;
274 cntr->format = builder->format;
275 cntr->ops = &builder->ops;
276 cntr->max_size = builder->max_size;
277 cntr->verbose = verbose;
282 int container_context_pre_process(struct container_context *cntr,
292 assert(cntr);
298 if (cntr->type == CONTAINER_TYPE_BUILDER)
299 byte_count = cntr->max_size;
301 if (cntr->ops->pre_process) {
302 err = cntr->ops->pre_process(cntr, format, samples_per_frame,
306 if (cntr->eof)
310 if (cntr->format == CONTAINER_FORMAT_RAW) {
326 cntr->bytes_per_sample = snd_pcm_format_physical_width(*format) / 8;
327 cntr->samples_per_frame = *samples_per_frame;
328 cntr->frames_per_second = *frames_per_second;
330 bytes_per_frame = cntr->bytes_per_sample * *samples_per_frame;
332 cntr->max_size -= cntr->max_size / bytes_per_frame;
334 if (cntr->verbose > 0) {
336 cntr_type_labels[cntr->type]);
338 cntr_format_labels[cntr->format]);
342 cntr->bytes_per_sample);
344 cntr->samples_per_frame);
346 cntr->frames_per_second);
347 if (cntr->type == CONTAINER_TYPE_PARSER) {
359 int container_context_process_frames(struct container_context *cntr,
369 assert(cntr);
370 assert(!cntr->eof);
374 bytes_per_frame = cntr->bytes_per_sample * cntr->samples_per_frame;
381 if (cntr->format == CONTAINER_FORMAT_RAW &&
382 cntr->type == CONTAINER_TYPE_PARSER && !cntr->magic_handled) {
383 memcpy(buf, cntr->magic, sizeof(cntr->magic));
384 buf += sizeof(cntr->magic);
385 byte_count -= sizeof(cntr->magic);
386 cntr->magic_handled = true;
390 if (cntr->handled_byte_count > cntr->max_size - byte_count)
391 byte_count = cntr->max_size - cntr->handled_byte_count;
395 err = cntr->process_bytes(cntr, buf, byte_count);
401 cntr->handled_byte_count += target_byte_count;
402 if (cntr->handled_byte_count == cntr->max_size)
403 cntr->eof = true;
410 int container_context_post_process(struct container_context *cntr,
415 assert(cntr);
418 if (cntr->verbose && cntr->handled_byte_count > 0) {
420 cntr->handled_byte_count);
424 if (!cntr->stdio && cntr->ops && cntr->ops->post_process) {
427 cntr->interrupted = false;
429 err = cntr->ops->post_process(cntr, cntr->handled_byte_count);
433 if (cntr->type == CONTAINER_TYPE_BUILDER)
434 fsync(cntr->fd);
439 if (cntr->bytes_per_sample == 0 || cntr->samples_per_frame == 0) {
442 *frame_count = cntr->handled_byte_count /
443 cntr->bytes_per_sample /
444 cntr->samples_per_frame;
450 void container_context_destroy(struct container_context *cntr)
452 assert(cntr);
454 if (cntr->private_data)
455 free(cntr->private_data);
457 cntr->fd = 0;
458 cntr->private_data = NULL;