Exemple #1
0
static int mmf_write_trailer(AVFormatContext *s)
{
    ByteIOContext *pb = s->pb;
    MMFContext *mmf = s->priv_data;
    offset_t pos, size;
    int gatetime;

    if (!url_is_streamed(s->pb)) {
        /* Fill in length fields */
        end_tag_be(pb, mmf->awapos);
        end_tag_be(pb, mmf->atrpos);
        end_tag_be(pb, 8);

        pos = url_ftell(pb);
        size = pos - mmf->awapos;

        /* Fill Atsq chunk */
        url_fseek(pb, mmf->atsqpos, SEEK_SET);

        /* "play wav" */
        put_byte(pb, 0); /* start time */
        put_byte(pb, 1); /* (channel << 6) | wavenum */
        gatetime = size * 500 / s->streams[0]->codec->sample_rate;
        put_varlength(pb, gatetime); /* duration */

        /* "nop" */
        put_varlength(pb, gatetime); /* start time */
        put_buffer(pb, "\xff\x00", 2); /* nop */

        /* "end of sequence" */
        put_buffer(pb, "\x00\x00\x00\x00", 4);

        url_fseek(pb, pos, SEEK_SET);

        put_flush_packet(pb);
    }
    return 0;
}
Exemple #2
0
static int mmf_write_trailer(AVFormatContext *s)
{
    AVIOContext *pb = s->pb;
    MMFContext *mmf = s->priv_data;
    int64_t pos, size;
    int gatetime;

    if (s->pb->seekable) {
        /* Fill in length fields */
        end_tag_be(pb, mmf->awapos);
        end_tag_be(pb, mmf->atrpos);
        end_tag_be(pb, 8);

        pos = avio_tell(pb);
        size = pos - mmf->awapos;

        /* Fill Atsq chunk */
        avio_seek(pb, mmf->atsqpos, SEEK_SET);

        /* "play wav" */
        avio_w8(pb, 0); /* start time */
        avio_w8(pb, 1); /* (channel << 6) | wavenum */
        gatetime = size * 500 / s->streams[0]->codec->sample_rate;
        put_varlength(pb, gatetime); /* duration */

        /* "nop" */
        put_varlength(pb, gatetime); /* start time */
        avio_write(pb, "\xff\x00", 2); /* nop */

        /* "end of sequence" */
        avio_write(pb, "\x00\x00\x00\x00", 4);

        avio_seek(pb, pos, SEEK_SET);

        avio_flush(pb);
    }
    return 0;
}