72 crc =
av_crc(crc_table, crc, tagbuf, 4);
75 crc =
av_crc(crc_table, crc, buf, length);
90 "APNG muxer supports only a single video APNG stream.\n");
98 "Last frame delay is too precise. Reducing to %d/%d (%f).\n",
128 if (side_data_size) {
141 av_log(format_context,
AV_LOG_INFO,
"Only a single frame so saving as a normal PNG.\n");
145 if (existing_acTL_chunk) {
146 uint8_t *chunk_after_acTL = existing_acTL_chunk +
AV_RB32(existing_acTL_chunk) + 12;
155 if (existing_fcTL_chunk) {
156 uint8_t *chunk_after_fcTL = existing_fcTL_chunk +
AV_RB32(existing_fcTL_chunk) + 12;
172 if (!existing_acTL_chunk) {
183 if (existing_fcTL_chunk) {
186 existing_fcTL_chunk += 8;
187 delay.
num =
AV_RB16(existing_fcTL_chunk + 20);
188 delay.
den =
AV_RB16(existing_fcTL_chunk + 22);
190 if (delay.
num == 0 && delay.
den == 0) {
194 if (!
av_reduce(&delay.
num, &delay.
den, delay_num_raw, delay_den_raw, USHRT_MAX) &&
197 "Frame rate is too high or specified too precisely. Unable to copy losslessly.\n");
280 #define OFFSET(x) offsetof(APNGMuxContext, x)
281 #define ENC AV_OPT_FLAG_ENCODING_PARAM
283 {
"plays",
"Number of times to play the output: 0 - infinite loop, 1 - no loop",
OFFSET(plays),
285 {
"final_delay",
"Force delay after the last frame",
OFFSET(last_delay),
300 .mime_type =
"image/png",
301 .extensions =
"apng",
static void apng_deinit(AVFormatContext *s)
static int apng_write_trailer(AVFormatContext *format_context)
static int apng_write_packet(AVFormatContext *format_context, AVPacket *packet)
static const AVOption options[]
static const AVClass apng_muxer_class
static int apng_write_header(AVFormatContext *format_context)
static uint8_t * apng_find_chunk(uint32_t tag, uint8_t *buf, size_t length)
AVOutputFormat ff_apng_muxer
static void apng_write_chunk(AVIOContext *io_context, uint32_t tag, uint8_t *buf, size_t length)
static int flush_packet(AVFormatContext *format_context, AVPacket *packet)
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
void avio_wb32(AVIOContext *s, unsigned int val)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
void avio_wb64(AVIOContext *s, uint64_t val)
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, buffer_size_t *size)
#define flags(name, subs,...)
#define MKBETAG(a, b, c, d)
Public header for CRC hash function implementation.
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
static void write_header(FFV1Context *f)
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding.
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
@ AV_PKT_DATA_NEW_EXTRADATA
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
#define LIBAVUTIL_VERSION_INT
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
This struct describes the properties of an encoded stream.
int extradata_size
Size of the extradata content in bytes.
enum AVMediaType codec_type
General type of the encoded data.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
unsigned int nb_streams
Number of elements in AVFormatContext.streams.
AVIOContext * pb
I/O context.
void * priv_data
Format private data.
AVStream ** streams
A list of all streams in the file.
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
This structure stores compressed data.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Rational number (pair of numerator and denominator).
AVCodecParameters * codecpar
Codec parameters associated with this stream.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
static int write_trailer(AVFormatContext *s1)