static int vc1test_write_header(AVFormatContext *s) { AVCodecContext *avc = s->streams[0]->codec; AVIOContext *pb = s->pb; if (avc->codec_id != CODEC_ID_WMV3) { av_log(s, AV_LOG_ERROR, "Only WMV3 is accepted!\n"); return -1; } avio_wl24(pb, 0); //frames count will be here avio_w8(pb, 0xC5); avio_wl32(pb, 4); avio_write(pb, avc->extradata, 4); avio_wl32(pb, avc->height); avio_wl32(pb, avc->width); avio_wl32(pb, 0xC); avio_wl24(pb, 0); // hrd_buffer avio_w8(pb, 0x80); // level|cbr|res1 avio_wl32(pb, 0); // hrd_rate if (s->streams[0]->r_frame_rate.den && s->streams[0]->r_frame_rate.num == 1) avio_wl32(pb, s->streams[0]->r_frame_rate.den); else avio_wl32(pb, 0xFFFFFFFF); //variable framerate avpriv_set_pts_info(s->streams[0], 32, 1, 1000); return 0; }
static int vc1test_write_trailer(AVFormatContext *s) { RCVContext *ctx = s->priv_data; AVIOContext *pb = s->pb; if (s->pb->seekable) { avio_seek(pb, 0, SEEK_SET); avio_wl24(pb, ctx->frames); avio_flush(pb); } return 0; }
static int vc1test_write_trailer(AVFormatContext *s) { RCVContext *ctx = s->priv_data; AVIOContext *pb = s->pb; if (!url_is_streamed(s->pb)) { avio_seek(pb, 0, SEEK_SET); avio_wl24(pb, ctx->frames); put_flush_packet(pb); } return 0; }
static int voc_write_packet(AVFormatContext *s, AVPacket *pkt) { VocEncContext *voc = s->priv_data; AVCodecContext *enc = s->streams[0]->codec; AVIOContext *pb = s->pb; if (!voc->param_written) { if (enc->codec_tag > 3) { avio_w8(pb, VOC_TYPE_NEW_VOICE_DATA); avio_wl24(pb, pkt->size + 12); avio_wl32(pb, enc->sample_rate); avio_w8(pb, enc->bits_per_coded_sample); avio_w8(pb, enc->channels); avio_wl16(pb, enc->codec_tag); avio_wl32(pb, 0); } else { if (s->streams[0]->codec->channels > 1) { avio_w8(pb, VOC_TYPE_EXTENDED); avio_wl24(pb, 4); avio_wl16(pb, 65536-(256000000 + enc->sample_rate*enc->channels/2)/(enc->sample_rate*enc->channels)); avio_w8(pb, enc->codec_tag); avio_w8(pb, enc->channels - 1); } avio_w8(pb, VOC_TYPE_VOICE_DATA); avio_wl24(pb, pkt->size + 2); avio_w8(pb, 256 - (1000000 + enc->sample_rate/2) / enc->sample_rate); avio_w8(pb, enc->codec_tag); } voc->param_written = 1; } else { avio_w8(pb, VOC_TYPE_VOICE_DATA_CONT); avio_wl24(pb, pkt->size); } avio_write(pb, pkt->data, pkt->size); return 0; }