FFmpeg
|
#include <stdint.h>
#include "av1.h"
#include "avc.h"
#include "hevc.h"
#include "avformat.h"
#include "avio_internal.h"
#include "avlanguage.h"
#include "flacenc.h"
#include "internal.h"
#include "isom.h"
#include "matroska.h"
#include "riff.h"
#include "vorbiscomment.h"
#include "wv.h"
#include "libavutil/avstring.h"
#include "libavutil/channel_layout.h"
#include "libavutil/crc.h"
#include "libavutil/dict.h"
#include "libavutil/intfloat.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/lfg.h"
#include "libavutil/mastering_display_metadata.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"
#include "libavutil/parseutils.h"
#include "libavutil/random_seed.h"
#include "libavutil/rational.h"
#include "libavutil/samplefmt.h"
#include "libavutil/stereo3d.h"
#include "libavcodec/xiph.h"
#include "libavcodec/mpeg4audio.h"
Go to the source code of this file.
Data Structures | |
struct | ebml_master |
struct | ebml_stored_master |
struct | mkv_seekhead_entry |
struct | mkv_seekhead |
struct | mkv_cuepoint |
struct | mkv_cues |
struct | mkv_track |
struct | MatroskaMuxContext |
Macros | |
#define | MAX_SEEKHEAD_ENTRIES 7 |
#define | IS_SEEKABLE(pb, mkv) |
#define | MODE_MATROSKAv2 0x01 |
#define | MODE_WEBM 0x02 |
#define | MAX_EBML_HEADER_SIZE 35 |
2 bytes * 7 for EBML IDs, 7 1-byte EBML lengths, 6 1-byte uint, 8 byte for "matroska" doctype string More... | |
#define | MAX_SEEKENTRY_SIZE 21 |
2 bytes * 3 for EBML IDs, 3 1-byte EBML lengths, 8 bytes for 64 bit offset, 4 bytes for target EBML ID More... | |
#define | MAX_CUETRACKPOS_SIZE 40 |
4 * (1-byte EBML ID, 1-byte EBML size, 8-byte uint max) More... | |
#define | OPUS_SEEK_PREROLL 80000000 |
Seek preroll value for opus. More... | |
#define | CASE(type, variable) |
#define | OFFSET(x) offsetof(MatroskaMuxContext, x) |
#define | FLAGS AV_OPT_FLAG_ENCODING_PARAM |
Enumerations | |
enum | { DEFAULT_MODE_INFER, DEFAULT_MODE_INFER_NO_SUBS, DEFAULT_MODE_PASSTHROUGH } |
Functions | |
static int | ebml_id_size (uint32_t id) |
static void | put_ebml_id (AVIOContext *pb, uint32_t id) |
static void | put_ebml_size_unknown (AVIOContext *pb, int bytes) |
Write an EBML size meaning "unknown size". More... | |
static int | ebml_num_size (uint64_t num) |
Returns how many bytes are needed to represent a number as EBML variable length integer. More... | |
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 has a given length. More... | |
static void | put_ebml_num (AVIOContext *pb, uint64_t num, int bytes) |
Write a number as EBML variable length integer on bytes bytes. More... | |
static void | put_ebml_length (AVIOContext *pb, uint64_t length, int bytes) |
Write a length as EBML variable length integer. More... | |
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. More... | |
static void | put_ebml_uint (AVIOContext *pb, uint32_t elementid, uint64_t val) |
static void | put_ebml_sint (AVIOContext *pb, uint32_t elementid, int64_t val) |
static void | put_ebml_float (AVIOContext *pb, uint32_t elementid, double val) |
static void | put_ebml_binary (AVIOContext *pb, uint32_t elementid, const void *buf, int size) |
static void | put_ebml_string (AVIOContext *pb, uint32_t elementid, const char *str) |
static void | put_ebml_void (AVIOContext *pb, int size) |
Write a void element of a given size. More... | |
static ebml_master | start_ebml_master (AVIOContext *pb, uint32_t elementid, uint64_t expectedsize) |
static void | end_ebml_master (AVIOContext *pb, ebml_master master) |
static void | mkv_add_seekhead_entry (MatroskaMuxContext *mkv, uint32_t elementid, uint64_t filepos) |
static int | start_ebml_master_crc32 (AVIOContext **dyn_cp, MatroskaMuxContext *mkv) |
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 | end_ebml_master_crc32_tentatively (AVIOContext *pb, ebml_stored_master *elem, MatroskaMuxContext *mkv, uint32_t id) |
Output EBML master. More... | |
static void | put_xiph_size (AVIOContext *pb, int size) |
static void | mkv_deinit (AVFormatContext *s) |
Free the members allocated in the mux context. More... | |
static void | mkv_start_seekhead (MatroskaMuxContext *mkv, AVIOContext *pb) |
Initialize the SeekHead element to be ready to index level 1 Matroska elements. More... | |
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. More... | |
static int | mkv_add_cuepoint (MatroskaMuxContext *mkv, int stream, int64_t ts, int64_t cluster_pos, int64_t relative_pos, int64_t duration) |
static int | mkv_assemble_cues (AVStream **streams, AVIOContext *dyn_cp, mkv_cues *cues, mkv_track *tracks, int num_tracks) |
static int | put_xiph_codecpriv (AVFormatContext *s, AVIOContext *pb, const AVCodecParameters *par) |
static int | put_wv_codecpriv (AVIOContext *pb, const AVCodecParameters *par) |
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 int | mkv_write_native_codecprivate (AVFormatContext *s, AVIOContext *pb, const AVCodecParameters *par, AVIOContext *dyn_cp) |
static int | mkv_write_codecprivate (AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, int native_id, int qt_id) |
static void | mkv_write_video_color (AVIOContext *pb, const AVStream *st, const AVCodecParameters *par) |
static void | mkv_write_video_projection (AVFormatContext *s, AVIOContext *pb, const AVStream *st) |
static void | mkv_write_field_order (AVIOContext *pb, int mode, enum AVFieldOrder field_order) |
static int | mkv_write_stereo_mode (AVFormatContext *s, AVIOContext *pb, AVStream *st, int mode, int *h_width, int *h_height) |
static int | mkv_write_track (AVFormatContext *s, MatroskaMuxContext *mkv, AVStream *st, mkv_track *track, AVIOContext *pb, int is_default) |
static int | mkv_write_tracks (AVFormatContext *s) |
static int | mkv_write_simpletag (AVIOContext *pb, const AVDictionaryEntry *t) |
static int | mkv_write_tag_targets (MatroskaMuxContext *mkv, AVIOContext **pb, ebml_master *tag, uint32_t elementid, uint64_t uid) |
static int | mkv_check_tag_name (const char *name, uint32_t elementid) |
static int | mkv_write_tag (MatroskaMuxContext *mkv, const AVDictionary *m, AVIOContext **pb, ebml_master *tag, uint32_t elementid, uint64_t uid) |
static int | mkv_check_tag (const AVDictionary *m, uint32_t elementid) |
static int | mkv_write_tags (AVFormatContext *s) |
static int | mkv_new_chapter_ids_needed (const AVFormatContext *s) |
static int | mkv_write_chapters (AVFormatContext *s) |
static const char * | get_mimetype (const AVStream *st) |
static int | mkv_write_attachments (AVFormatContext *s) |
static int64_t | get_metadata_duration (AVFormatContext *s) |
static int | mkv_write_header (AVFormatContext *s) |
static int | mkv_blockgroup_size (int pkt_size, int track_num_size) |
static int | mkv_strip_wavpack (const uint8_t *src, uint8_t **pdst, int *size) |
static int | mkv_write_block (AVFormatContext *s, AVIOContext *pb, uint32_t blockid, const AVPacket *pkt, int keyframe) |
static int | mkv_write_vtt_blocks (AVFormatContext *s, AVIOContext *pb, const AVPacket *pkt) |
static int | mkv_end_cluster (AVFormatContext *s) |
static int | mkv_check_new_extra_data (AVFormatContext *s, const AVPacket *pkt) |
static int | mkv_write_packet_internal (AVFormatContext *s, const AVPacket *pkt) |
static int | mkv_write_packet (AVFormatContext *s, const AVPacket *pkt) |
static int | mkv_write_flush_packet (AVFormatContext *s, AVPacket *pkt) |
static int | mkv_write_trailer (AVFormatContext *s) |
static int | mkv_query_codec (enum AVCodecID codec_id, int std_compliance) |
static int | webm_query_codec (enum AVCodecID codec_id, int std_compliance) |
static uint64_t | mkv_get_uid (const mkv_track *tracks, int i, AVLFG *c) |
static int | mkv_init (struct AVFormatContext *s) |
static int | mkv_check_bitstream (struct AVFormatContext *s, const AVPacket *pkt) |
Variables | |
static const AVCodecTag | additional_audio_tags [] |
static const AVCodecTag | additional_video_tags [] |
static const AVCodecTag | additional_subtitle_tags [] |
static const AVOption | options [] |
#define MAX_SEEKHEAD_ENTRIES 7 |
Definition at line 59 of file matroskaenc.c.
#define IS_SEEKABLE | ( | pb, | |
mkv | |||
) |
Definition at line 61 of file matroskaenc.c.
#define MODE_MATROSKAv2 0x01 |
Definition at line 120 of file matroskaenc.c.
#define MODE_WEBM 0x02 |
Definition at line 121 of file matroskaenc.c.
#define MAX_EBML_HEADER_SIZE 35 |
2 bytes * 7 for EBML IDs, 7 1-byte EBML lengths, 6 1-byte uint, 8 byte for "matroska" doctype string
Definition at line 165 of file matroskaenc.c.
#define MAX_SEEKENTRY_SIZE 21 |
2 bytes * 3 for EBML IDs, 3 1-byte EBML lengths, 8 bytes for 64 bit offset, 4 bytes for target EBML ID
Definition at line 169 of file matroskaenc.c.
#define MAX_CUETRACKPOS_SIZE 40 |
4 * (1-byte EBML ID, 1-byte EBML size, 8-byte uint max)
Definition at line 172 of file matroskaenc.c.
#define OPUS_SEEK_PREROLL 80000000 |
Seek preroll value for opus.
Definition at line 175 of file matroskaenc.c.
#define CASE | ( | type, | |
variable | |||
) |
#define OFFSET | ( | x | ) | offsetof(MatroskaMuxContext, x) |
Definition at line 2811 of file matroskaenc.c.
#define FLAGS AV_OPT_FLAG_ENCODING_PARAM |
Definition at line 2812 of file matroskaenc.c.
anonymous enum |
Enumerator | |
---|---|
DEFAULT_MODE_INFER | |
DEFAULT_MODE_INFER_NO_SUBS | |
DEFAULT_MODE_PASSTHROUGH |
Definition at line 64 of file matroskaenc.c.
|
static |
Definition at line 177 of file matroskaenc.c.
Referenced by mkv_write_seekhead(), and put_ebml_id().
|
static |
Definition at line 182 of file matroskaenc.c.
Referenced by end_ebml_master_crc32(), end_ebml_master_crc32_tentatively(), mkv_write_block(), mkv_write_header(), mkv_write_seekhead(), mkv_write_vtt_blocks(), put_ebml_binary(), put_ebml_float(), put_ebml_sint(), put_ebml_uid(), put_ebml_uint(), put_ebml_void(), and start_ebml_master().
|
static |
Write an EBML size meaning "unknown size".
bytes | The number of bytes the size should occupy (maximum: 8). |
Definition at line 194 of file matroskaenc.c.
Referenced by mkv_write_header(), and start_ebml_master().
|
static |
Returns how many bytes are needed to represent a number as EBML variable length integer.
Definition at line 205 of file matroskaenc.c.
Referenced by ebml_length_size(), and mkv_init().
|
static |
Calculate how many bytes are needed to represent the length field of an EBML element whose payload has a given length.
Definition at line 218 of file matroskaenc.c.
Referenced by mkv_blockgroup_size(), mkv_write_trailer(), put_ebml_length(), and start_ebml_master().
|
static |
Write a number as EBML variable length integer on bytes
bytes.
bytes
is taken literally without checking.
Definition at line 227 of file matroskaenc.c.
Referenced by mkv_write_block(), mkv_write_vtt_blocks(), and put_ebml_length().
|
static |
Write a length as EBML variable length integer.
bytes | The number of bytes that need to be used to write the number. If zero, the minimal number of bytes will be used. |
Definition at line 240 of file matroskaenc.c.
Referenced by end_ebml_master(), end_ebml_master_crc32(), end_ebml_master_crc32_tentatively(), mkv_write_block(), mkv_write_seekhead(), mkv_write_trailer(), mkv_write_vtt_blocks(), put_ebml_binary(), put_ebml_float(), put_ebml_sint(), put_ebml_uid(), put_ebml_uint(), and put_ebml_void().
|
static |
Write a (random) UID with fixed size to make the output more deterministic.
Definition at line 258 of file matroskaenc.c.
Referenced by mkv_write_attachments(), mkv_write_tag_targets(), and mkv_write_track().
|
static |
Definition at line 265 of file matroskaenc.c.
Referenced by mkv_assemble_cues(), mkv_write_block(), mkv_write_chapters(), mkv_write_field_order(), mkv_write_header(), mkv_write_packet_internal(), mkv_write_seekhead(), mkv_write_stereo_mode(), mkv_write_track(), mkv_write_video_color(), mkv_write_video_projection(), and mkv_write_vtt_blocks().
|
static |
Definition at line 278 of file matroskaenc.c.
Referenced by mkv_write_block().
|
static |
Definition at line 292 of file matroskaenc.c.
Referenced by mkv_check_new_extra_data(), mkv_write_header(), mkv_write_track(), mkv_write_trailer(), mkv_write_video_color(), and mkv_write_video_projection().
|
static |
Definition at line 299 of file matroskaenc.c.
Referenced by end_ebml_master_crc32(), mkv_assemble_cues(), mkv_check_new_extra_data(), mkv_write_attachments(), mkv_write_block(), mkv_write_codecprivate(), mkv_write_header(), mkv_write_track(), mkv_write_trailer(), mkv_write_video_color(), mkv_write_video_projection(), and put_ebml_string().
|
static |
Definition at line 307 of file matroskaenc.c.
Referenced by mkv_write_attachments(), mkv_write_chapters(), mkv_write_header(), mkv_write_simpletag(), mkv_write_tags(), and mkv_write_track().
|
static |
Write a void element of a given size.
Useful for reserving space in the file to be written to later.
size | The number of bytes to reserve, which must be at least 2. |
Definition at line 319 of file matroskaenc.c.
Referenced by mkv_check_new_extra_data(), mkv_start_seekhead(), mkv_write_header(), mkv_write_native_codecprivate(), mkv_write_seekhead(), mkv_write_tags(), mkv_write_trailer(), and start_ebml_master_crc32().
|
static |
Definition at line 337 of file matroskaenc.c.
Referenced by mkv_assemble_cues(), mkv_write_attachments(), mkv_write_block(), mkv_write_chapters(), mkv_write_header(), mkv_write_packet_internal(), mkv_write_seekhead(), mkv_write_simpletag(), mkv_write_tag_targets(), mkv_write_tags(), mkv_write_track(), mkv_write_video_color(), mkv_write_video_projection(), and mkv_write_vtt_blocks().
|
static |
Definition at line 347 of file matroskaenc.c.
Referenced by mkv_assemble_cues(), mkv_write_attachments(), mkv_write_block(), mkv_write_chapters(), mkv_write_header(), mkv_write_packet_internal(), mkv_write_seekhead(), mkv_write_simpletag(), mkv_write_tag(), mkv_write_tag_targets(), mkv_write_tags(), mkv_write_track(), mkv_write_video_color(), mkv_write_video_projection(), and mkv_write_vtt_blocks().
|
static |
Definition at line 357 of file matroskaenc.c.
Referenced by end_ebml_master_crc32(), and end_ebml_master_crc32_tentatively().
|
static |
Definition at line 368 of file matroskaenc.c.
Referenced by mkv_write_attachments(), mkv_write_chapters(), mkv_write_header(), mkv_write_packet_internal(), mkv_write_seekhead(), mkv_write_tag_targets(), mkv_write_tracks(), and mkv_write_trailer().
|
static |
Definition at line 381 of file matroskaenc.c.
Referenced by end_ebml_master_crc32_tentatively(), mkv_end_cluster(), mkv_write_attachments(), mkv_write_chapters(), mkv_write_seekhead(), and mkv_write_trailer().
|
static |
Output EBML master.
Keep the buffer if seekable, allowing for later updates. Furthermore always add a SeekHead Entry for this element.
Definition at line 418 of file matroskaenc.c.
Referenced by mkv_write_header(), mkv_write_tags(), and mkv_write_tracks().
|
static |
Definition at line 441 of file matroskaenc.c.
Referenced by put_xiph_codecpriv().
|
static |
Free the members allocated in the mux context.
Definition at line 450 of file matroskaenc.c.
|
static |
Initialize the SeekHead element to be ready to index level 1 Matroska elements.
Enough space to write MAX_SEEKHEAD_ENTRIES SeekHead entries will be reserved at the current file location.
Definition at line 470 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Write the SeekHead to the file at the location reserved for it and seek to destpos afterwards.
When error_on_seek_failure is not set, failure to seek to the position designated for the SeekHead is not considered an error and it is presumed that destpos is the current position; failure to seek to destpos afterwards is always an error.
Definition at line 490 of file matroskaenc.c.
Referenced by mkv_write_header(), and mkv_write_trailer().
|
static |
Definition at line 531 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 554 of file matroskaenc.c.
Referenced by mkv_write_trailer().
|
static |
Definition at line 603 of file matroskaenc.c.
Referenced by mkv_write_native_codecprivate().
|
static |
Definition at line 633 of file matroskaenc.c.
Referenced by mkv_write_native_codecprivate().
|
static |
Definition at line 642 of file matroskaenc.c.
Referenced by mkv_write_native_codecprivate().
|
static |
Definition at line 678 of file matroskaenc.c.
Referenced by mkv_check_new_extra_data(), and mkv_write_track().
|
static |
Definition at line 711 of file matroskaenc.c.
Referenced by mkv_write_codecprivate().
|
static |
Definition at line 763 of file matroskaenc.c.
Referenced by mkv_check_new_extra_data(), and mkv_write_track().
|
static |
Definition at line 833 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 918 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 985 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 1024 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 1115 of file matroskaenc.c.
Referenced by mkv_write_tracks().
|
static |
Definition at line 1392 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1450 of file matroskaenc.c.
Referenced by mkv_write_tag().
|
static |
Definition at line 1484 of file matroskaenc.c.
Referenced by mkv_write_tag().
|
static |
Definition at line 1504 of file matroskaenc.c.
Referenced by mkv_check_tag(), and mkv_write_tag().
|
static |
Definition at line 1518 of file matroskaenc.c.
Referenced by mkv_write_chapters(), and mkv_write_tags().
|
static |
Definition at line 1544 of file matroskaenc.c.
Referenced by mkv_write_chapters(), and mkv_write_tags().
|
static |
Definition at line 1555 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1628 of file matroskaenc.c.
Referenced by mkv_write_chapters().
|
static |
Definition at line 1640 of file matroskaenc.c.
Referenced by mkv_write_header(), and mkv_write_trailer().
|
static |
Definition at line 1725 of file matroskaenc.c.
Referenced by mkv_init(), and mkv_write_attachments().
|
static |
Definition at line 1742 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1787 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1811 of file matroskaenc.c.
Definition at line 1966 of file matroskaenc.c.
Referenced by mkv_write_packet_internal(), and mkv_write_vtt_blocks().
Definition at line 1975 of file matroskaenc.c.
Referenced by mkv_write_block().
|
static |
Definition at line 2028 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 2141 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 2187 of file matroskaenc.c.
Referenced by mkv_write_flush_packet(), mkv_write_packet(), and mkv_write_packet_internal().
|
static |
Definition at line 2206 of file matroskaenc.c.
Referenced by mkv_write_packet().
|
static |
Definition at line 2297 of file matroskaenc.c.
Referenced by mkv_write_packet(), and mkv_write_trailer().
|
static |
Definition at line 2389 of file matroskaenc.c.
Referenced by mkv_write_flush_packet().
|
static |
Definition at line 2463 of file matroskaenc.c.
|
static |
Definition at line 2481 of file matroskaenc.c.
Definition at line 2637 of file matroskaenc.c.
Definition at line 2654 of file matroskaenc.c.
Definition at line 2664 of file matroskaenc.c.
Referenced by mkv_init().
|
static |
Definition at line 2682 of file matroskaenc.c.
|
static |
Definition at line 2766 of file matroskaenc.c.
|
static |
Definition at line 2781 of file matroskaenc.c.
|
static |
Definition at line 2797 of file matroskaenc.c.
|
static |
Definition at line 2804 of file matroskaenc.c.
|
static |
Definition at line 2813 of file matroskaenc.c.