void write_webm_seek_info(struct EbmlGlobal *ebml) { off_t pos; EbmlLoc start; EbmlLoc startInfo; uint64_t frame_time; char version_string[64]; /* Save the current stream pointer. */ pos = ftello(ebml->stream); if (ebml->seek_info_pos) fseeko(ebml->stream, ebml->seek_info_pos, SEEK_SET); else ebml->seek_info_pos = pos; Ebml_StartSubElement(ebml, &start, SeekHead); write_webm_seek_element(ebml, Tracks, ebml->track_pos); write_webm_seek_element(ebml, Cues, ebml->cue_pos); write_webm_seek_element(ebml, Info, ebml->segment_info_pos); Ebml_EndSubElement(ebml, &start); /* Create and write the Segment Info. */ if (ebml->debug) { strcpy(version_string, "vpxenc"); } else { strcpy(version_string, "vpxenc "); strncat(version_string, vpx_codec_version_str(), sizeof(version_string) - 1 - strlen(version_string)); } frame_time = (uint64_t)1000 * ebml->framerate.den / ebml->framerate.num; ebml->segment_info_pos = ftello(ebml->stream); Ebml_StartSubElement(ebml, &startInfo, Info); Ebml_SerializeUnsigned(ebml, TimecodeScale, 1000000); Ebml_SerializeFloat(ebml, Segment_Duration, (double)(ebml->last_pts_ms + frame_time)); Ebml_SerializeString(ebml, 0x4D80, version_string); Ebml_SerializeString(ebml, 0x5741, version_string); Ebml_EndSubElement(ebml, &startInfo); }
//------------------------------------------------------------------ void write_webm_seek_info(EbmlGlobal *global) { off_t pos; off_t start; off_t startInfo; uint64_t frame_time; char version_string[64]; /* Save the current stream pointer. */ pos = ftello(global->stream); if (global->seek_info_pos) { fseeko(global->stream, global->seek_info_pos, SEEK_SET); } else { global->seek_info_pos = pos; } Ebml_StartSubElement(global, &start, SeekHead); write_webm_seek_element(global, Tracks, global->track_pos); write_webm_seek_element(global, Cues, global->cue_pos); write_webm_seek_element(global, Info, global->segment_info_pos); Ebml_EndSubElement(global, &start); /* Create and write the Segment Info. */ strcpy(version_string, "DesktopCapture v1.0 - libVPX "); strncat(version_string, vpx_codec_version_str(), sizeof(version_string) - 1 - strlen(version_string)); frame_time = (uint64_t) 1000 * global->framerate.den / global->framerate.num; global->segment_info_pos = ftello(global->stream); Ebml_StartSubElement(global, &startInfo, Info); Ebml_SerializeUnsigned(global, TimecodeScale, 1000000); Ebml_SerializeFloat(global, Segment_Duration, (double) (global->last_pts_ms + frame_time)); Ebml_SerializeString(global, MuxingApp, version_string); Ebml_SerializeString(global, WritingApp, version_string); Ebml_EndSubElement(global, &startInfo); }