FFmpeg
|
#include <stdint.h>
#include "config.h"
#include "av1.h"
#include "avc.h"
#include "hevc.h"
#include "avformat.h"
#include "avio_internal.h"
#include "avlanguage.h"
#include "dovi_isom.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 | MODE_MATROSKAv2 0x01 |
#define | MODE_WEBM 0x02 |
#define | IS_WEBM(mkv) |
#define | IS_SEEKABLE(pb, mkv) |
#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 | 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 is_webm, enum AVFieldOrder field_order) |
static int | mkv_write_stereo_mode (AVFormatContext *s, AVIOContext *pb, AVStream *st, int is_webm, int *h_width, int *h_height) |
static void | mkv_write_dovi (AVFormatContext *s, AVIOContext *pb, AVStream *st) |
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_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 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 (AVFormatContext *s, AVStream *st, 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 [] |
static const AVClass | matroska_webm_class |
#define MAX_SEEKHEAD_ENTRIES 7 |
Definition at line 62 of file matroskaenc.c.
#define MODE_MATROSKAv2 0x01 |
Definition at line 64 of file matroskaenc.c.
#define MODE_WEBM 0x02 |
Definition at line 65 of file matroskaenc.c.
#define IS_WEBM | ( | mkv | ) |
Definition at line 67 of file matroskaenc.c.
#define IS_SEEKABLE | ( | pb, | |
mkv | |||
) |
Definition at line 69 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 170 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 174 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 177 of file matroskaenc.c.
#define OPUS_SEEK_PREROLL 80000000 |
Seek preroll value for opus.
Definition at line 180 of file matroskaenc.c.
#define CASE | ( | type, | |
variable | |||
) |
#define OFFSET | ( | x | ) | offsetof(MatroskaMuxContext, x) |
Definition at line 2847 of file matroskaenc.c.
#define FLAGS AV_OPT_FLAG_ENCODING_PARAM |
Definition at line 2848 of file matroskaenc.c.
anonymous enum |
Enumerator | |
---|---|
DEFAULT_MODE_INFER | |
DEFAULT_MODE_INFER_NO_SUBS | |
DEFAULT_MODE_PASSTHROUGH |
Definition at line 72 of file matroskaenc.c.
|
static |
Definition at line 182 of file matroskaenc.c.
Referenced by mkv_write_seekhead(), and put_ebml_id().
|
static |
Definition at line 187 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 199 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 212 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 225 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 234 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 247 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 265 of file matroskaenc.c.
Referenced by mkv_write_attachments(), mkv_write_tag_targets(), and mkv_write_track().
|
static |
Definition at line 272 of file matroskaenc.c.
Referenced by mkv_assemble_cues(), mkv_write_block(), mkv_write_chapters(), mkv_write_dovi(), 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 285 of file matroskaenc.c.
Referenced by mkv_write_block().
|
static |
Definition at line 299 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 306 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_dovi(), 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 314 of file matroskaenc.c.
Referenced by mkv_write_attachments(), mkv_write_chapters(), mkv_write_dovi(), 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 326 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 344 of file matroskaenc.c.
Referenced by mkv_assemble_cues(), mkv_write_attachments(), mkv_write_block(), mkv_write_chapters(), mkv_write_dovi(), 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 354 of file matroskaenc.c.
Referenced by mkv_assemble_cues(), mkv_write_attachments(), mkv_write_block(), mkv_write_chapters(), mkv_write_dovi(), 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 364 of file matroskaenc.c.
Referenced by end_ebml_master_crc32(), and end_ebml_master_crc32_tentatively().
|
static |
Definition at line 375 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 388 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 425 of file matroskaenc.c.
Referenced by mkv_write_header(), mkv_write_tags(), and mkv_write_tracks().
|
static |
Definition at line 448 of file matroskaenc.c.
Referenced by put_xiph_codecpriv().
|
static |
Free the members allocated in the mux context.
Definition at line 457 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 475 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 495 of file matroskaenc.c.
Referenced by mkv_write_header(), and mkv_write_trailer().
|
static |
Definition at line 536 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 568 of file matroskaenc.c.
Referenced by mkv_write_trailer().
|
static |
Definition at line 617 of file matroskaenc.c.
Referenced by mkv_write_native_codecprivate().
|
static |
Definition at line 727 of file matroskaenc.c.
Referenced by mkv_write_codecprivate().
|
static |
Definition at line 781 of file matroskaenc.c.
Referenced by mkv_check_new_extra_data(), and mkv_write_track().
|
static |
Definition at line 851 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 937 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 1004 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 1043 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 1135 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 1168 of file matroskaenc.c.
Referenced by mkv_write_tracks().
|
static |
Definition at line 1450 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1504 of file matroskaenc.c.
Referenced by mkv_write_tag().
|
static |
Definition at line 1538 of file matroskaenc.c.
Referenced by mkv_write_tag().
|
static |
Definition at line 1558 of file matroskaenc.c.
Referenced by mkv_check_tag(), and mkv_write_tag().
|
static |
Definition at line 1572 of file matroskaenc.c.
Referenced by mkv_write_chapters(), and mkv_write_tags().
|
static |
Definition at line 1598 of file matroskaenc.c.
Referenced by mkv_write_chapters(), and mkv_write_tags().
|
static |
Definition at line 1609 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1682 of file matroskaenc.c.
Referenced by mkv_write_chapters().
|
static |
Definition at line 1694 of file matroskaenc.c.
Referenced by mkv_write_header(), and mkv_write_trailer().
|
static |
Definition at line 1775 of file matroskaenc.c.
Referenced by mkv_init(), and mkv_write_attachments().
|
static |
Definition at line 1792 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1837 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1861 of file matroskaenc.c.
Definition at line 2016 of file matroskaenc.c.
Referenced by mkv_write_packet_internal(), and mkv_write_vtt_blocks().
|
static |
Definition at line 2080 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 2197 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 2250 of file matroskaenc.c.
Referenced by mkv_write_flush_packet(), mkv_write_packet(), and mkv_write_packet_internal().
|
static |
Definition at line 2269 of file matroskaenc.c.
Referenced by mkv_write_packet().
|
static |
Definition at line 2362 of file matroskaenc.c.
Referenced by mkv_write_packet(), and mkv_write_trailer().
|
static |
Definition at line 2451 of file matroskaenc.c.
Referenced by mkv_write_flush_packet().
|
static |
Definition at line 2525 of file matroskaenc.c.
|
static |
Definition at line 2543 of file matroskaenc.c.
Definition at line 2699 of file matroskaenc.c.
Referenced by mkv_init().
|
static |
Definition at line 2717 of file matroskaenc.c.
|
static |
Definition at line 2802 of file matroskaenc.c.
|
static |
Definition at line 2817 of file matroskaenc.c.
|
static |
Definition at line 2833 of file matroskaenc.c.
|
static |
Definition at line 2840 of file matroskaenc.c.
|
static |
Definition at line 2849 of file matroskaenc.c.
|
static |
Definition at line 2866 of file matroskaenc.c.