summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmkv/nut-3.c115
1 files changed, 54 insertions, 61 deletions
diff --git a/libmkv/nut-3.c b/libmkv/nut-3.c
index 2bd552d..0441400 100644
--- a/libmkv/nut-3.c
+++ b/libmkv/nut-3.c
@@ -270,76 +270,70 @@ bool app_write_intro(int fd, struct app_state *state, uint64_t time_ns) {
pkt.len = 0;
/* head *******************************************/
- nut_append_vu(&pkt, 4); /*! version */
- nut_append_vu(&pkt, 0); /*! minor_version */
- nut_append_vu(&pkt, 1); /*! stream_count */
- nut_append_vu(&pkt, APP_FB_SIZE(720_576) + /*! max_distance */
+ nut_append_vu(&pkt, 4); /*! version */
+ nut_append_vu(&pkt, 0); /*! minor_version */
+ nut_append_vu(&pkt, 1); /*! stream_count */
+ nut_append_vu(&pkt, APP_FB_SIZE(720_576) + /*! max_distance */
APP_FRAME_MAX_OVERHEAD);
/* time bases *************************************/
- nut_append_vu(&pkt, 1); /*! time_base_count */
+ nut_append_vu(&pkt, 1); /*! time_base_count */
/* time_base[0] = 1ns */
- nut_append_vu(&pkt, 1); /*! numerator */
- nut_append_vu(&pkt, 1000000000ULL); /*! denominator */
+ nut_append_vu(&pkt, 1); /*! numerator */
+ nut_append_vu(&pkt, 1000000000ULL); /*! denominator */
/* frame codes ************************************/
/* "A muxer SHOULD mark [frame codes] 0x00 and 0xFF as invalid" */
/* frame_code=0 (invalid) */
- nut_append_vu(&pkt, NUT_FRAMEFLAG_INVALID); /*! flags */
- nut_append_vu(&pkt, 2); /*! field_count */
- nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
- nut_append_vu(&pkt, 1); /*! 1: fields.size_msb_nul */
+ nut_append_vu(&pkt, NUT_FRAMEFLAG_INVALID); /*! flags */
+ nut_append_vu(&pkt, 2); /*! field_count */
+ nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
+ nut_append_vu(&pkt, 1); /*! 1: fields.size_msb_nul */
/* frame_code=1 (640x480) */
- nut_append_vu(&pkt, APP_COMMON_FLAGS); /*! flags */
- nut_append_vu(&pkt, 8); /*! field_count */
- nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
- nut_append_vu(&pkt, APP_FRAME_SIZE_MSB_MUL); /*! 1: fields.size_msb_nul */
- nut_append_vu(&pkt, 0); /*! 2: fields.stream */
+ nut_append_vu(&pkt, APP_COMMON_FLAGS); /*! flags */
+ nut_append_vu(&pkt, 6); /*! field_count */
+ nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
+ nut_append_vu(&pkt, APP_FRAME_SIZE_MSB_MUL); /*! 1: fields.size_msb_nul */
+ nut_append_vu(&pkt, 0); /*! 2: fields.stream */
nut_append_vu(&pkt, APP_FRAME_SIZE(640_480) % /*! 3: fields.size_lsb */
APP_FRAME_SIZE_MSB_MUL);
- nut_append_vu(&pkt, 0); /*! 4: fields.reserved */
- nut_append_vu(&pkt, 1); /*! 5: fields.count */
- nut_append_vs(&pkt, NUT_UNKNOWN_MATCH_TIME); /*! 6: fields.match */
- nut_append_vu(&pkt, 1); /*! 7: fields.elision_header */
+ nut_append_vu(&pkt, 0); /*! 4: fields.reserved */
+ nut_append_vu(&pkt, 1); /*! 5: fields.count */
/* frame_code=2 (720x480) */
- nut_append_vu(&pkt, APP_COMMON_FLAGS); /*! flags */
- nut_append_vu(&pkt, 8); /*! field_count */
- nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
- nut_append_vu(&pkt, APP_FRAME_SIZE_MSB_MUL); /*! 1: fields.size_msb_mul */
- nut_append_vu(&pkt, 0); /*! 2: fields.stream */
+ nut_append_vu(&pkt, APP_COMMON_FLAGS); /*! flags */
+ nut_append_vu(&pkt, 6); /*! field_count */
+ nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
+ nut_append_vu(&pkt, APP_FRAME_SIZE_MSB_MUL); /*! 1: fields.size_msb_mul */
+ nut_append_vu(&pkt, 0); /*! 2: fields.stream */
nut_append_vu(&pkt, APP_FRAME_SIZE(720_480) % /*! 3: fields.size_lsb */
APP_FRAME_SIZE_MSB_MUL);
- nut_append_vu(&pkt, 0); /*! 4: fields.reserved */
- nut_append_vu(&pkt, 1); /*! 5: fields.count */
- nut_append_vs(&pkt, NUT_UNKNOWN_MATCH_TIME); /*! 6: fields.match */
- nut_append_vu(&pkt, 2); /*! 7: fields.elision_header */
+ nut_append_vu(&pkt, 0); /*! 4: fields.reserved */
+ nut_append_vu(&pkt, 1); /*! 5: fields.count */
/* frame_code=3 (720x576) */
- nut_append_vu(&pkt, APP_COMMON_FLAGS); /*! flags */
- nut_append_vu(&pkt, 8); /*! field_count */
- nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
- nut_append_vu(&pkt, APP_FRAME_SIZE_MSB_MUL); /*! 1: fields.size_msb_nul */
- nut_append_vu(&pkt, 0); /*! 2: fields.stream */
- nut_append_vu(&pkt, APP_FRAME_SIZE(720_576) % /*! 3: fields.size_lsb */
+ nut_append_vu(&pkt, APP_COMMON_FLAGS); /*! flags */
+ nut_append_vu(&pkt, 6); /*! field_count */
+ nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
+ nut_append_vu(&pkt, APP_FRAME_SIZE_MSB_MUL); /*! 1: fields.size_msb_nul */
+ nut_append_vu(&pkt, 0); /*! 2: fields.stream */
+ nut_append_vu(&pkt, APP_FRAME_SIZE(720_576) % /*! 3: fields.size_lsb */
APP_FRAME_SIZE_MSB_MUL);
- nut_append_vu(&pkt, 0); /*! 4: fields.reserved */
- nut_append_vu(&pkt, 1); /*! 5: fields.count */
- nut_append_vs(&pkt, NUT_UNKNOWN_MATCH_TIME); /*! 6: fields.match */
- nut_append_vu(&pkt, 2); /*! 7: fields.elision_header */
+ nut_append_vu(&pkt, 0); /*! 4: fields.reserved */
+ nut_append_vu(&pkt, 1); /*! 5: fields.count */
/* frame_code=4-255 (invalid) */
- nut_append_vu(&pkt, NUT_FRAMEFLAG_INVALID); /*! flags */
- nut_append_vu(&pkt, 2); /*! field_count */
- nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
- nut_append_vu(&pkt, 256-4-1); /*! 1: fields.size_msb_nul */
+ nut_append_vu(&pkt, NUT_FRAMEFLAG_INVALID); /*! flags */
+ nut_append_vu(&pkt, 2); /*! field_count */
+ nut_append_vu(&pkt, BOGUS); /*! 0: fields.pts */
+ nut_append_vu(&pkt, 256-4-1); /*! 1: fields.size_msb_nul */
/* tail *******************************************/
- nut_append_vu(&pkt, 0); /*! header_count_minus_1 */
- nut_append_vu(&pkt, 0); /*! main_flags */
+ nut_append_vu(&pkt, 0); /*! header_count_minus_1 */
+ nut_append_vu(&pkt, 0); /*! main_flags */
nut_append_packet(&out, nut_startcode_main, pkt.dat, pkt.len);
#undef BOGUS
@@ -348,20 +342,20 @@ bool app_write_intro(int fd, struct app_state *state, uint64_t time_ns) {
#define BOGUS 1
pkt.len = 0;
- nut_append_vu(&pkt, 0); /*! stream_id */
- nut_append_vu(&pkt, NUT_STREAMCLASS_VIDEO); /*! stream_class */
- nut_append_vb(&pkt, "BGR\x08", 4); /*! fourcc */
- nut_append_vu(&pkt, 0); /*! time_base_id */
- nut_append_vu(&pkt, BOGUS); /*! msb_pts_shift (only relevant if FRAMEFLAG_CODED_PTS) */
- nut_append_vu(&pkt, BOGUS); /*! max_pts_distance (all frames have a checksum) */
- nut_append_vu(&pkt, 0); /*! decode_delay */
- nut_append_vu(&pkt, 0); /*! stream_flags */
- nut_append_vb(&pkt, NULL, 0); /*! codec_specific_data */
- nut_append_vu(&pkt, BOGUS); /*! width (all frames set width) */
- nut_append_vu(&pkt, BOGUS); /*! height (all frames set height) */
- nut_append_vu(&pkt, 1); /*! sample_width */
- nut_append_vu(&pkt, 2); /*! sample_height */
- nut_append_vu(&pkt, NUT_COLORSPACE_UNKNOWN); /*! colorspace_type */
+ nut_append_vu(&pkt, 0); /*! stream_id */
+ nut_append_vu(&pkt, NUT_STREAMCLASS_VIDEO); /*! stream_class */
+ nut_append_vb(&pkt, "BGR\x08", 4); /*! fourcc */
+ nut_append_vu(&pkt, 0); /*! time_base_id */
+ nut_append_vu(&pkt, BOGUS); /*! msb_pts_shift (only relevant if FRAMEFLAG_CODED_PTS) */
+ nut_append_vu(&pkt, BOGUS); /*! max_pts_distance (all frames have a checksum) */
+ nut_append_vu(&pkt, 0); /*! decode_delay */
+ nut_append_vu(&pkt, 0); /*! stream_flags */
+ nut_append_vb(&pkt, NULL, 0); /*! codec_specific_data */
+ nut_append_vu(&pkt, BOGUS); /*! width (all frames set width) */
+ nut_append_vu(&pkt, BOGUS); /*! height (all frames set height) */
+ nut_append_vu(&pkt, 1); /*! sample_width */
+ nut_append_vu(&pkt, 2); /*! sample_height */
+ nut_append_vu(&pkt, NUT_COLORSPACE_UNKNOWN); /*! colorspace_type */
nut_append_packet(&out, nut_startcode_stream, pkt.dat, pkt.len);
#undef BOGUS
@@ -403,8 +397,6 @@ bool app_write_frame(int fd, struct app_state *state, uint64_t time_ns, enum app
nut_append_vu(&out, frame_size/APP_FRAME_SIZE_MSB_MUL); /*! data_size_msb (1 byte) */
nut_append_u32(&out, nut_crc32(&out.dat[frame_beg], out.len - frame_beg)); /*! checksum (4 bytes) */
- assert(out.len <= APP_FRAME_MAX_OVERHEAD);
-
/* side/meta data ( 1+(6+2)+(7+2)+1 = 19 bytes) */
uint64_t data_beg = out.len;
nut_append_vu(&out, 2); /*! side_data_count (1 byte) */
@@ -416,6 +408,7 @@ bool app_write_frame(int fd, struct app_state *state, uint64_t time_ns, enum app
assert(out.len - data_beg == APP_SM_SIZE);
/* flush */
+ assert(out.len <= APP_FRAME_MAX_OVERHEAD);
bool err = xwrite(fd, out.dat, out.len);
free(out.dat);
free(pkt.dat);