59 #define MAX_SEEKHEAD_ENTRIES 7
61 #define IS_SEEKABLE(pb, mkv) (((pb)->seekable & AVIO_SEEKABLE_NORMAL) && \
120 #define MODE_MATROSKAv2 0x01
121 #define MODE_WEBM 0x02
165 #define MAX_EBML_HEADER_SIZE 35
169 #define MAX_SEEKENTRY_SIZE 21
172 #define MAX_CUETRACKPOS_SIZE 40
175 #define OPUS_SEEK_PREROLL 80000000
229 num |= 1ULL << bytes * 7;
230 for (
int i = bytes - 1;
i >= 0;
i--)
248 bytes = needed_bytes;
274 for (
i = bytes - 1;
i >= 0;
i--)
288 for (
i = bytes - 1;
i >= 0;
i--)
300 const void *buf,
int size)
338 uint64_t expectedsize)
383 int length_size,
int keep_buffer,
387 int ret,
size, skip = 0;
390 if ((ret = (*dyn_cp)->error) < 0)
491 int error_on_seek_failure,
int64_t destpos)
499 return error_on_seek_failure ? ret64 : 0;
525 if ((ret64 =
avio_seek(pb, destpos, SEEK_SET)) < 0)
566 uint64_t
pts = entry->pts;
574 for (
int j = 0; j < num_tracks; j++)
575 tracks[j].has_cue = 0;
578 int idx = entry->stream_idx;
588 if (entry->duration != -1)
591 }
while (++entry < end && entry->
pts ==
pts);
593 if ((ret = cuepoint->
error) < 0)
606 const uint8_t *header_start[3];
608 int first_header_size;
612 first_header_size = 30;
614 first_header_size = 42;
617 first_header_size, header_start, header_len);
624 for (j = 0; j < 2; j++) {
627 for (j = 0; j < 3; j++)
628 avio_write(pb, header_start[j], header_len[j]);
662 av_dict_set(&dict,
"WAVEFORMATEXTENSIBLE_CHANNEL_MASK", buf, 0);
679 const uint8_t *extradata,
int extradata_size,
691 if (ret < 0 && (extradata_size || !
IS_SEEKABLE(
s->pb, mkv))) {
693 "Error parsing AAC extradata, unable to determine samplerate.\n");
739 "Invalid extradata found, ALAC expects a 36-byte "
765 int native_id,
int qt_id)
770 int ret, codecpriv_size;
789 for(
i = 0;
i < 0x5a - 8;
i++)
825 if ((ret = dyn_cp->
error) >= 0 && codecpriv_size)
839 uint8_t colour[(2 + 1 + 8) * 18 + (2 + 1) + 1];
842 const void *side_data;
941 4 * (2 + 1 + 8) + (2 + 1 + 20));
974 (
double) spherical->
yaw / (1 << 16));
975 if (spherical->
pitch)
977 (
double) spherical->
pitch / (1 << 16));
980 (
double) spherical->
roll / (1 << 16));
988 switch (field_order) {
1002 switch (field_order) {
1036 int stereo_mode = atoi(
tag->value);
1045 stereo_mode != 10 && stereo_mode != 12) {
1055 switch (stereo->
type) {
1105 "The specified stereo mode is not valid.\n");
1125 int output_sample_rate = 0;
1126 int display_width_div = 1;
1127 int display_height_div = 1;
1150 tag &&
tag->value[0] ?
tag->value :
"und");
1175 codec_id =
"D_WEBVTT/DESCRIPTIONS";
1188 "Only VP8 or VP9 or AV1 video and Vorbis or Opus audio and WebVTT subtitles are supported for WebM.\n");
1220 av_log(
s,
AV_LOG_ERROR,
"Raw RGB is not supported Natively in Matroska, you can use AVI or NUT or\n"
1221 "If you would like to store it anyway using VFW mode, enable allow_raw_vfw (-allow_raw_vfw 1)\n");
1249 else if (!native_id) {
1253 s->internal->avoid_negative_ts_use_pts = 0;
1267 &display_height_div);
1281 if (d_width > INT_MAX) {
1285 if (d_width != par->
width || display_width_div != 1 || display_height_div != 1) {
1286 if (mkv->
mode ==
MODE_WEBM || display_width_div != 1 || display_height_div != 1) {
1300 }
else if (display_width_div != 1 || display_height_div != 1) {
1321 if (codecdelay < 0) {
1345 if (output_sample_rate)
1376 av_log(
s,
AV_LOG_ERROR,
"Only audio, video, and subtitles are supported for Matroska.\n");
1396 int i, ret, video_default_idx, audio_default_idx, subtitle_default_idx;
1406 int video_idx, audio_idx, subtitle_idx;
1408 video_idx = video_default_idx =
1409 audio_idx = audio_default_idx =
1410 subtitle_idx = subtitle_default_idx = -1;
1412 for (
i =
s->nb_streams - 1;
i >= 0;
i--) {
1416 #define CASE(type, variable) \
1417 case AVMEDIA_TYPE_ ## type: \
1418 variable ## _idx = i; \
1419 if (st->disposition & AV_DISPOSITION_DEFAULT) \
1420 variable ## _default_idx = i; \
1424 CASE(SUBTITLE, subtitle)
1429 video_default_idx =
FFMAX(video_default_idx, video_idx);
1430 audio_default_idx =
FFMAX(audio_default_idx, audio_idx);
1432 subtitle_default_idx =
FFMAX(subtitle_default_idx, subtitle_idx);
1434 for (
i = 0;
i <
s->nb_streams;
i++) {
1438 i == video_default_idx ||
i == audio_default_idx ||
1439 i == subtitle_default_idx;
1460 if ((p = strrchr(p,
'-')) &&
1468 else if (*p >=
'a' && *p <=
'z')
1520 uint32_t elementid, uint64_t
uid)
1571 for (
i = 0;
i <
s->nb_streams;
i++) {
1604 for (
i = 0;
i <
s->nb_streams;
i++) {
1630 for (
unsigned i = 0;
i <
s->nb_chapters;
i++) {
1631 if (!
s->chapters[
i]->id)
1633 for (
unsigned j = 0; j <
i; j++)
1634 if (
s->chapters[j]->id ==
s->chapters[
i]->id)
1646 int ret, create_new_ids;
1666 for (
unsigned i = 0;
i <
s->nb_chapters;
i++) {
1672 #if FF_API_CHAPTER_ID_INT
1673 uint64_t
uid = create_new_ids ?
i + 1ULL : (uint32_t)
c->id;
1675 uint64_t
uid = create_new_ids ?
i + 1ULL :
c->id;
1677 if (chapterstart < 0 || chapterstart > chapterend || chapterend < 0) {
1679 "Invalid chapter start (%"PRId64
") or end (%"PRId64
").\n",
1680 chapterstart, chapterend);
1734 return desc->mime_types[0];
1736 return "text/plain";
1755 for (
i = 0;
i <
s->nb_streams;
i++) {
1760 const char *mimetype;
1795 av_log(
s,
AV_LOG_DEBUG,
"get_metadata_duration found duration in context metadata: %" PRId64
"\n",
us);
1799 for (
unsigned i = 0;
i <
s->nb_streams;
i++) {
1825 for (
i = 0;
i <
s->nb_streams;
i++) {
1868 const char *ident =
"Lavf";
1875 int64_t date_utc = (creation_time - 978307200000000LL) * 1000;
1877 AV_WB64(date_utc_buf, date_utc);
1887 if (
s->duration > 0) {
1890 av_log(
s,
AV_LOG_DEBUG,
"Write early duration from recording time = %" PRIu64
"\n", scaledDuration);
1891 }
else if (metadata_duration > 0) {
1894 av_log(
s,
AV_LOG_DEBUG,
"Write early duration from metadata = %" PRIu64
"\n", scaledDuration);
1931 if (
s->metadata_header_padding > 0) {
1932 if (
s->metadata_header_padding == 1)
1933 s->metadata_header_padding++;
1968 int size = pkt_size + track_num_size + 3;
1995 if (srclen <
header.blocksize) {
2015 srclen -=
header.blocksize;
2029 uint32_t blockid,
const AVPacket *
pkt,
int keyframe)
2038 uint64_t additional_id;
2040 unsigned track_number = track->
track_num;
2041 ebml_master block_group, block_additions, block_more;
2048 "Writing block of size %d with pts %" PRId64
", dts %" PRId64
", "
2049 "duration %" PRId64
" at relative offset %" PRId64
" in cluster "
2050 "at offset %" PRId64
". TrackNumber %u, keyframe %d\n",
2084 if (side_data && side_data_size >= 10) {
2095 if (side_data_size < 8 || (additional_id =
AV_RB64(side_data)) != 1) {
2099 side_data_size -= 8;
2103 if (side_data_size || discard_padding) {
2121 if (discard_padding)
2124 if (side_data_size) {
2131 side_data, side_data_size);
2135 if (side_data_size || discard_padding)
2148 const char *
id, *settings;
2150 const int flags = 0;
2158 settings = settings ? settings :
"";
2160 size = id_size + 1 + settings_size + 1 +
pkt->
size;
2165 "Writing block of size %d with pts %" PRId64
", dts %" PRId64
", "
2166 "duration %" PRId64
" at relative offset %" PRId64
" in cluster "
2167 "at offset %" PRId64
". TrackNumber %u, keyframe %d\n",
2193 for (
unsigned i = 0;
i <
s->nb_streams;
i++)
2220 if (side_data_size && mkv->
track.
bc) {
2221 int filler, output_sample_rate = 0;
2226 if (!output_sample_rate)
2231 memcpy(par->
extradata, side_data, side_data_size);
2242 av_log(
s,
AV_LOG_ERROR,
"Error parsing AAC extradata, unable to determine samplerate.\n");
2247 if (side_data_size && mkv->
track.
bc) {
2272 if ((ret = dyn_cp->
error) < 0 ||
2284 memcpy(par->
extradata, side_data, side_data_size);
2317 if ((int16_t)cluster_time != cluster_time) {
2333 "Starting new cluster with timestamp "
2334 "%" PRId64
" at offset %" PRId64
" bytes\n",
2361 #if FF_API_CONVERGENCE_DURATION
2364 if (
pkt->convergence_duration > 0) {
2397 int start_new_cluster;
2416 start_new_cluster = keyframe;
2420 start_new_cluster = 1;
2425 cluster_size > 4 * 1024))) {
2426 start_new_cluster = 1;
2428 start_new_cluster = 0;
2430 if (start_new_cluster) {
2448 "Could not write cached audio packet ret:%d\n", ret);
2473 "Flushing cluster at offset %" PRIu64
" bytes\n",
2493 "Could not write cached audio packet ret:%d\n", ret);
2517 int length_size = 0;
2533 size += 4 + length_size;
2536 "Insufficient space reserved for Cues: "
2537 "%d < %"PRIu64
". No Cues will be output.\n",
2562 if (size < mkv->reserve_cues_space)
2604 for (
i = 0;
i <
s->nb_streams; ++
i) {
2610 char duration_string[20] =
"";
2617 snprintf(duration_string, 20,
"%02d:%02d:%012.9f",
2618 (
int) duration_sec / 3600, ((
int) duration_sec / 60) % 60,
2619 fmod(duration_sec, 60));
2673 for (k = 0; k <
i; k++) {
2674 if (tracks[k].
uid ==
uid)
2686 unsigned nb_tracks = 0;
2689 for (
i = 0;
i <
s->nb_streams;
i++) {
2697 "The Matroska muxer does not yet support muxing %s\n",
2703 if (
s->avoid_negative_ts < 0) {
2704 s->avoid_negative_ts = 1;
2705 s->internal->avoid_negative_ts_use_pts = 1;
2708 if (!strcmp(
s->oformat->name,
"webm")) {
2725 for (
i = 0;
i < 4;
i++)
2729 for (
i = 0;
i <
s->nb_streams;
i++) {
2745 "as WebM doesn't support attachments.\n",
i);
2748 "tag and it cannot be deduced from the codec id.\n",
i);
2760 if (mkv->
is_dash && nb_tracks != 1)
2811 #define OFFSET(x) offsetof(MatroskaMuxContext, x)
2812 #define FLAGS AV_OPT_FLAG_ENCODING_PARAM
2814 {
"reserve_index_space",
"Reserve a given amount of space (in bytes) at the beginning of the file for the index (cues).",
OFFSET(reserve_cues_space),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
FLAGS },
2815 {
"cluster_size_limit",
"Store at most the provided amount of bytes in a cluster. ",
OFFSET(cluster_size_limit),
AV_OPT_TYPE_INT , { .i64 = -1 }, -1, INT_MAX,
FLAGS },
2816 {
"cluster_time_limit",
"Store at most the provided number of milliseconds in a cluster.",
OFFSET(cluster_time_limit),
AV_OPT_TYPE_INT64, { .i64 = -1 }, -1, INT64_MAX,
FLAGS },
2817 {
"dash",
"Create a WebM file conforming to WebM DASH specification",
OFFSET(is_dash),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
FLAGS },
2818 {
"dash_track_number",
"Track number for the DASH stream",
OFFSET(dash_track_number),
AV_OPT_TYPE_INT, { .i64 = 1 }, 1, INT_MAX,
FLAGS },
2821 {
"flipped_raw_rgb",
"Raw RGB bitmaps in VFW mode are stored bottom-up",
OFFSET(flipped_raw_rgb),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
FLAGS },
2822 {
"write_crc32",
"write a CRC32 element inside every Level 1 element",
OFFSET(write_crc),
AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1,
FLAGS },
2824 {
"infer",
"For each track type, mark the first track of disposition default as default; if none exists, mark the first track as default.", 0,
AV_OPT_TYPE_CONST, { .i64 =
DEFAULT_MODE_INFER }, 0, 0,
FLAGS,
"default_mode" },
2825 {
"infer_no_subs",
"For each track type, mark the first track of disposition default as default; for audio and video: if none exists, mark the first track as default.", 0,
AV_OPT_TYPE_CONST, { .i64 =
DEFAULT_MODE_INFER_NO_SUBS }, 0, 0,
FLAGS,
"default_mode" },
2830 #if CONFIG_MATROSKA_MUXER
2831 static const AVClass matroska_class = {
2841 .mime_type =
"video/x-matroska",
2842 .extensions =
"mkv",
2862 .priv_class = &matroska_class,
2866 #if CONFIG_WEBM_MUXER
2867 static const AVClass webm_class = {
2877 .mime_type =
"video/webm",
2878 .extensions =
"webm",
2892 .priv_class = &webm_class,
2896 #if CONFIG_MATROSKA_AUDIO_MUXER
2897 static const AVClass mka_class = {
2906 .mime_type =
"audio/x-matroska",
2907 .extensions =
"mka",
2923 .priv_class = &mka_class,
static double val(void *priv, double ch)
static const char *const format[]
static void bit_depth(AudioStatsContext *s, uint64_t mask, uint64_t imask, AVRational *depth)
int ff_av1_filter_obus_buf(const uint8_t *in, uint8_t **out, int *size, int *offset)
Filter out AV1 OBUs not meant to be present in ISOBMFF sample data and return the result in a data bu...
int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size)
Writes AV1 extradata (Sequence Header and Metadata OBUs) to the provided AVIOContext.
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
int ff_isom_write_avcc(AVIOContext *pb, const uint8_t *data, int len)
int ff_avc_parse_nal_units_buf(const uint8_t *buf_in, uint8_t **buf, int *size)
#define FF_COMPLIANCE_NORMAL
void avio_write_marker(AVIOContext *s, int64_t time, enum AVIODataMarkerType type)
Mark the written bytestream as a specific type.
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_wl32(AVIOContext *s, unsigned int val)
void avio_wl16(AVIOContext *s, unsigned int val)
void avio_w8(AVIOContext *s, int b)
void avio_wb32(AVIOContext *s, unsigned int val)
void avio_wb16(AVIOContext *s, unsigned int val)
@ AVIO_DATA_MARKER_BOUNDARY_POINT
A point in the output bytestream where a demuxer can start parsing (for non self synchronizing bytest...
@ AVIO_DATA_MARKER_FLUSH_POINT
A point in the output bytestream where the underlying AVIOContext might flush the buffer depending on...
@ AVIO_DATA_MARKER_SYNC_POINT
A point in the output bytestream where a decoder can start decoding (i.e.
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
int avio_printf(AVIOContext *s, const char *fmt,...) av_printf_format(2
Writes a formatted string to the context.
void avio_wb24(AVIOContext *s, unsigned int val)
void avio_wb64(AVIOContext *s, uint64_t val)
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
int avio_open_dyn_buf(AVIOContext **s)
Open a write only memory stream.
int avio_get_dyn_buf(AVIOContext *s, uint8_t **pbuffer)
Return the written size and a pointer to the buffer.
void ffio_free_dyn_buf(AVIOContext **s)
Free a dynamic buffer.
void ffio_reset_dyn_buf(AVIOContext *s)
Reset a dynamic buffer.
void ffio_fill(AVIOContext *s, int b, int count)
int ffio_init_context(AVIOContext *s, unsigned char *buffer, int buffer_size, int write_flag, void *opaque, int(*read_packet)(void *opaque, uint8_t *buf, int buf_size), int(*write_packet)(void *opaque, uint8_t *buf, int buf_size), int64_t(*seek)(void *opaque, int64_t offset, int whence))
const char * ff_convert_lang_to(const char *lang, enum AVLangCodespace target_codespace)
Convert a language code to a target codespace.
uint8_t * av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, buffer_size_t *size)
static av_cold int init(AVCodecContext *avctx)
#define flags(name, subs,...)
#define us(width, name, range_min, range_max, subs,...)
audio channel layout utility functions
#define CONFIG_LIBOPUS_ENCODER
#define CONFIG_LIBX264_ENCODER
#define CONFIG_LIBVPX_VP9_ENCODER
#define CONFIG_LIBVORBIS_ENCODER
Public header for CRC hash function implementation.
mode
Use these values in ebur128_init (or'ed).
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
static void write_header(FFV1Context *f)
int ff_flac_write_header(AVIOContext *pb, const uint8_t *extradata, int extradata_size, int last_block)
int ff_flac_is_native_layout(uint64_t channel_layout)
const char * avcodec_get_name(enum AVCodecID id)
Get the name of a codec.
enum AVMediaType avcodec_get_type(enum AVCodecID codec_id)
Get the type of the given codec.
AVCodecID
Identify the syntax and semantics of the bitstream.
const AVCodecDescriptor * avcodec_descriptor_get(enum AVCodecID id)
@ AV_CODEC_ID_HDMV_PGS_SUBTITLE
@ AV_CODEC_ID_DVB_SUBTITLE
@ AV_CODEC_ID_DVD_SUBTITLE
@ AV_CODEC_ID_TEXT
raw UTF-8 text
int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos)
Converts AVChromaLocation to swscale x/y chroma position.
int av_get_bits_per_sample(enum AVCodecID codec_id)
Return codec bits per sample.
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.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
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_SKIP_SAMPLES
Recommmends skipping the specified number of samples.
@ AV_PKT_DATA_MASTERING_DISPLAY_METADATA
Mastering display metadata (based on SMPTE-2086:2014).
@ AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL
Data found in BlockAdditional element of matroska container.
@ AV_PKT_DATA_SPHERICAL
This side data should be associated with a video stream and corresponds to the AVSphericalMapping str...
@ AV_PKT_DATA_WEBVTT_SETTINGS
The optional settings (rendering instructions) that immediately follow the timestamp specifier of a W...
@ 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...
@ AV_PKT_DATA_STEREO3D
This side data should be associated with a video stream and contains Stereoscopic 3D information in f...
@ AV_PKT_DATA_WEBVTT_IDENTIFIER
The optional first identifier line of a WebVTT cue.
@ AV_PKT_DATA_CONTENT_LIGHT_LEVEL
Content light level (based on CTA-861.3).
uint8_t * av_stream_get_side_data(const AVStream *stream, enum AVPacketSideDataType type, size_t *size)
Get side information from stream.
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.
uint32_t av_get_random_seed(void)
Get a seed to use in conjunction with random functions.
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#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.
static double av_q2d(AVRational a)
Convert an AVRational to a double.
static int av_cmp_q(AVRational a, AVRational b)
Compare two rationals.
static av_always_inline AVRational av_inv_q(AVRational q)
Invert a rational.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
char * av_strdup(const char *s)
Duplicate a string.
void * av_realloc_array(void *ptr, size_t nmemb, size_t size)
Allocate, reallocate, or free an array.
void * av_mallocz_array(size_t nmemb, size_t size)
Allocate a memory block for an array with av_mallocz().
@ AVMEDIA_TYPE_ATTACHMENT
Opaque data information usually sparse.
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample.
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define AV_TIME_BASE
Internal time base represented as integer.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
#define LIBAVUTIL_VERSION_INT
@ AV_SPHERICAL_EQUIRECTANGULAR
Video represents a sphere mapped on a flat surface using equirectangular projection.
@ AV_SPHERICAL_EQUIRECTANGULAR_TILE
Video represents a portion of a sphere mapped on a flat surface using equirectangular projection.
@ AV_SPHERICAL_CUBEMAP
Video frame is split into 6 faces of a cube, and arranged on a 3x2 layout.
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
@ AV_STEREO3D_COLUMNS
Views are packed per column.
@ AV_STEREO3D_LINES
Views are packed per line, as if interlaced.
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
@ AV_STEREO3D_CHECKERBOARD
Views are packed in a checkerboard-like structure per pixel.
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
@ AV_STEREO3D_FRAMESEQUENCE
Views are alternated temporally.
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
int ff_hevc_annexb2mp4_buf(const uint8_t *buf_in, uint8_t **buf_out, int *size, int filter_ps, int *ps_count)
Writes Annex B formatted HEVC NAL units to a data buffer.
int ff_isom_write_hvcc(AVIOContext *pb, const uint8_t *data, int size, int ps_array_completeness)
Writes HEVC extradata (parameter sets, declarative SEI NAL units) to the provided AVIOContext.
static int query_codec(enum AVCodecID id, int std_compliance)
int(* filler)(InterplayACMContext *s, unsigned ind, unsigned col)
static av_always_inline uint64_t av_double2int(double f)
Reinterpret a double as a 64-bit integer.
const AVCodecTag ff_codec_movvideo_tags[]
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define FF_DISABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
const CodecTags ff_webm_codec_tags[]
int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode)
const char *const ff_matroska_video_stereo_mode[MATROSKA_VIDEO_STEREOMODE_TYPE_NB]
const CodecTags ff_mkv_codec_tags[]
const AVMetadataConv ff_mkv_metadata_conv[]
#define MATROSKA_ID_VIDEOPROJECTIONPOSEROLL
#define MATROSKA_ID_FILEMIMETYPE
#define MATROSKA_ID_DISCARDPADDING
#define MATROSKA_ID_TRACKFLAGLACING
#define MATROSKA_ID_TAGTARGETS
#define MATROSKA_ID_TRACKAUDIO
#define MATROSKA_ID_TRACKUID
#define MATROSKA_ID_CUERELATIVEPOSITION
#define MATROSKA_ID_CHAPSTRING
#define MATROSKA_ID_TRACKFLAGHEARINGIMPAIRED
#define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS
#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMIN
MatroskaVideoStereoModeType
@ MATROSKA_VIDEO_STEREOMODE_TYPE_LEFT_RIGHT
@ MATROSKA_VIDEO_STEREOMODE_TYPE_RIGHT_LEFT
@ MATROSKA_VIDEO_STEREOMODE_TYPE_COL_INTERLEAVED_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_NB
@ MATROSKA_VIDEO_STEREOMODE_TYPE_BOTH_EYES_BLOCK_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_TOP_BOTTOM
@ MATROSKA_VIDEO_STEREOMODE_TYPE_CHECKERBOARD_LR
@ MATROSKA_VIDEO_STEREOMODE_TYPE_MONO
@ MATROSKA_VIDEO_STEREOMODE_TYPE_ROW_INTERLEAVED_LR
#define MATROSKA_ID_VIDEOSTEREOMODE
#define MATROSKA_ID_CHAPTERS
#define MATROSKA_ID_SIMPLETAG
#define MATROSKA_ID_TIMECODESCALE
#define EBML_ID_EBMLVERSION
#define MATROSKA_ID_VIDEOPIXELWIDTH
#define EBML_ID_DOCTYPEVERSION
#define MATROSKA_ID_ATTACHMENTS
#define MATROSKA_ID_BLOCKDURATION
#define MATROSKA_ID_TITLE
#define MATROSKA_ID_TRACKLANGUAGE
#define MATROSKA_ID_SEEKID
#define MATROSKA_ID_VIDEOCOLORMAXFALL
#define MATROSKA_ID_VIDEOCOLOR_GY
#define MATROSKA_ID_CHAPTERATOM
#define MATROSKA_ID_VIDEOFIELDORDER
#define MATROSKA_ID_VIDEOPROJECTIONTYPE
#define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ
#define MATROSKA_ID_CODECDELAY
#define MATROSKA_ID_VIDEOALPHAMODE
#define MATROSKA_ID_TRACKNAME
#define MATROSKA_ID_CHAPTERTIMESTART
#define MATROSKA_ID_MUXINGAPP
#define MATROSKA_ID_SEEKHEAD
#define MATROSKA_ID_CUETIME
#define MATROSKA_ID_FILEUID
#define MATROSKA_ID_VIDEOCOLORSPACE
#define MATROSKA_ID_VIDEOCOLOR_BY
#define MATROSKA_ID_VIDEOCOLOR_RY
#define MATROSKA_ID_EDITIONFLAGDEFAULT
#define MATROSKA_ID_SEEKPREROLL
#define MATROSKA_ID_VIDEOCOLORTRANSFERCHARACTERISTICS
#define MATROSKA_ID_AUDIOCHANNELS
#define MATROSKA_ID_VIDEOCOLOR_BX
#define MATROSKA_ID_FILEDESC
#define MATROSKA_ID_VIDEODISPLAYUNIT
#define MATROSKA_ID_SIMPLEBLOCK
#define MATROSKA_ID_VIDEOCOLORCHROMASITINGHORZ
#define MATROSKA_ID_BLOCKGROUP
#define MATROSKA_ID_AUDIOBITDEPTH
#define MATROSKA_ID_VIDEOPIXELHEIGHT
#define MATROSKA_ID_DATEUTC
#define MATROSKA_ID_CUETRACK
@ MATROSKA_VIDEO_INTERLACE_FLAG_INTERLACED
@ MATROSKA_VIDEO_INTERLACE_FLAG_PROGRESSIVE
#define MATROSKA_ID_TRACKNUMBER
#define MATROSKA_ID_POINTENTRY
#define MATROSKA_ID_VIDEOPROJECTIONPRIVATE
#define MATROSKA_ID_VIDEOCOLORCHROMASITINGVERT
#define MATROSKA_ID_TRACKFLAGORIGINAL
#define MATROSKA_ID_VIDEOCOLORMASTERINGMETA
@ MATROSKA_VIDEO_FIELDORDER_TB
@ MATROSKA_VIDEO_FIELDORDER_BT
@ MATROSKA_VIDEO_FIELDORDER_BB
@ MATROSKA_VIDEO_FIELDORDER_TT
#define MATROSKA_ID_VIDEOCOLOR_LUMINANCEMAX
#define MATROSKA_ID_BLOCK
#define MATROSKA_ID_TAGLANG
#define MATROSKA_ID_TAGSTRING
#define MATROSKA_ID_CLUSTER
#define MATROSKA_ID_BLOCKREFERENCE
#define MATROSKA_ID_CHAPTERTIMEEND
#define MATROSKA_ID_VIDEODISPLAYHEIGHT
#define MATROSKA_ID_ATTACHEDFILE
#define MATROSKA_ID_TRACKTYPE
#define MATROSKA_ID_TRACKENTRY
#define MATROSKA_ID_SEGMENTUID
#define EBML_ID_DOCTYPEREADVERSION
#define MATROSKA_ID_TRACKDEFAULTDURATION
@ MATROSKA_VIDEO_PROJECTION_TYPE_CUBEMAP
@ MATROSKA_VIDEO_PROJECTION_TYPE_EQUIRECTANGULAR
#define MATROSKA_ID_TRACKS
#define MATROSKA_ID_VIDEOFLAGINTERLACED
#define MATROSKA_ID_FILENAME
#define MATROSKA_ID_TRACKFLAGFORCED
#define MATROSKA_ID_TRACKVIDEO
#define MATROSKA_ID_TAGTARGETS_CHAPTERUID
#define MATROSKA_ID_VIDEOCOLORRANGE
#define MATROSKA_ID_FILEDATA
#define MATROSKA_ID_VIDEOCOLOR_RX
#define MATROSKA_ID_BLOCKADDITIONAL
#define MATROSKA_ID_TAGTARGETS_TRACKUID
#define MATROSKA_ID_CUEDURATION
#define EBML_ID_EBMLMAXIDLENGTH
#define MATROSKA_ID_TRACKFLAGDEFAULT
#define MATROSKA_ID_SEEKENTRY
#define MATROSKA_ID_VIDEOCOLOR_WHITEY
#define MATROSKA_ID_VIDEOCOLORMAXCLL
@ MATROSKA_TRACK_TYPE_VIDEO
@ MATROSKA_TRACK_TYPE_METADATA
@ MATROSKA_TRACK_TYPE_SUBTITLE
@ MATROSKA_TRACK_TYPE_AUDIO
#define MATROSKA_ID_VIDEOCOLORPRIMARIES
#define MATROSKA_ID_BLOCKADDID
#define MATROSKA_ID_VIDEOCOLOR_WHITEX
#define EBML_ID_EBMLMAXSIZELENGTH
#define MATROSKA_ID_SEEKPOSITION
#define MATROSKA_ID_CODECPRIVATE
#define MATROSKA_ID_TAGNAME
#define MATROSKA_ID_DURATION
#define MATROSKA_ID_CHAPTERUID
#define MATROSKA_ID_CODECID
#define MATROSKA_ID_BLOCKMORE
#define MATROSKA_ID_TRACKFLAGVISUALIMPAIRED
#define MATROSKA_ID_TRACKFLAGCOMMENTARY
#define MATROSKA_ID_CUECLUSTERPOSITION
#define MATROSKA_ID_VIDEOPROJECTIONPOSEYAW
#define MATROSKA_ID_CUETRACKPOSITION
#define MATROSKA_ID_VIDEOPROJECTIONPOSEPITCH
#define MATROSKA_ID_EDITIONENTRY
#define MATROSKA_ID_CLUSTERTIMECODE
#define MATROSKA_ID_VIDEOCOLOR
#define MATROSKA_ID_VIDEODISPLAYWIDTH
#define MATROSKA_ID_CHAPTERDISPLAY
#define MATROSKA_ID_VIDEOCOLORMATRIXCOEFF
#define MATROSKA_ID_CHAPLANG
#define MATROSKA_ID_VIDEOPROJECTION
#define MATROSKA_ID_AUDIOSAMPLINGFREQ
#define EBML_ID_EBMLREADVERSION
@ MATROSKA_VIDEO_DISPLAYUNIT_DAR
@ MATROSKA_VIDEO_DISPLAYUNIT_UNKNOWN
#define MATROSKA_ID_BLOCKADDITIONS
#define MATROSKA_ID_WRITINGAPP
#define MATROSKA_ID_TAGTARGETS_ATTACHUID
#define MATROSKA_ID_SEGMENT
#define MATROSKA_ID_VIDEOCOLOR_GX
static EbmlSyntax ebml_header[]
static int ebml_num_size(uint64_t num)
Returns how many bytes are needed to represent a number as EBML variable length integer.
static int mkv_write_seekhead(AVIOContext *pb, MatroskaMuxContext *mkv, int error_on_seek_failure, int64_t destpos)
Write the SeekHead to the file at the location reserved for it and seek to destpos afterwards.
static int mkv_write_simpletag(AVIOContext *pb, const AVDictionaryEntry *t)
static int mkv_assemble_cues(AVStream **streams, AVIOContext *dyn_cp, mkv_cues *cues, mkv_track *tracks, int num_tracks)
static int mkv_write_packet_internal(AVFormatContext *s, const AVPacket *pkt)
static int put_flac_codecpriv(AVFormatContext *s, AVIOContext *pb, const AVCodecParameters *par)
static int get_aac_sample_rates(AVFormatContext *s, MatroskaMuxContext *mkv, const uint8_t *extradata, int extradata_size, int *sample_rate, int *output_sample_rate)
static void put_ebml_uint(AVIOContext *pb, uint32_t elementid, uint64_t val)
#define OPUS_SEEK_PREROLL
Seek preroll value for opus.
static int mkv_write_trailer(AVFormatContext *s)
static const AVCodecTag additional_video_tags[]
static int end_ebml_master_crc32_tentatively(AVIOContext *pb, ebml_stored_master *elem, MatroskaMuxContext *mkv, uint32_t id)
Output EBML master.
static void put_ebml_sint(AVIOContext *pb, uint32_t elementid, int64_t val)
static int mkv_write_packet(AVFormatContext *s, const AVPacket *pkt)
static const AVOption options[]
static const char * get_mimetype(const AVStream *st)
static int mkv_write_tags(AVFormatContext *s)
static void put_ebml_length(AVIOContext *pb, uint64_t length, int bytes)
Write a length as EBML variable length integer.
static int mkv_write_chapters(AVFormatContext *s)
static void put_ebml_id(AVIOContext *pb, uint32_t id)
static const AVCodecTag additional_subtitle_tags[]
#define MAX_EBML_HEADER_SIZE
2 bytes * 7 for EBML IDs, 7 1-byte EBML lengths, 6 1-byte uint, 8 byte for "matroska" doctype string
static int mkv_write_flush_packet(AVFormatContext *s, AVPacket *pkt)
static int mkv_write_block(AVFormatContext *s, AVIOContext *pb, uint32_t blockid, const AVPacket *pkt, int keyframe)
static int mkv_write_stereo_mode(AVFormatContext *s, AVIOContext *pb, AVStream *st, int mode, int *h_width, int *h_height)
@ DEFAULT_MODE_INFER_NO_SUBS
@ DEFAULT_MODE_PASSTHROUGH
static int ebml_id_size(uint32_t id)
static int webm_query_codec(enum AVCodecID codec_id, int std_compliance)
#define MAX_SEEKHEAD_ENTRIES
static int mkv_new_chapter_ids_needed(const AVFormatContext *s)
static void mkv_write_field_order(AVIOContext *pb, int mode, enum AVFieldOrder field_order)
static int mkv_strip_wavpack(const uint8_t *src, uint8_t **pdst, int *size)
static void put_ebml_uid(AVIOContext *pb, uint32_t elementid, uint64_t uid)
Write a (random) UID with fixed size to make the output more deterministic.
static int put_xiph_codecpriv(AVFormatContext *s, AVIOContext *pb, const AVCodecParameters *par)
static int mkv_write_header(AVFormatContext *s)
static int mkv_write_native_codecprivate(AVFormatContext *s, AVIOContext *pb, const AVCodecParameters *par, AVIOContext *dyn_cp)
static int mkv_init(struct AVFormatContext *s)
static int mkv_write_codecprivate(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, int native_id, int qt_id)
#define IS_SEEKABLE(pb, mkv)
static uint64_t mkv_get_uid(const mkv_track *tracks, int i, AVLFG *c)
static void mkv_write_video_projection(AVFormatContext *s, AVIOContext *pb, const AVStream *st)
static int64_t get_metadata_duration(AVFormatContext *s)
static int start_ebml_master_crc32(AVIOContext **dyn_cp, MatroskaMuxContext *mkv)
static const AVCodecTag additional_audio_tags[]
static void put_ebml_binary(AVIOContext *pb, uint32_t elementid, const void *buf, int size)
static int mkv_query_codec(enum AVCodecID codec_id, int std_compliance)
static void mkv_write_video_color(AVIOContext *pb, const AVStream *st, const AVCodecParameters *par)
#define MAX_SEEKENTRY_SIZE
2 bytes * 3 for EBML IDs, 3 1-byte EBML lengths, 8 bytes for 64 bit offset, 4 bytes for target EBML I...
static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, AVStream *st, mkv_track *track, AVIOContext *pb, int is_default)
static void mkv_start_seekhead(MatroskaMuxContext *mkv, AVIOContext *pb)
Initialize the SeekHead element to be ready to index level 1 Matroska elements.
static int mkv_end_cluster(AVFormatContext *s)
#define MAX_CUETRACKPOS_SIZE
4 * (1-byte EBML ID, 1-byte EBML size, 8-byte uint max)
static int mkv_add_cuepoint(MatroskaMuxContext *mkv, int stream, int64_t ts, int64_t cluster_pos, int64_t relative_pos, int64_t duration)
static void put_ebml_void(AVIOContext *pb, int size)
Write a void element of a given size.
static void mkv_add_seekhead_entry(MatroskaMuxContext *mkv, uint32_t elementid, uint64_t filepos)
static int mkv_check_tag_name(const char *name, uint32_t elementid)
static void mkv_deinit(AVFormatContext *s)
Free the members allocated in the mux context.
static void put_xiph_size(AVIOContext *pb, int size)
#define CASE(type, variable)
static void put_ebml_string(AVIOContext *pb, uint32_t elementid, const char *str)
static int end_ebml_master_crc32(AVIOContext *pb, AVIOContext **dyn_cp, MatroskaMuxContext *mkv, uint32_t id, int length_size, int keep_buffer, int add_seekentry)
static int mkv_write_attachments(AVFormatContext *s)
static int mkv_write_tag(MatroskaMuxContext *mkv, const AVDictionary *m, AVIOContext **pb, ebml_master *tag, uint32_t elementid, uint64_t uid)
static int ebml_length_size(uint64_t length)
Calculate how many bytes are needed to represent the length field of an EBML element whose payload ha...
static void put_ebml_num(AVIOContext *pb, uint64_t num, int bytes)
Write a number as EBML variable length integer on bytes bytes.
static int mkv_check_tag(const AVDictionary *m, uint32_t elementid)
static int mkv_write_vtt_blocks(AVFormatContext *s, AVIOContext *pb, const AVPacket *pkt)
static ebml_master start_ebml_master(AVIOContext *pb, uint32_t elementid, uint64_t expectedsize)
static int mkv_check_bitstream(struct AVFormatContext *s, const AVPacket *pkt)
static int mkv_write_tag_targets(MatroskaMuxContext *mkv, AVIOContext **pb, ebml_master *tag, uint32_t elementid, uint64_t uid)
static int mkv_write_tracks(AVFormatContext *s)
static void put_ebml_float(AVIOContext *pb, uint32_t elementid, double val)
static int mkv_blockgroup_size(int pkt_size, int track_num_size)
static int put_wv_codecpriv(AVIOContext *pb, const AVCodecParameters *par)
static void put_ebml_size_unknown(AVIOContext *pb, int bytes)
Write an EBML size meaning "unknown size".
static void end_ebml_master(AVIOContext *pb, ebml_master master)
static int mkv_check_new_extra_data(AVFormatContext *s, const AVPacket *pkt)
int avpriv_mpeg4audio_get_config2(MPEG4AudioConfig *c, const uint8_t *buf, int size, int sync_extension, void *logctx)
Parse MPEG-4 systems extradata from a raw buffer to retrieve audio configuration.
#define MAX_PCE_SIZE
Maximum size of a PCE including the 3-bit ID_PCE.
static int check_bitstream(AVFormatContext *s, AVStream *st, AVPacket *pkt)
int av_parse_time(int64_t *timeval, const char *timestr, int duration)
Parse timestr and return in *time a corresponding number of microseconds.
@ AVCHROMA_LOC_UNSPECIFIED
@ AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_NB
Not part of ABI.
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
@ AVCOL_PRI_NB
Not part of ABI.
@ AVCOL_TRC_NB
Not part of ABI.
@ AVCOL_SPC_NB
Not part of ABI.
Utilties for rational number calculation.
const AVCodecTag ff_codec_bmp_tags[]
const AVCodecTag ff_codec_wav_tags[]
internal header for RIFF based (de)muxers do NOT include this in end user applications
#define FF_PUT_WAV_HEADER_FORCE_WAVEFORMATEX
Tell ff_put_wav_header() to use WAVEFORMATEX even for PCM codecs.
void ff_put_bmp_header(AVIOContext *pb, AVCodecParameters *par, int for_asf, int ignore_extradata, int rgb_frame_is_flipped)
int ff_put_wav_header(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, int flags)
Write WAVEFORMAT header structure.
enum AVMediaType codec_type
static const uint8_t header[24]
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 a single codec described by an AVCodecID.
This struct describes the properties of an encoded stream.
enum AVColorSpace color_space
int extradata_size
Size of the extradata content in bytes.
enum AVFieldOrder field_order
Video only.
uint64_t channel_layout
Audio only.
int bits_per_coded_sample
The number of bits per sample in the codedwords.
enum AVMediaType codec_type
General type of the encoded data.
int bits_per_raw_sample
This is the number of valid bits in each output sample.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
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).
enum AVColorPrimaries color_primaries
int sample_rate
Audio only.
enum AVColorTransferCharacteristic color_trc
int initial_padding
Audio only.
enum AVChromaLocation chroma_location
enum AVColorRange color_range
Video only.
Content light level needed by to transmit HDR over HDMI (CTA-861.3).
unsigned MaxFALL
Max average light level per frame (cd/m^2).
unsigned MaxCLL
Max content light level (cd/m^2).
int error
contains the error code or 0 if no error happened
Context structure for the Lagged Fibonacci PRNG.
This structure stores compressed data.
int flags
A combination of AV_PKT_FLAG values.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
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).
This structure describes how to handle spherical videos, outlining information about projection,...
uint32_t bound_left
Distance from the left edge.
enum AVSphericalProjection projection
Projection type.
uint32_t bound_top
Distance from the top edge.
uint32_t bound_bottom
Distance from the bottom edge.
uint32_t bound_right
Distance from the right edge.
int32_t pitch
Rotation around the right vector [-90, 90].
int32_t roll
Rotation around the forward vector [-180, 180].
int32_t yaw
Rotation around the up vector [-180, 180].
uint32_t padding
Number of pixels to pad from the edge of each cube face.
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
enum AVStereo3DType type
How views are packed within the video.
int flags
Additional information about the frame packing.
AVCodecParameters * codecpar
Codec parameters associated with this stream.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
AVRational avg_frame_rate
Average framerate.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
AVRational r_frame_rate
Real base framerate of the stream.
int disposition
AV_DISPOSITION_* bit field.
int64_t cluster_pos
file offset of the current Cluster
int64_t cluster_time_limit
int64_t pos
absolute offset in the containing AVIOContext where the master's elements start
int sizebytes
how many bytes were reserved for the size
int64_t cluster_pos
offset of the cluster containing the block relative to the segment
int64_t duration
duration of the block according to time base
int64_t relative_pos
relative offset from the position of the cluster containing the block
mkv_seekhead_entry entries[MAX_SEEKHEAD_ENTRIES]
int64_t sample_rate_offset
static int write_trailer(AVFormatContext *s1)
static const uint8_t offset[127][2]
int ff_wv_parse_header(WvHeader *wv, const uint8_t *data)
Parse a WavPack block header.
int avpriv_split_xiph_headers(const uint8_t *extradata, int extradata_size, int first_header_size, const uint8_t *header_start[3], int header_len[3])
Split a single extradata buffer into the three headers that most Xiph codecs use.