Break long comments
Originally committed as revision 10363 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
a6da1aa057
commit
cfde5d18f5
@ -73,10 +73,12 @@ typedef struct MatroskaMuxContext {
|
|||||||
} MatroskaMuxContext;
|
} MatroskaMuxContext;
|
||||||
|
|
||||||
|
|
||||||
// 2 bytes * 3 for EBML IDs, 3 1-byte EBML lengths, 8 bytes for 64 bit offset, 4 bytes for target EBML ID
|
// 2 bytes * 3 for EBML IDs, 3 1-byte EBML lengths, 8 bytes for 64 bit
|
||||||
|
// offset, 4 bytes for target EBML ID
|
||||||
#define MAX_SEEKENTRY_SIZE 21
|
#define MAX_SEEKENTRY_SIZE 21
|
||||||
|
|
||||||
// per-cuepoint-track - 3 1-byte EBML IDs, 3 1-byte EBML sizes, 2 8-byte uint max
|
// per-cuepoint-track - 3 1-byte EBML IDs, 3 1-byte EBML sizes, 2
|
||||||
|
// 8-byte uint max
|
||||||
#define MAX_CUETRACKPOS_SIZE 22
|
#define MAX_CUETRACKPOS_SIZE 22
|
||||||
|
|
||||||
// per-cuepoint - 2 1-byte EBML IDs, 2 1-byte EBML sizes, 8-byte uint max
|
// per-cuepoint - 2 1-byte EBML IDs, 2 1-byte EBML sizes, 8-byte uint max
|
||||||
@ -188,8 +190,8 @@ static void put_ebml_string(ByteIOContext *pb, unsigned int elementid, const cha
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes a void element of a given size. Useful for reserving space in the file to be
|
* Writes a void element of a given size. Useful for reserving space in
|
||||||
* written to later.
|
* the file to be written to later.
|
||||||
*
|
*
|
||||||
* @param size The number of bytes to reserve, which must be at least 2.
|
* @param size The number of bytes to reserve, which must be at least 2.
|
||||||
*/
|
*/
|
||||||
@ -201,8 +203,9 @@ static void put_ebml_void(ByteIOContext *pb, uint64_t size)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
put_ebml_id(pb, EBML_ID_VOID);
|
put_ebml_id(pb, EBML_ID_VOID);
|
||||||
// we need to subtract the length needed to store the size from the size we need to reserve
|
// we need to subtract the length needed to store the size from the
|
||||||
// so 2 cases, we use 8 bytes to store the size if possible, 1 byte otherwise
|
// size we need to reserve so 2 cases, we use 8 bytes to store the
|
||||||
|
// size if possible, 1 byte otherwise
|
||||||
if (size < 10)
|
if (size < 10)
|
||||||
put_ebml_size(pb, size-1, 0);
|
put_ebml_size(pb, size-1, 0);
|
||||||
else
|
else
|
||||||
@ -236,13 +239,15 @@ static void put_xiph_size(ByteIOContext *pb, int size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize a mkv_seekhead element to be ready to index level 1 Matroska elements.
|
* Initialize a mkv_seekhead element to be ready to index level 1 Matroska
|
||||||
* If a maximum number of elements is specified, enough space will be reserved at
|
* elements. If a maximum number of elements is specified, enough space
|
||||||
* the current file location to write a seek head of that size.
|
* will be reserved at the current file location to write a seek head of
|
||||||
|
* that size.
|
||||||
*
|
*
|
||||||
* @param segment_offset The absolute offset to the position in the file where the segment begins
|
* @param segment_offset The absolute offset to the position in the file
|
||||||
* @param numelements the maximum number of elements that will be indexed by this
|
* where the segment begins
|
||||||
* seek head, 0 if unlimited.
|
* @param numelements the maximum number of elements that will be indexed
|
||||||
|
* by this seek head, 0 if unlimited.
|
||||||
*/
|
*/
|
||||||
static mkv_seekhead * mkv_start_seekhead(ByteIOContext *pb, offset_t segment_offset, int numelements)
|
static mkv_seekhead * mkv_start_seekhead(ByteIOContext *pb, offset_t segment_offset, int numelements)
|
||||||
{
|
{
|
||||||
@ -254,8 +259,9 @@ static mkv_seekhead * mkv_start_seekhead(ByteIOContext *pb, offset_t segment_off
|
|||||||
|
|
||||||
if (numelements > 0) {
|
if (numelements > 0) {
|
||||||
new_seekhead->filepos = url_ftell(pb);
|
new_seekhead->filepos = url_ftell(pb);
|
||||||
// 21 bytes max for a seek entry, 10 bytes max for the SeekHead ID and size,
|
// 21 bytes max for a seek entry, 10 bytes max for the SeekHead ID
|
||||||
// and 3 bytes to guarantee that an EBML void element will fit afterwards
|
// and size, and 3 bytes to guarantee that an EBML void element
|
||||||
|
// will fit afterwards
|
||||||
new_seekhead->reserved_size = numelements * MAX_SEEKENTRY_SIZE + 13;
|
new_seekhead->reserved_size = numelements * MAX_SEEKENTRY_SIZE + 13;
|
||||||
new_seekhead->max_entries = numelements;
|
new_seekhead->max_entries = numelements;
|
||||||
put_ebml_void(pb, new_seekhead->reserved_size);
|
put_ebml_void(pb, new_seekhead->reserved_size);
|
||||||
@ -286,9 +292,10 @@ static int mkv_add_seekhead_entry(mkv_seekhead *seekhead, unsigned int elementid
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write the seek head to the file and free it. If a maximum number of elements was
|
* Write the seek head to the file and free it. If a maximum number of
|
||||||
* specified to mkv_start_seekhead(), the seek head will be written at the location
|
* elements was specified to mkv_start_seekhead(), the seek head will
|
||||||
* reserved for it. Otherwise, it is written at the current location in the file.
|
* be written at the location reserved for it. Otherwise, it is written
|
||||||
|
* at the current location in the file.
|
||||||
*
|
*
|
||||||
* @return the file offset where the seekhead was written
|
* @return the file offset where the seekhead was written
|
||||||
*/
|
*/
|
||||||
@ -514,7 +521,8 @@ static int mkv_write_tracks(AVFormatContext *s)
|
|||||||
else
|
else
|
||||||
put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, "und");
|
put_ebml_string(pb, MATROSKA_ID_TRACKLANGUAGE, "und");
|
||||||
|
|
||||||
// look for a codec id string specific to mkv to use, if none are found, use AVI codes
|
// look for a codec id string specific to mkv to use,
|
||||||
|
// if none are found, use AVI codes
|
||||||
for (j = 0; ff_mkv_codec_tags[j].id != CODEC_ID_NONE; j++) {
|
for (j = 0; ff_mkv_codec_tags[j].id != CODEC_ID_NONE; j++) {
|
||||||
if (ff_mkv_codec_tags[j].id == codec->codec_id) {
|
if (ff_mkv_codec_tags[j].id == codec->codec_id) {
|
||||||
put_ebml_string(pb, MATROSKA_ID_CODECID, ff_mkv_codec_tags[j].str);
|
put_ebml_string(pb, MATROSKA_ID_CODECID, ff_mkv_codec_tags[j].str);
|
||||||
@ -627,10 +635,11 @@ static int mkv_write_header(AVFormatContext *s)
|
|||||||
mkv->segment = start_ebml_master(pb, MATROSKA_ID_SEGMENT, 0);
|
mkv->segment = start_ebml_master(pb, MATROSKA_ID_SEGMENT, 0);
|
||||||
mkv->segment_offset = url_ftell(pb);
|
mkv->segment_offset = url_ftell(pb);
|
||||||
|
|
||||||
// we write 2 seek heads - one at the end of the file to point to each cluster, and
|
// we write 2 seek heads - one at the end of the file to point to each
|
||||||
// one at the beginning to point to all other level one elements (including the seek
|
// cluster, and one at the beginning to point to all other level one
|
||||||
// head at the end of the file), which isn't more than 10 elements if we only write one
|
// elements (including the seek head at the end of the file), which
|
||||||
// of each other currently defined level 1 element
|
// isn't more than 10 elements if we only write one of each other
|
||||||
|
// currently defined level 1 element
|
||||||
mkv->main_seekhead = mkv_start_seekhead(pb, mkv->segment_offset, 10);
|
mkv->main_seekhead = mkv_start_seekhead(pb, mkv->segment_offset, 10);
|
||||||
mkv->cluster_seekhead = mkv_start_seekhead(pb, mkv->segment_offset, 0);
|
mkv->cluster_seekhead = mkv_start_seekhead(pb, mkv->segment_offset, 0);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user