Lines Matching refs:fifo
126 FifoContext *fifo = avf->priv_data;
127 AVFormatContext *avf2 = fifo->avf;
131 ret = av_dict_copy(&format_options, fifo->format_options, 0);
165 FifoContext *fifo = avf->priv_data;
166 AVFormatContext *avf2 = fifo->avf;
183 FifoContext *fifo = avf->priv_data;
184 AVFormatContext *avf2 = fifo->avf;
189 if (fifo->timeshift && pkt->dts != AV_NOPTS_VALUE)
190 atomic_fetch_sub_explicit(&fifo->queue_duration, next_duration(avf, pkt, &ctx->last_received_dts), memory_order_relaxed);
226 FifoContext *fifo = avf->priv_data;
227 AVFormatContext *avf2 = fifo->avf;
266 static int is_recoverable(const FifoContext *fifo, int err_no) {
267 if (!fifo->attempt_recovery)
270 if (fifo->recover_any_error)
297 FifoContext *fifo = avf->priv_data;
303 if (fifo->recovery_wait_streamtime) {
312 if (fifo->max_recovery_attempts &&
313 ctx->recovery_nr >= fifo->max_recovery_attempts) {
316 fifo->max_recovery_attempts);
328 FifoContext *fifo = avf->priv_data;
333 if (!is_recoverable(fifo, err_no)) {
339 fifo->write_trailer_ret = fifo_thread_write_trailer(ctx);
344 ctx->last_recovery_ts = fifo->recovery_wait_streamtime ?
347 if (fifo->recovery_wait_streamtime) {
354 time_since_recovery = fifo->recovery_wait_time;
360 if (time_since_recovery < fifo->recovery_wait_time)
366 if (fifo->max_recovery_attempts) {
368 ctx->recovery_nr, fifo->max_recovery_attempts);
374 if (fifo->restart_with_keyframe && fifo->drop_pkts_on_overflow)
379 if (is_recoverable(fifo, ret)) {
399 FifoContext *fifo = avf->priv_data;
403 if (!fifo->recovery_wait_streamtime && ctx->recovery_nr > 0) {
405 int64_t time_to_wait = FFMAX(0, fifo->recovery_wait_time - time_since_recovery);
411 } while (ret == AVERROR(EAGAIN) && !fifo->drop_pkts_on_overflow);
413 if (ret == AVERROR(EAGAIN) && fifo->drop_pkts_on_overflow) {
425 FifoContext *fifo = avf->priv_data;
426 AVThreadMessageQueue *queue = fifo->queue;
427 FifoMessage msg = {fifo->timeshift ? FIFO_NOOP : FIFO_WRITE_HEADER, {0}};
451 * it sets the fifo->overflow_flag to 1 and drops packet.
454 pthread_mutex_lock(&fifo->overflow_flag_lock);
455 if (fifo->overflow_flag) {
457 if (fifo->restart_with_keyframe)
459 fifo->overflow_flag = 0;
462 pthread_mutex_unlock(&fifo->overflow_flag_lock);
467 if (fifo->timeshift)
468 while (atomic_load_explicit(&fifo->queue_duration, memory_order_relaxed) < fifo->timeshift)
478 fifo->write_trailer_ret = fifo_thread_write_trailer(&fifo_thread_ctx);
486 FifoContext *fifo = avf->priv_data;
494 fifo->avf = avf2;
522 FifoContext *fifo = avf->priv_data;
526 if (fifo->recovery_wait_streamtime && !fifo->drop_pkts_on_overflow) {
531 atomic_init(&fifo->queue_duration, 0);
532 fifo->last_sent_dts = AV_NOPTS_VALUE;
534 oformat = av_guess_format(fifo->format, avf->url, NULL);
544 ret = av_thread_message_queue_alloc(&fifo->queue, (unsigned) fifo->queue_size,
549 av_thread_message_queue_set_free_func(fifo->queue, free_message);
551 ret = pthread_mutex_init(&fifo->overflow_flag_lock, NULL);
554 fifo->overflow_flag_lock_initialized = 1;
561 FifoContext * fifo = avf->priv_data;
564 ret = pthread_create(&fifo->writer_thread, NULL, fifo_consumer_thread, avf);
576 FifoContext *fifo = avf->priv_data;
586 ret = av_thread_message_queue_send(fifo->queue, &msg,
587 fifo->drop_pkts_on_overflow ?
592 /* Queue is full, set fifo->overflow_flag to 1
595 pthread_mutex_lock(&fifo->overflow_flag_lock);
596 if (!fifo->overflow_flag)
597 fifo->overflow_flag = overflow_set = 1;
598 pthread_mutex_unlock(&fifo->overflow_flag_lock);
608 if (fifo->timeshift && pkt && pkt->dts != AV_NOPTS_VALUE)
609 atomic_fetch_add_explicit(&fifo->queue_duration, next_duration(avf, pkt, &fifo->last_sent_dts), memory_order_relaxed);
620 FifoContext *fifo= avf->priv_data;
623 av_thread_message_queue_set_err_recv(fifo->queue, AVERROR_EOF);
624 if (fifo->timeshift) {
636 atomic_fetch_add_explicit(&fifo->queue_duration, delay, memory_order_relaxed);
638 if (elapsed > fifo->timeshift)
641 ret = av_thread_message_queue_send(fifo->queue, &msg, AV_THREAD_MESSAGE_NONBLOCK);
643 atomic_store(&fifo->queue_duration, INT64_MAX);
646 ret = pthread_join(fifo->writer_thread, NULL);
653 ret = fifo->write_trailer_ret;
659 FifoContext *fifo = avf->priv_data;
661 avformat_free_context(fifo->avf);
662 av_thread_message_queue_free(&fifo->queue);
663 if (fifo->overflow_flag_lock_initialized)
664 pthread_mutex_destroy(&fifo->overflow_flag_lock);
672 {"queue_size", "Size of fifo queue", OFFSET(queue_size),
678 {"drop_pkts_on_overflow", "Drop packets on fifo queue overflow not to block encoder", OFFSET(drop_pkts_on_overflow),
699 {"timeshift", "Delay fifo output", OFFSET(timeshift),
713 .name = "fifo",