FFmpeg
|
#include <stdatomic.h>
#include <stddef.h>
#include <stdint.h>
#include "cmdutils.h"
#include "ffmpeg_sched.h"
#include "ffmpeg_utils.h"
#include "sync_queue.h"
#include "thread_queue.h"
#include "libavcodec/packet.h"
#include "libavutil/avassert.h"
#include "libavutil/error.h"
#include "libavutil/fifo.h"
#include "libavutil/frame.h"
#include "libavutil/mem.h"
#include "libavutil/thread.h"
#include "libavutil/threadmessage.h"
#include "libavutil/time.h"
Go to the source code of this file.
Data Structures | |
struct | SchWaiter |
struct | SchTask |
struct | SchDecOutput |
struct | SchDec |
struct | SchSyncQueue |
struct | SchEnc |
struct | SchDemuxStream |
struct | SchDemux |
struct | PreMuxQueue |
struct | SchMuxStream |
struct | SchMux |
struct | SchFilterIn |
struct | SchFilterOut |
struct | SchFilterGraph |
struct | Scheduler |
Macros | |
#define | SCHEDULE_TOLERANCE (100 * 1000) |
Enumerations | |
enum | QueueType { QUEUE_PACKETS, QUEUE_FRAMES } |
enum | SchedulerState { SCH_STATE_UNINIT, SCH_STATE_STARTED, SCH_STATE_STOPPED } |
enum | { CYCLE_NODE_NEW = 0, CYCLE_NODE_STARTED, CYCLE_NODE_DONE } |
Functions | |
static int | waiter_wait (Scheduler *sch, SchWaiter *w) |
Wait until this task is allowed to proceed. More... | |
static void | waiter_set (SchWaiter *w, int choked) |
static int | waiter_init (SchWaiter *w) |
static void | waiter_uninit (SchWaiter *w) |
static int | queue_alloc (ThreadQueue **ptq, unsigned nb_streams, unsigned queue_size, enum QueueType type) |
static void * | task_wrapper (void *arg) |
static int | task_start (SchTask *task) |
static void | task_init (Scheduler *sch, SchTask *task, enum SchedulerNodeType type, unsigned idx, SchThreadFunc func, void *func_arg) |
static int64_t | trailing_dts (const Scheduler *sch, int count_finished) |
void | sch_free (Scheduler **psch) |
Scheduler * | sch_alloc (void) |
int | sch_sdp_filename (Scheduler *sch, const char *sdp_filename) |
Set the file path for the SDP. More... | |
int | sch_add_mux (Scheduler *sch, SchThreadFunc func, int(*init)(void *), void *arg, int sdp_auto, unsigned thread_queue_size) |
Add a muxer to the scheduler. More... | |
int | sch_add_mux_stream (Scheduler *sch, unsigned mux_idx) |
Add a muxed stream for a previously added muxer. More... | |
int | sch_add_demux (Scheduler *sch, SchThreadFunc func, void *ctx) |
Add a demuxer to the scheduler. More... | |
int | sch_add_demux_stream (Scheduler *sch, unsigned demux_idx) |
Add a demuxed stream for a previously added demuxer. More... | |
int | sch_add_dec_output (Scheduler *sch, unsigned dec_idx) |
Add another output to decoder (e.g. More... | |
int | sch_add_dec (Scheduler *sch, SchThreadFunc func, void *ctx, int send_end_ts) |
Add a decoder to the scheduler. More... | |
int | sch_add_enc (Scheduler *sch, SchThreadFunc func, void *ctx, int(*open_cb)(void *opaque, const AVFrame *frame)) |
int | sch_add_filtergraph (Scheduler *sch, unsigned nb_inputs, unsigned nb_outputs, SchThreadFunc func, void *ctx) |
Add a filtergraph to the scheduler. More... | |
int | sch_add_sq_enc (Scheduler *sch, uint64_t buf_size_us, void *logctx) |
Add an pre-encoding sync queue to the scheduler. More... | |
int | sch_sq_add_enc (Scheduler *sch, unsigned sq_idx, unsigned enc_idx, int limiting, uint64_t max_frames) |
int | sch_connect (Scheduler *sch, SchedulerNode src, SchedulerNode dst) |
static int | mux_task_start (SchMux *mux) |
int | print_sdp (const char *filename) |
static int | mux_init (Scheduler *sch, SchMux *mux) |
void | sch_mux_stream_buffering (Scheduler *sch, unsigned mux_idx, unsigned stream_idx, size_t data_threshold, int max_packets) |
Configure limits on packet buffering performed before the muxer task is started. More... | |
int | sch_mux_stream_ready (Scheduler *sch, unsigned mux_idx, unsigned stream_idx) |
Signal to the scheduler that the specified muxed stream is initialized and ready. More... | |
int | sch_mux_sub_heartbeat_add (Scheduler *sch, unsigned mux_idx, unsigned stream_idx, unsigned dec_idx) |
static void | unchoke_for_stream (Scheduler *sch, SchedulerNode src) |
static void | choke_demux (const Scheduler *sch, int demux_id, int choked) |
static void | schedule_update_locked (Scheduler *sch) |
static SchedulerNode | src_filtergraph (const Scheduler *sch, SchedulerNode src) |
static int | check_acyclic_for_output (const Scheduler *sch, SchedulerNode src, uint8_t *filters_visited, SchedulerNode *filters_stack) |
static int | check_acyclic (Scheduler *sch) |
static int | start_prepare (Scheduler *sch) |
int | sch_start (Scheduler *sch) |
int | sch_wait (Scheduler *sch, uint64_t timeout_us, int64_t *transcode_ts) |
Wait until transcoding terminates or the specified timeout elapses. More... | |
static int | enc_open (Scheduler *sch, SchEnc *enc, const AVFrame *frame) |
static int | send_to_enc_thread (Scheduler *sch, SchEnc *enc, AVFrame *frame) |
static int | send_to_enc_sq (Scheduler *sch, SchEnc *enc, AVFrame *frame) |
static int | send_to_enc (Scheduler *sch, SchEnc *enc, AVFrame *frame) |
static int | mux_queue_packet (SchMux *mux, SchMuxStream *ms, AVPacket *pkt) |
static int | send_to_mux (Scheduler *sch, SchMux *mux, unsigned stream_idx, AVPacket *pkt) |
static int | demux_stream_send_to_dst (Scheduler *sch, const SchedulerNode dst, uint8_t *dst_finished, AVPacket *pkt, unsigned flags) |
static int | demux_send_for_stream (Scheduler *sch, SchDemux *d, SchDemuxStream *ds, AVPacket *pkt, unsigned flags) |
static int | demux_flush (Scheduler *sch, SchDemux *d, AVPacket *pkt) |
int | sch_demux_send (Scheduler *sch, unsigned demux_idx, AVPacket *pkt, unsigned flags) |
Called by demuxer tasks to communicate with their downstreams. More... | |
static int | demux_done (Scheduler *sch, unsigned demux_idx) |
int | sch_mux_receive (Scheduler *sch, unsigned mux_idx, AVPacket *pkt) |
Called by muxer tasks to obtain packets for muxing. More... | |
void | sch_mux_receive_finish (Scheduler *sch, unsigned mux_idx, unsigned stream_idx) |
Called by muxer tasks to signal that a stream will no longer accept input. More... | |
int | sch_mux_sub_heartbeat (Scheduler *sch, unsigned mux_idx, unsigned stream_idx, const AVPacket *pkt) |
static int | mux_done (Scheduler *sch, unsigned mux_idx) |
int | sch_dec_receive (Scheduler *sch, unsigned dec_idx, AVPacket *pkt) |
Called by decoder tasks to receive a packet for decoding. More... | |
static int | send_to_filter (Scheduler *sch, SchFilterGraph *fg, unsigned in_idx, AVFrame *frame) |
static int | dec_send_to_dst (Scheduler *sch, const SchedulerNode dst, uint8_t *dst_finished, AVFrame *frame) |
int | sch_dec_send (Scheduler *sch, unsigned dec_idx, unsigned out_idx, AVFrame *frame) |
Called by decoder tasks to send a decoded frame downstream. More... | |
static int | dec_done (Scheduler *sch, unsigned dec_idx) |
int | sch_enc_receive (Scheduler *sch, unsigned enc_idx, AVFrame *frame) |
Called by encoder tasks to obtain frames for encoding. More... | |
static int | enc_send_to_dst (Scheduler *sch, const SchedulerNode dst, uint8_t *dst_finished, AVPacket *pkt) |
int | sch_enc_send (Scheduler *sch, unsigned enc_idx, AVPacket *pkt) |
Called by encoder tasks to send encoded packets downstream. More... | |
static int | enc_done (Scheduler *sch, unsigned enc_idx) |
int | sch_filter_receive (Scheduler *sch, unsigned fg_idx, unsigned *in_idx, AVFrame *frame) |
Called by filtergraph tasks to obtain frames for filtering. More... | |
void | sch_filter_receive_finish (Scheduler *sch, unsigned fg_idx, unsigned in_idx) |
Called by filter tasks to signal that a filter input will no longer accept input. More... | |
int | sch_filter_send (Scheduler *sch, unsigned fg_idx, unsigned out_idx, AVFrame *frame) |
Called by filtergraph tasks to send a filtered frame or EOF to consumers. More... | |
static int | filter_done (Scheduler *sch, unsigned fg_idx) |
int | sch_filter_command (Scheduler *sch, unsigned fg_idx, AVFrame *frame) |
void | sch_filter_choke_inputs (Scheduler *sch, unsigned fg_idx) |
Called by filtergraph tasks to choke all filter inputs, preventing them from receiving more frames until woken up again by the scheduler. More... | |
static int | task_cleanup (Scheduler *sch, SchedulerNode node) |
static int | task_stop (Scheduler *sch, SchTask *task) |
int | sch_stop (Scheduler *sch, int64_t *finish_ts) |
Variables | |
static const AVClass | scheduler_class |
static const AVClass | sch_mux_class |
static const AVClass | sch_demux_class |
static const AVClass | sch_dec_class |
static const AVClass | sch_enc_class |
static const AVClass | sch_fg_class |
#define SCHEDULE_TOLERANCE (100 * 1000) |
Definition at line 45 of file ffmpeg_sched.c.
enum QueueType |
Enumerator | |
---|---|
QUEUE_PACKETS | |
QUEUE_FRAMES |
Definition at line 47 of file ffmpeg_sched.c.
enum SchedulerState |
Enumerator | |
---|---|
SCH_STATE_UNINIT | |
SCH_STATE_STARTED | |
SCH_STATE_STOPPED |
Definition at line 267 of file ffmpeg_sched.c.
anonymous enum |
Enumerator | |
---|---|
CYCLE_NODE_NEW | |
CYCLE_NODE_STARTED | |
CYCLE_NODE_DONE |
Definition at line 1408 of file ffmpeg_sched.c.
Wait until this task is allowed to proceed.
0 | the caller should proceed |
1 | the caller should terminate |
Definition at line 320 of file ffmpeg_sched.c.
Referenced by sch_demux_send(), and sch_filter_receive().
|
static |
Definition at line 339 of file ffmpeg_sched.c.
Referenced by sch_stop(), and schedule_update_locked().
|
static |
Definition at line 349 of file ffmpeg_sched.c.
Referenced by sch_add_demux(), and sch_add_filtergraph().
|
static |
Definition at line 366 of file ffmpeg_sched.c.
Referenced by sch_free().
|
static |
Definition at line 372 of file ffmpeg_sched.c.
Referenced by sch_add_dec(), sch_add_enc(), sch_add_filtergraph(), and start_prepare().
|
static |
Definition at line 2596 of file ffmpeg_sched.c.
Referenced by task_start().
|
static |
Definition at line 404 of file ffmpeg_sched.c.
Referenced by mux_task_start(), and sch_start().
|
static |
Definition at line 423 of file ffmpeg_sched.c.
Referenced by sch_add_dec(), sch_add_demux(), sch_add_enc(), sch_add_filtergraph(), and sch_add_mux().
Definition at line 435 of file ffmpeg_sched.c.
Referenced by sch_stop(), and schedule_update_locked().
void sch_free | ( | Scheduler ** | psch | ) |
Definition at line 457 of file ffmpeg_sched.c.
Referenced by main(), and sch_alloc().
Scheduler* sch_alloc | ( | void | ) |
Definition at line 575 of file ffmpeg_sched.c.
Referenced by main().
int sch_sdp_filename | ( | Scheduler * | sch, |
const char * | sdp_filename | ||
) |
Set the file path for the SDP.
The SDP is written when either of the following is true:
Definition at line 609 of file ffmpeg_sched.c.
Referenced by opt_sdp_file().
int sch_add_mux | ( | Scheduler * | sch, |
SchThreadFunc | func, | ||
int(*)(void *) | init, | ||
void * | ctx, | ||
int | sdp_auto, | ||
unsigned | thread_queue_size | ||
) |
Add a muxer to the scheduler.
Note that muxer thread startup is more complicated than for other components, because
In order for the above to work, the scheduler needs to be able to invoke just writing the header, which is the reason the init parameter exists.
func | Function executed as the muxing task. |
init | Callback that is called to initialize the muxer and write the header. Called after sch_mux_stream_ready() is called for all the streams in the muxer. |
ctx | Muxer state; will be passed to func/init and used for logging. |
sdp_auto | Determines automatic SDP writing - see sch_sdp_filename(). |
thread_queue_size | number of packets that can be buffered before sending to the muxer blocks |
>=0 | Index of the newly-created muxer. |
<0 | Error code. |
Definition at line 622 of file ffmpeg_sched.c.
Referenced by of_open().
int sch_add_mux_stream | ( | Scheduler * | sch, |
unsigned | mux_idx | ||
) |
Add a muxed stream for a previously added muxer.
mux_idx | index previously returned by sch_add_mux() |
>=0 | Index of the newly-created muxed stream. |
<0 | Error code. |
Definition at line 646 of file ffmpeg_sched.c.
Referenced by ost_add().
int sch_add_demux | ( | Scheduler * | sch, |
SchThreadFunc | func, | ||
void * | ctx | ||
) |
Add a demuxer to the scheduler.
func | Function executed as the demuxer task. |
ctx | Demuxer state; will be passed to func and used for logging. |
>=0 | Index of the newly-created demuxer. |
<0 | Error code. |
Definition at line 678 of file ffmpeg_sched.c.
Referenced by ifile_open().
int sch_add_demux_stream | ( | Scheduler * | sch, |
unsigned | demux_idx | ||
) |
Add a demuxed stream for a previously added demuxer.
demux_idx | index previously returned by sch_add_demux() |
>=0 | Index of the newly-created demuxed stream. |
<0 | Error code. |
Definition at line 705 of file ffmpeg_sched.c.
Referenced by ist_use().
int sch_add_dec_output | ( | Scheduler * | sch, |
unsigned | dec_idx | ||
) |
Add another output to decoder (e.g.
for multiview video).
>=0 | Index of the newly-added decoder output. |
<0 | Error code. |
Definition at line 717 of file ffmpeg_sched.c.
Referenced by dec_request_view(), and sch_add_dec().
int sch_add_dec | ( | Scheduler * | sch, |
SchThreadFunc | func, | ||
void * | ctx, | ||
int | send_end_ts | ||
) |
Add a decoder to the scheduler.
func | Function executed as the decoder task. |
ctx | Decoder state; will be passed to func and used for logging. |
send_end_ts | The decoder will return an end timestamp after flush packets are delivered to it. See documentation for sch_dec_receive() for more details. |
>=0 | Index of the newly-created decoder. |
<0 | Error code. |
Definition at line 738 of file ffmpeg_sched.c.
Referenced by dec_alloc().
int sch_add_enc | ( | Scheduler * | sch, |
SchThreadFunc | func, | ||
void * | ctx, | ||
int(*)(void *opaque, const AVFrame *frame) | open_cb | ||
) |
Definition at line 781 of file ffmpeg_sched.c.
Referenced by ost_add().
int sch_add_filtergraph | ( | Scheduler * | sch, |
unsigned | nb_inputs, | ||
unsigned | nb_outputs, | ||
SchThreadFunc | func, | ||
void * | ctx | ||
) |
Add a filtergraph to the scheduler.
nb_inputs | Number of filtergraph inputs. |
nb_outputs | number of filtergraph outputs |
func | Function executed as the filtering task. |
ctx | Filter state; will be passed to func and used for logging. |
>=0 | Index of the newly-created filtergraph. |
<0 | Error code. |
Definition at line 819 of file ffmpeg_sched.c.
Referenced by fg_create().
int sch_add_sq_enc | ( | Scheduler * | sch, |
uint64_t | buf_size_us, | ||
void * | logctx | ||
) |
Add an pre-encoding sync queue to the scheduler.
buf_size_us | Sync queue buffering size, passed to sq_alloc(). |
logctx | Logging context for the sync queue. passed to sq_alloc(). |
>=0 | Index of the newly-created sync queue. |
<0 | Error code. |
Definition at line 861 of file ffmpeg_sched.c.
Referenced by setup_sync_queues().
int sch_sq_add_enc | ( | Scheduler * | sch, |
unsigned | sq_idx, | ||
unsigned | enc_idx, | ||
int | limiting, | ||
uint64_t | max_frames | ||
) |
Definition at line 886 of file ffmpeg_sched.c.
Referenced by setup_sync_queues().
int sch_connect | ( | Scheduler * | sch, |
SchedulerNode | src, | ||
SchedulerNode | dst | ||
) |
Definition at line 917 of file ffmpeg_sched.c.
Referenced by dec_create(), ifilter_bind_dec(), ifilter_bind_fg(), ifilter_bind_ist(), ist_use(), ofilter_bind_enc(), and ost_add().
|
static |
Definition at line 1095 of file ffmpeg_sched.c.
Referenced by mux_init().
int print_sdp | ( | const char * | filename | ) |
Definition at line 507 of file ffmpeg_mux.c.
Referenced by mux_init().
Definition at line 1159 of file ffmpeg_sched.c.
Referenced by sch_mux_stream_ready(), and sch_start().
void sch_mux_stream_buffering | ( | Scheduler * | sch, |
unsigned | mux_idx, | ||
unsigned | stream_idx, | ||
size_t | data_threshold, | ||
int | max_packets | ||
) |
Configure limits on packet buffering performed before the muxer task is started.
mux_idx | index previously returned by sch_add_mux() |
stream_idx_idx | index previously returned by sch_add_mux_stream() |
data_threshold | Total size of the buffered packets' data after which max_packets applies. |
max_packets | maximum Maximum number of buffered packets after data_threshold is reached. |
Definition at line 1195 of file ffmpeg_sched.c.
Referenced by ost_add().
int sch_mux_stream_ready | ( | Scheduler * | sch, |
unsigned | mux_idx, | ||
unsigned | stream_idx | ||
) |
Signal to the scheduler that the specified muxed stream is initialized and ready.
Muxing is started once all the streams are ready.
Definition at line 1211 of file ffmpeg_sched.c.
Referenced by of_stream_init().
int sch_mux_sub_heartbeat_add | ( | Scheduler * | sch, |
unsigned | mux_idx, | ||
unsigned | stream_idx, | ||
unsigned | dec_idx | ||
) |
Definition at line 1236 of file ffmpeg_sched.c.
Referenced by create_streams().
|
static |
Definition at line 1265 of file ffmpeg_sched.c.
Referenced by schedule_update_locked().
|
static |
Definition at line 1297 of file ffmpeg_sched.c.
Referenced by sch_stop(), and schedule_update_locked().
|
static |
Definition at line 1327 of file ffmpeg_sched.c.
Referenced by demux_done(), filter_done(), mux_done(), sch_filter_choke_inputs(), sch_filter_receive(), sch_filter_receive_finish(), sch_mux_receive_finish(), sch_start(), send_to_enc_sq(), and send_to_mux().
|
static |
Definition at line 1415 of file ffmpeg_sched.c.
Referenced by check_acyclic_for_output().
|
static |
Definition at line 1436 of file ffmpeg_sched.c.
Referenced by check_acyclic().
|
static |
Definition at line 1482 of file ffmpeg_sched.c.
Referenced by start_prepare().
|
static |
Definition at line 1518 of file ffmpeg_sched.c.
Referenced by sch_start().
int sch_start | ( | Scheduler * | sch | ) |
Definition at line 1634 of file ffmpeg_sched.c.
Referenced by transcode().
Wait until transcoding terminates or the specified timeout elapses.
timeout_us | Amount of time in microseconds after which this function will timeout. |
transcode_ts | Current transcode timestamp in AV_TIME_BASE_Q, for informational purposes only. |
0 | waiting timed out, transcoding is not finished |
1 | transcoding is finished |
Definition at line 1700 of file ffmpeg_sched.c.
Referenced by transcode().
Definition at line 1725 of file ffmpeg_sched.c.
Referenced by send_to_enc().
Definition at line 1751 of file ffmpeg_sched.c.
Referenced by send_to_enc(), and send_to_enc_sq().
Definition at line 1770 of file ffmpeg_sched.c.
Referenced by send_to_enc().
Definition at line 1846 of file ffmpeg_sched.c.
Referenced by dec_send_to_dst(), filter_done(), and sch_filter_send().
|
static |
Definition at line 1866 of file ffmpeg_sched.c.
Referenced by send_to_mux().
|
static |
Definition at line 1902 of file ffmpeg_sched.c.
Referenced by demux_stream_send_to_dst(), and enc_send_to_dst().
|
static |
Definition at line 1961 of file ffmpeg_sched.c.
Referenced by demux_send_for_stream().
|
static |
Definition at line 1996 of file ffmpeg_sched.c.
Referenced by demux_done(), and sch_demux_send().
Definition at line 2028 of file ffmpeg_sched.c.
Referenced by sch_demux_send().
Called by demuxer tasks to communicate with their downstreams.
The following may be sent:
demux_idx | demuxer index |
pkt | A demuxed packet to send. When flushing (i.e. pkt->stream_index=-1 on entry to this function), on successful return pkt->pts/pkt->time_base will be set to the maximum end timestamp of any decoded audio stream, or AV_NOPTS_VALUE if no decoded audio streams are present. |
non-negative value | success |
AVERROR_EOF | all consumers for the stream are done |
AVERROR_EXIT | all consumers are done, should terminate demuxing |
another negative error code | other failure |
Definition at line 2072 of file ffmpeg_sched.c.
Referenced by do_send(), and input_thread().
|
static |
Definition at line 2094 of file ffmpeg_sched.c.
Referenced by task_cleanup().
Called by muxer tasks to obtain packets for muxing.
Will wait for a packet for any muxed stream to become available and return it in pkt.
mux_idx | Muxer index previously returned by sch_add_mux(). |
pkt | Newly-received packet will be stored here on success. Must be clean on entrance to this function. |
0 | A packet was successfully delivered into pkt. Its stream_index corresponds to a stream index previously returned from sch_add_mux_stream(). |
AVERROR_EOF | When pkt->stream_index is non-negative, this signals that no more packets will be delivered for this stream index. Otherwise this indicates that no more packets will be delivered for any stream and the muxer should therefore flush everything and terminate. |
Definition at line 2116 of file ffmpeg_sched.c.
Referenced by muxer_thread().
void sch_mux_receive_finish | ( | Scheduler * | sch, |
unsigned | mux_idx, | ||
unsigned | stream_idx | ||
) |
Called by muxer tasks to signal that a stream will no longer accept input.
stream_idx | Stream index previously returned from sch_add_mux_stream(). |
Definition at line 2129 of file ffmpeg_sched.c.
Referenced by muxer_thread().
int sch_mux_sub_heartbeat | ( | Scheduler * | sch, |
unsigned | mux_idx, | ||
unsigned | stream_idx, | ||
const AVPacket * | pkt | ||
) |
Definition at line 2147 of file ffmpeg_sched.c.
Referenced by mux_packet_filter().
|
static |
Definition at line 2173 of file ffmpeg_sched.c.
Referenced by task_cleanup().
Called by decoder tasks to receive a packet for decoding.
dec_idx | decoder index |
pkt | Input packet will be written here on success. An empty packet signals that the decoder should be flushed, but more packets will follow (e.g. after seeking). When a decoder created with send_end_ts=1 receives a flush packet, it must write the end timestamp of the stream after flushing to pkt->pts/time_base on the next call to this function (if any). |
non-negative value | success |
AVERROR_EOF | no more packets will arrive, should terminate decoding |
another negative error code | other failure |
Definition at line 2200 of file ffmpeg_sched.c.
Referenced by decoder_thread().
|
static |
Definition at line 2229 of file ffmpeg_sched.c.
Referenced by dec_send_to_dst(), filter_done(), sch_filter_command(), and sch_filter_send().
|
static |
Definition at line 2246 of file ffmpeg_sched.c.
Referenced by dec_done(), and sch_dec_send().
Called by decoder tasks to send a decoded frame downstream.
dec_idx | Decoder index previously returned by sch_add_dec(). |
frame | Decoded frame; on success it is consumed and cleared by this function |
>=0 | success |
AVERROR_EOF | all consumers are done, should terminate decoding |
another negative error code | other failure |
Definition at line 2276 of file ffmpeg_sched.c.
Referenced by decoder_thread(), packet_decode(), process_subtitle(), and transcode_subtitles().
|
static |
Definition at line 2320 of file ffmpeg_sched.c.
Referenced by task_cleanup().
Called by encoder tasks to obtain frames for encoding.
Will wait for a frame to become available and return it in frame.
enc_idx | Encoder index previously returned by sch_add_enc(). |
frame | Newly-received frame will be stored here on success. Must be clean on entrance to this function. |
0 | A frame was successfully delivered into frame. |
AVERROR_EOF | No more frames will be delivered, the encoder should flush everything and terminate. |
Definition at line 2345 of file ffmpeg_sched.c.
Referenced by encoder_thread().
|
static |
Definition at line 2359 of file ffmpeg_sched.c.
Referenced by enc_done(), and sch_enc_send().
Called by encoder tasks to send encoded packets downstream.
enc_idx | Encoder index previously returned by sch_add_enc(). |
pkt | An encoded packet; it will be consumed and cleared by this function on success. |
0 | success |
<0 | Error code. |
Definition at line 2389 of file ffmpeg_sched.c.
Referenced by do_subtitle_out(), and encode_frame().
|
static |
Definition at line 2422 of file ffmpeg_sched.c.
Referenced by task_cleanup().
int sch_filter_receive | ( | Scheduler * | sch, |
unsigned | fg_idx, | ||
unsigned * | in_idx, | ||
struct AVFrame * | frame | ||
) |
Called by filtergraph tasks to obtain frames for filtering.
Will wait for a frame to become available and return it in frame.
Filtergraphs that contain lavfi sources and do not currently require new input frames should call this function as a means of rate control - then in_idx should be set equal to nb_inputs on entry to this function.
fg_idx | Filtergraph index previously returned by sch_add_filtergraph(). | |
[in,out] | in_idx | On input contains the index of the input on which a frame is most desired. May be set to nb_inputs to signal that the filtergraph does not need more input currently. |
On success, will be replaced with the input index of the actually returned frame or EOF timestamp.
>=0 | Frame data or EOF timestamp was delivered into frame, in_idx contains the index of the input it belongs to. |
AVERROR(EAGAIN) | No frame was returned, the filtergraph should resume filtering. May only be returned when in_idx=nb_inputs on entry to this function. |
AVERROR_EOF | No more frames will arrive, should terminate filtering. |
Definition at line 2438 of file ffmpeg_sched.c.
Referenced by filter_thread().
void sch_filter_receive_finish | ( | Scheduler * | sch, |
unsigned | fg_idx, | ||
unsigned | in_idx | ||
) |
Called by filter tasks to signal that a filter input will no longer accept input.
fg_idx | Filtergraph index previously returned from sch_add_filtergraph(). |
in_idx | Index of the input to finish. |
Definition at line 2482 of file ffmpeg_sched.c.
Referenced by filter_thread().
Called by filtergraph tasks to send a filtered frame or EOF to consumers.
fg_idx | Filtergraph index previously returned by sch_add_filtergraph(). |
out_idx | Index of the output which produced the frame. |
frame | The frame to send to consumers. When NULL, signals that no more frames will be produced for the specified output. When non-NULL, the frame is consumed and cleared by this function on success. |
non-negative value | success |
AVERROR_EOF | all consumers are done |
another negative error code | other failure |
Definition at line 2509 of file ffmpeg_sched.c.
Referenced by close_output(), and fg_output_frame().
|
static |
Definition at line 2533 of file ffmpeg_sched.c.
Referenced by task_cleanup().
Definition at line 2562 of file ffmpeg_sched.c.
Referenced by fg_send_command().
void sch_filter_choke_inputs | ( | Scheduler * | sch, |
unsigned | fg_idx | ||
) |
Called by filtergraph tasks to choke all filter inputs, preventing them from receiving more frames until woken up again by the scheduler.
Used during initial graph configuration to avoid unnecessary buffering.
Definition at line 2572 of file ffmpeg_sched.c.
Referenced by send_frame().
|
static |
Definition at line 2584 of file ffmpeg_sched.c.
Referenced by task_stop(), and task_wrapper().
Definition at line 2628 of file ffmpeg_sched.c.
Referenced by sch_stop().
Definition at line 2644 of file ffmpeg_sched.c.
Referenced by sch_free(), sch_start(), and transcode().
|
static |
Definition at line 570 of file ffmpeg_sched.c.
Referenced by sch_alloc().
|
static |
Definition at line 616 of file ffmpeg_sched.c.
Referenced by sch_add_mux().
|
static |
Definition at line 672 of file ffmpeg_sched.c.
Referenced by sch_add_demux().
|
static |
Definition at line 732 of file ffmpeg_sched.c.
Referenced by sch_add_dec().
|
static |
Definition at line 775 of file ffmpeg_sched.c.
Referenced by sch_add_enc().
|
static |
Definition at line 813 of file ffmpeg_sched.c.
Referenced by sch_add_filtergraph().