FFmpeg
Data Structures | Functions
sync_queue.c File Reference
#include <stdint.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/channel_layout.h"
#include "libavutil/cpu.h"
#include "libavutil/error.h"
#include "libavutil/fifo.h"
#include "libavutil/mathematics.h"
#include "libavutil/mem.h"
#include "libavutil/samplefmt.h"
#include "libavutil/timestamp.h"
#include "objpool.h"
#include "sync_queue.h"

Go to the source code of this file.

Data Structures

struct   SyncQueueStream
 
struct   SyncQueue
  A sync queue provides timestamp synchronization between multiple streams. More...
 

Functions

 
static int64_t  frame_end (const SyncQueue *sq, SyncQueueFrame frame, int nb_samples)
  Compute the end timestamp of a frame. More...
 
static int  frame_samples (const SyncQueue *sq, SyncQueueFrame frame)
 
static int  frame_null (const SyncQueue *sq, SyncQueueFrame frame)
 
static void  tb_update (const SyncQueue *sq, SyncQueueStream *st, const SyncQueueFrame frame)
 
static void  finish_stream (SyncQueue *sq, unsigned int stream_idx)
 
static void  queue_head_update (SyncQueue *sq)
 
static void  stream_update_ts (SyncQueue *sq, unsigned int stream_idx, int64_t ts)
 
static int  overflow_heartbeat (SyncQueue *sq, int stream_idx)
 
int  sq_send (SyncQueue *sq, unsigned int stream_idx, SyncQueueFrame frame)
  Submit a frame for the stream with index stream_idx. More...
 
static void  offset_audio (AVFrame *f, int nb_samples)
 
static int  frame_is_aligned (const SyncQueue *sq, const AVFrame *frame)
 
static int  receive_samples (SyncQueue *sq, SyncQueueStream *st, AVFrame *dst, int nb_samples)
 
static int  receive_for_stream (SyncQueue *sq, unsigned int stream_idx, SyncQueueFrame frame)
 
static int  receive_internal (SyncQueue *sq, int stream_idx, SyncQueueFrame frame)
 
int  sq_receive (SyncQueue *sq, int stream_idx, SyncQueueFrame frame)
  Read a frame from the queue. More...
 
int  sq_add_stream (SyncQueue *sq, int limiting)
  Add a new stream to the sync queue. More...
 
void  sq_limit_frames (SyncQueue *sq, unsigned int stream_idx, uint64_t frames)
  Limit the number of output frames for stream with index stream_idx to max_frames. More...
 
void  sq_frame_samples (SyncQueue *sq, unsigned int stream_idx, int frame_samples)
  Set a constant output audio frame size, in samples. More...
 
SyncQueuesq_alloc (enum SyncQueueType type, int64_t buf_size_us, void *logctx)
  Allocate a sync queue of the given type. More...
 
void  sq_free (SyncQueue **psq)
 

Function Documentation

frame_move()

static void frame_move ( const SyncQueuesq,
SyncQueueFrame  src 
)
static

Definition at line 115 of file sync_queue.c.

Referenced by receive_for_stream(), and sq_send().

frame_end()

static int64_t frame_end ( const SyncQueuesq,
SyncQueueFrame  frame,
int  nb_samples 
)
static

Compute the end timestamp of a frame.

If nb_samples is provided, consider the frame to have this number of audio samples, otherwise use frame duration.

Definition at line 128 of file sync_queue.c.

Referenced by bethsoftvid_decode_frame(), bfi_decode_frame(), decode_bmv_frame(), decode_dds1(), decode_dsw1(), decode_tdlt(), decode_tsw1(), decode_wdlt(), ff_h263_decode_frame(), get_duration(), overflow_heartbeat(), receive_for_stream(), sq_send(), and write_subframes().

frame_samples()

static int frame_samples ( const SyncQueuesq,
SyncQueueFrame  frame 
)
static

Definition at line 141 of file sync_queue.c.

Referenced by enc_open(), receive_for_stream(), sq_frame_samples(), sq_send(), and validate_options().

frame_null()

static int frame_null ( const SyncQueuesq,
SyncQueueFrame  frame 
)
static

Definition at line 146 of file sync_queue.c.

Referenced by sq_send().

tb_update()

static void tb_update ( const SyncQueuesq,
SyncQueueStreamst,
const SyncQueueFrame  frame 
)
static

Definition at line 151 of file sync_queue.c.

Referenced by sq_send().

finish_stream()

static void finish_stream ( SyncQueuesq,
unsigned int  stream_idx 
)
static

Definition at line 171 of file sync_queue.c.

Referenced by sq_limit_frames(), sq_send(), and stream_update_ts().

queue_head_update()

static void queue_head_update ( SyncQueuesq )
static

