static void write_segmentation_framework(AppInfoWriter *info_writer, DMSegment *seg, Timecode start_timecode,
                                         int64_t offset, Rational edit_rate)
{
    AS11SegmentationFramework *framework = dynamic_cast<AS11SegmentationFramework*>(seg->getDMFramework());

    Timecode som = start_timecode;
    som.AddOffset(offset, edit_rate);

    AppTextInfoWriter *text_writer = dynamic_cast<AppTextInfoWriter*>(info_writer);
    if (text_writer)
        text_writer->PushItemValueIndent(strlen("part_number "));

    info_writer->WriteIntegerItem("part_number", framework->GetPartNumber());
    info_writer->WriteIntegerItem("part_total", framework->GetPartNumber());
    info_writer->WriteTimecodeItem("som", som);
    info_writer->WriteDurationItem("duration", seg->getDuration(), edit_rate);

    if (text_writer)
        text_writer->PopItemValueIndent();
}