static int gxf_write_track_description(AVFormatContext *s, GXFStreamContext *sc, int index) { GXFContext *gxf = s->priv_data; AVIOContext *pb = s->pb; int64_t pos; /* track description section */ avio_w8(pb, sc->media_type + 0x80); avio_w8(pb, index + 0xC0); pos = avio_tell(pb); avio_wb16(pb, 0); /* size */ /* media file name */ avio_w8(pb, TRACK_NAME); avio_w8(pb, strlen(ES_NAME_PATTERN) + 3); avio_write(pb, ES_NAME_PATTERN, sizeof(ES_NAME_PATTERN) - 1); avio_wb16(pb, sc->media_info); avio_w8(pb, 0); switch (sc->track_type) { case 3: /* timecode */ gxf_write_timecode_auxiliary(pb, gxf); break; case 4: /* MPEG2 */ case 9: /* MPEG1 */ gxf_write_mpeg_auxiliary(pb, s->streams[index]); break; case 5: /* DV25 */ case 6: /* DV50 */ gxf_write_dv_auxiliary(pb, s->streams[index]); break; default: avio_w8(pb, TRACK_AUX); avio_w8(pb, 8); avio_wl64(pb, 0); } /* file system version */ avio_w8(pb, TRACK_VER); avio_w8(pb, 4); avio_wb32(pb, 0); /* frame rate */ avio_w8(pb, TRACK_FPS); avio_w8(pb, 4); avio_wb32(pb, sc->frame_rate_index); /* lines per frame */ avio_w8(pb, TRACK_LINES); avio_w8(pb, 4); avio_wb32(pb, sc->lines_index); /* fields per frame */ avio_w8(pb, TRACK_FPF); avio_w8(pb, 4); avio_wb32(pb, sc->fields); return updateSize(pb, pos); }
static int gxf_write_track_description(AVFormatContext *s, GXFStreamContext *sc, int index) { GXFContext *gxf = s->priv_data; AVIOContext *pb = s->pb; int64_t pos; int mpeg = sc->track_type == 4 || sc->track_type == 9; /* track description section */ avio_w8(pb, sc->media_type + 0x80); avio_w8(pb, index + 0xC0); pos = avio_tell(pb); avio_wb16(pb, 0); /* size */ /* media file name */ avio_w8(pb, TRACK_NAME); avio_w8(pb, strlen(ES_NAME_PATTERN) + 3); avio_write(pb, ES_NAME_PATTERN, sizeof(ES_NAME_PATTERN) - 1); avio_wb16(pb, sc->media_info); avio_w8(pb, 0); if (!mpeg) { /* auxiliary information */ avio_w8(pb, TRACK_AUX); avio_w8(pb, 8); if (sc->track_type == 3) gxf_write_timecode_auxiliary(pb, gxf); else avio_wl64(pb, 0); } /* file system version */ avio_w8(pb, TRACK_VER); avio_w8(pb, 4); avio_wb32(pb, 0); if (mpeg) gxf_write_mpeg_auxiliary(pb, s->streams[index]); /* frame rate */ avio_w8(pb, TRACK_FPS); avio_w8(pb, 4); avio_wb32(pb, sc->frame_rate_index); /* lines per frame */ avio_w8(pb, TRACK_LINES); avio_w8(pb, 4); avio_wb32(pb, sc->lines_index); /* fields per frame */ avio_w8(pb, TRACK_FPF); avio_w8(pb, 4); avio_wb32(pb, sc->fields); return updateSize(pb, pos); }
static int gxf_write_track_description(ByteIOContext *pb, GXFStreamContext *stream) { int64_t pos; /* track description section */ put_byte(pb, stream->media_type + 0x80); put_byte(pb, stream->index + 0xC0); pos = url_ftell(pb); put_be16(pb, 0); /* size */ /* media file name */ put_byte(pb, TRACK_NAME); put_byte(pb, strlen(ES_NAME_PATTERN) + 3); put_tag(pb, ES_NAME_PATTERN); put_be16(pb, stream->media_info); put_byte(pb, 0); if (stream->codec->codec_id != CODEC_ID_MPEG2VIDEO) { /* auxiliary information */ put_byte(pb, TRACK_AUX); put_byte(pb, 8); if (stream->codec->codec_id == CODEC_ID_NONE) gxf_write_timecode_auxiliary(pb, stream); else put_le64(pb, 0); } /* file system version */ put_byte(pb, TRACK_VER); put_byte(pb, 4); put_be32(pb, 0); if (stream->codec->codec_id == CODEC_ID_MPEG2VIDEO) gxf_write_mpeg_auxiliary(pb, stream); /* frame rate */ put_byte(pb, TRACK_FPS); put_byte(pb, 4); put_be32(pb, stream->frame_rate_index); /* lines per frame */ put_byte(pb, TRACK_LINES); put_byte(pb, 4); put_be32(pb, stream->lines_index); /* fields per frame */ put_byte(pb, TRACK_FPF); put_byte(pb, 4); put_be32(pb, stream->fields); return updateSize(pb, pos); }