Definition at line 218 of file sync_queue.c.

Referenced by stream_update_ts().

stream_update_ts()

static void stream_update_ts ( SyncQueuesq,
unsigned int  stream_idx,
int64_t  ts 
)
static

Definition at line 253 of file sync_queue.c.

Referenced by overflow_heartbeat(), and sq_send().

overflow_heartbeat()

static int overflow_heartbeat ( SyncQueuesq,
int  stream_idx 
)
static

Definition at line 282 of file sync_queue.c.

Referenced by sq_receive().

sq_send()

int sq_send ( SyncQueuesq,
unsigned int  stream_idx,
SyncQueueFrame  frame 
)

Submit a frame for the stream with index stream_idx.

On success, the sync queue takes ownership of the frame and will reset the contents of the supplied frame. On failure, the frame remains owned by the caller.

Sending a frame with NULL contents marks the stream as finished.

Returns
  • 0 on success
  • AVERROR_EOF when no more frames should be submitted for this stream
  • another a negative error code on failure

Definition at line 343 of file sync_queue.c.

Referenced by send_to_enc_sq(), and sync_queue_process().

offset_audio()

static void offset_audio ( AVFramef,
int  nb_samples 
)
static

Definition at line 409 of file sync_queue.c.

Referenced by receive_samples().

frame_is_aligned()

static int frame_is_aligned ( const SyncQueuesq,
const AVFrameframe 
)
static

Definition at line 432 of file sync_queue.c.

Referenced by receive_for_stream(), and receive_samples().

receive_samples()

static int receive_samples ( SyncQueuesq,
SyncQueueStreamst,
AVFramedst,
int  nb_samples 
)
static

Definition at line 448 of file sync_queue.c.

Referenced by receive_for_stream().

receive_for_stream()

static int receive_for_stream ( SyncQueuesq,
unsigned int  stream_idx,
SyncQueueFrame  frame 
)
static

Definition at line 524 of file sync_queue.c.

Referenced by receive_internal().

receive_internal()

static int receive_internal ( SyncQueuesq,
int  stream_idx,
SyncQueueFrame  frame 
)
static

Definition at line 584 of file sync_queue.c.

Referenced by sq_receive().

sq_receive()

int sq_receive ( SyncQueuesq,
int  stream_idx,
SyncQueueFrame  frame 
)

Read a frame from the queue.

Parameters
stream_idx index of the stream to read a frame for. May be -1, then try to read a frame from any stream that is ready for output.
frame output frame will be written here on success. The frame is owned by the caller.
Returns
  • a non-negative index of the stream to which the returned frame belongs
  • AVERROR(EAGAIN) when more frames need to be submitted to the queue
  • AVERROR_EOF when no more frames will be available for this stream (for any stream if stream_idx is -1)
  • another negative error code on failure

Definition at line 608 of file sync_queue.c.

Referenced by send_to_enc_sq(), and sync_queue_process().

sq_add_stream()

int sq_add_stream ( SyncQueuesq,
int  limiting 
)

Add a new stream to the sync queue.

Parameters
limiting whether the stream is limiting, i.e. no other stream can be longer than this one
Returns
  • a non-negative stream index on success
  • a negative error code on error

Definition at line 620 of file sync_queue.c.

Referenced by sch_sq_add_enc(), and setup_sync_queues().

sq_limit_frames()

void sq_limit_frames ( SyncQueuesq,
unsigned int  stream_idx,
uint64_t  frames 
)

Limit the number of output frames for stream with index stream_idx to max_frames.

Definition at line 649 of file sync_queue.c.

Referenced by sch_sq_add_enc(), and setup_sync_queues().

sq_frame_samples()

void sq_frame_samples ( SyncQueuesq,
unsigned int  stream_idx,
int  frame_samples 
)

Set a constant output audio frame size, in samples.

Can only be used with SYNC_QUEUE_FRAMES queues and audio streams.

All output frames will have exactly frame_samples audio samples, except possibly for the last one, which may have fewer.

Definition at line 661 of file sync_queue.c.

Referenced by enc_open().

sq_alloc()

SyncQueue* sq_alloc ( enum SyncQueueType  type,
int64_t  buf_size_us,
void *  logctx 
)

Allocate a sync queue of the given type.

Parameters
buf_size_us maximum duration that will be buffered in microseconds

Definition at line 675 of file sync_queue.c.

Referenced by sch_add_sq_enc(), and setup_sync_queues().

sq_free()

void sq_free ( SyncQueue **  psq )

Definition at line 699 of file sync_queue.c.

Referenced by of_free(), and sch_free().


Generated on Fri Aug 22 2025 13:59:48 for FFmpeg by   doxygen 1.8.17

AltStyle によって変換されたページ (->オリジナル) /