Go to the documentation of this file.
42 #define MAX_TST_PACKETS 128
43 #define SLEEPTIME_50_MS 50000
44 #define SLEEPTIME_10_MS 10000
69 return ctx->write_header_ret;
81 if (!
data->recover_after) {
84 data->recover_after--;
89 if (
data->sleep_time) {
91 while (slept < data->sleep_time) {
110 return ctx->write_trailer_ret;
118 if (!
ctx->print_deinit_summary)
121 printf(
"flush count: %d\n",
ctx->flush_count);
122 printf(
"pts seen nr: %d\n",
ctx->pts_written_nr);
124 for (
i = 0;
i <
ctx->pts_written_nr; ++
i ) {
130 #define OFF(x) offsetof(FifoTestMuxerContext, x)
132 {
"write_header_ret",
"write_header() return value",
OFF(write_header_ret),
134 {
"write_trailer_ret",
"write_trailer() return value",
OFF(write_trailer_ret),
136 {
"print_deinit_summary",
"print summary when deinitializing muxer",
OFF(print_deinit_summary),
149 .
p.
name =
"fifo_test",
171 memcpy(
pkt->
data, pkt_data,
sizeof(*pkt_data));
186 fprintf(stderr,
"Failed to create format context: %s\n",
193 fprintf(stderr,
"Failed to create stream: %s\n",
212 fprintf(stderr,
"Unexpected write_header failure: %s\n",
217 for (
i = 0;
i < 15;
i++ ) {
220 fprintf(stderr,
"Failed to prepare test packet: %s\n",
222 goto write_trailer_and_fail;
227 fprintf(stderr,
"Unexpected write_frame error: %s\n",
229 goto write_trailer_and_fail;
235 fprintf(stderr,
"Unexpected write_frame error during flushing: %s\n",
237 goto write_trailer_and_fail;
242 fprintf(stderr,
"Unexpected write_trailer error during flushing: %s\n",
248 write_trailer_and_fail:
262 fprintf(stderr,
"Unexpected write_header failure: %s\n",
268 for (
i = 0;
i < 6;
i++ ) {
271 fprintf(stderr,
"Failed to prepare test packet: %s\n",
283 duration = write_pkt_end - write_pkt_start;
285 fprintf(stderr,
"Writing packets to fifo muxer took too much time while testing"
286 "buffer overflow with drop_pkts_on_overflow was on.\n");
292 fprintf(stderr,
"Unexpected write_packet error: %s\n",
av_err2str(
ret));
298 fprintf(stderr,
"Unexpected write_trailer error: %s\n",
av_err2str(
ret));
320 #define BUFFER_SIZE 64
332 fprintf(stderr,
"Muxer initialization failed: %s\n",
av_err2str(
ret));
339 fprintf(stderr,
"Failed to parse options: %s\n",
av_err2str(
ret));
345 "print_deinit_summary=%d:write_header_ret=%d:write_trailer_ret=%d",
346 (
int)
test->print_summary_on_deinit,
test->write_header_ret,
347 test->write_trailer_ret);
350 if (
ret < 0 || ret1 < 0) {
351 fprintf(stderr,
"Failed to set options for test muxer: %s\n",
359 printf(
"%s: %s\n",
test->test_name,
ret < 0 ?
"fail" :
"ok");
374 {
fifo_basic_test,
"recovery test",
"attempt_recovery=1:recovery_wait_time=0",
375 0, 0, 0, {
AVERROR(ETIMEDOUT), 3, 0}},
395 int main(
int argc,
char *argv[])
397 int i,
ret, ret_all = 0;
401 if (!ret_all &&
ret < 0)
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
int64_t av_gettime_relative(void)
Get the current time in microseconds since some unspecified starting point.
static int fifo_test_packet(AVFormatContext *avf, AVPacket *pkt)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
static int run_test(const TestCase *test)
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
static void deinit(AVFormatContext *s)
static int fifo_overflow_drop_test(AVFormatContext *oc, AVDictionary **opts, AVPacket *pkt, const FailingMuxerPacketData *data)
int pts_written[MAX_TST_PACKETS]
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
AVIOInterruptCB interrupt_callback
Custom interrupt callbacks for the I/O layer.
static int fifo_test_header(AVFormatContext *avf)
int ff_check_interrupt(AVIOInterruptCB *cb)
Check if the user has requested to interrupt a blocking function associated with cb.
static int fifo_basic_test(AVFormatContext *oc, AVDictionary **opts, AVPacket *pkt, const FailingMuxerPacketData *pkt_data)
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
static void failing_deinit(AVFormatContext *avf)
static const AVOption fifo_test_options[]
int av_usleep(unsigned usec)
Sleep for a period of time.
av_warn_unused_result int avformat_write_header(AVFormatContext *s, AVDictionary **options)
Allocate the stream private data and write the stream header to an output media file.
static const AVClass failing_muxer_class
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
static int write_trailer(AVFormatContext *s1)
const char * av_default_item_name(void *ptr)
Return the context name.
uint8_t print_summary_on_deinit
int av_write_frame(AVFormatContext *s, AVPacket *pkt)
Write a packet to an output media file.
#define AV_OPT_FLAG_ENCODING_PARAM
A generic parameter which can be set by the user for muxing or encoding.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define FF_OFMT_FLAG_ALLOW_FLUSH
This flag indicates that the muxer stores data internally and supports flushing it.
static int initialize_fifo_tst_muxer_chain(AVFormatContext **oc, AVPacket **pkt)
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
FailingMuxerPacketData pkt_data
printf("static const uint8_t my_array[100] = {\n")
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
int av_write_trailer(AVFormatContext *s)
Write the stream trailer to an output media file and free the file private data.
int main(int argc, char *argv[])
#define i(width, name, range_min, range_max)
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
const FFOutputFormat ff_fifo_test_muxer
static int fifo_test_trailer(AVFormatContext *avf)
static int write_packet(Muxer *mux, OutputStream *ost, AVPacket *pkt)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
the frame and frame reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFrame structures Several references can point to the same frame buffer
void avformat_free_context(AVFormatContext *s)
Free an AVFormatContext and all its streams.
int av_dict_parse_string(AVDictionary **pm, const char *str, const char *key_val_sep, const char *pairs_sep, int flags)
Parse the key/value pairs list and add the parsed entries to a dictionary.
int(* test_func)(AVFormatContext *, AVDictionary **, AVPacket *, const FailingMuxerPacketData *pkt_data)
static int prepare_packet(AVPacket *pkt, const FailingMuxerPacketData *pkt_data, int64_t pts)
This structure stores compressed data.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
#define AVERROR_EXIT
Immediate exit was requested; the called function should not be restarted.
static void write_header(FFV1Context *f)
void * priv_data
Format private data.