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_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 164 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 168 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 171 of file matroskaenc.c.
#define OPUS_SEEK_PREROLL 80000000 |
Seek preroll value for opus.
Definition at line 174 of file matroskaenc.c.
#define CASE | ( | type, | |
variable | |||
) |
#define OFFSET | ( | x | ) | offsetof(MatroskaMuxContext, x) |
Definition at line 2782 of file matroskaenc.c.
#define FLAGS AV_OPT_FLAG_ENCODING_PARAM |
Definition at line 2783 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 176 of file matroskaenc.c.
Referenced by mkv_write_seekhead(), and put_ebml_id().
|
static |
Definition at line 181 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 193 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 204 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 217 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 226 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 239 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 257 of file matroskaenc.c.
Referenced by mkv_write_attachments(), mkv_write_tag_targets(), and mkv_write_track().
|
static |
Definition at line 264 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 277 of file matroskaenc.c.
Referenced by mkv_write_block().
|
static |
Definition at line 291 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 298 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 306 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 318 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 336 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 346 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 356 of file matroskaenc.c.
Referenced by end_ebml_master_crc32(), and end_ebml_master_crc32_tentatively().
|
static |
Definition at line 367 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 380 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 417 of file matroskaenc.c.
Referenced by mkv_write_header(), mkv_write_tags(), and mkv_write_tracks().
|
static |
Definition at line 440 of file matroskaenc.c.
Referenced by put_xiph_codecpriv().
|
static |
Free the members allocated in the mux context.
Definition at line 449 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 469 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 489 of file matroskaenc.c.
Referenced by mkv_write_header(), and mkv_write_trailer().
|
static |
Definition at line 530 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 553 of file matroskaenc.c.
Referenced by mkv_write_trailer().
|
static |
Definition at line 602 of file matroskaenc.c.
Referenced by mkv_write_native_codecprivate().
|
static |
Definition at line 632 of file matroskaenc.c.
Referenced by mkv_write_native_codecprivate().
|
static |
Definition at line 641 of file matroskaenc.c.
Referenced by mkv_write_native_codecprivate().
|
static |
Definition at line 677 of file matroskaenc.c.
Referenced by mkv_check_new_extra_data(), and mkv_write_track().
|
static |
Definition at line 710 of file matroskaenc.c.
Referenced by mkv_write_codecprivate().
|
static |
Definition at line 762 of file matroskaenc.c.
Referenced by mkv_check_new_extra_data(), and mkv_write_track().
|
static |
Definition at line 831 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 916 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 983 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 1022 of file matroskaenc.c.
Referenced by mkv_write_track().
|
static |
Definition at line 1113 of file matroskaenc.c.
Referenced by mkv_write_tracks().
|
static |
Definition at line 1376 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1434 of file matroskaenc.c.
Referenced by mkv_write_tag().
|
static |
Definition at line 1468 of file matroskaenc.c.
Referenced by mkv_write_tag().
|
static |
Definition at line 1488 of file matroskaenc.c.
Referenced by mkv_check_tag(), and mkv_write_tag().
|
static |
Definition at line 1502 of file matroskaenc.c.
Referenced by mkv_write_chapters(), and mkv_write_tags().
|
static |
Definition at line 1528 of file matroskaenc.c.
Referenced by mkv_write_chapters(), and mkv_write_tags().
|
static |
Definition at line 1539 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1612 of file matroskaenc.c.
Referenced by mkv_write_header(), and mkv_write_trailer().
|
static |
Definition at line 1699 of file matroskaenc.c.
Referenced by mkv_init(), and mkv_write_attachments().
|
static |
Definition at line 1716 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1760 of file matroskaenc.c.
Referenced by mkv_write_header().
|
static |
Definition at line 1784 of file matroskaenc.c.
Definition at line 1941 of file matroskaenc.c.
Referenced by mkv_write_packet_internal(), and mkv_write_vtt_blocks().
Definition at line 1950 of file matroskaenc.c.
Referenced by mkv_write_block().
|
static |
Definition at line 2003 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 2115 of file matroskaenc.c.
Referenced by mkv_write_packet_internal().
|
static |
Definition at line 2162 of file matroskaenc.c.
Referenced by mkv_write_flush_packet(), mkv_write_packet(), and mkv_write_packet_internal().
|
static |
Definition at line 2181 of file matroskaenc.c.
Referenced by mkv_write_packet().
|
static |
Definition at line 2271 of file matroskaenc.c.
Referenced by mkv_write_packet(), and mkv_write_trailer().
|
static |
Definition at line 2363 of file matroskaenc.c.
Referenced by mkv_write_flush_packet().
|
static |
Definition at line 2437 of file matroskaenc.c.
|
static |
Definition at line 2455 of file matroskaenc.c.
Definition at line 2611 of file matroskaenc.c.
Definition at line 2628 of file matroskaenc.c.
Definition at line 2638 of file matroskaenc.c.
Referenced by mkv_init().
|
static |
Definition at line 2656 of file matroskaenc.c.
|
static |
Definition at line 2737 of file matroskaenc.c.
|
static |
Definition at line 2752 of file matroskaenc.c.
|
static |
Definition at line 2768 of file matroskaenc.c.
|
static |
Definition at line 2775 of file matroskaenc.c.
|
static |
Definition at line 2784 of file matroskaenc.c.