Exemple #1
0
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);
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}