avccontext->time_base.den = avccontext->sample_rate; avccontext->time_base.num = 1;
static int oggvorbis_encode_init(AVCodecContext *avccontext) {    OggVorbisContext *context = avccontext->priv_data ;    ogg_packet header, header_comm, header_code;    uint8_t *p;    unsigned int offset, len;    vorbis_info_init(&context->vi) ;    if(oggvorbis_init_encoder(&context->vi, avccontext) < 0) {	av_log(avccontext, AV_LOG_ERROR, "oggvorbis_encode_init: init_encoder failed") ;	return -1 ;    }    vorbis_analysis_init(&context->vd, &context->vi) ;    vorbis_block_init(&context->vd, &context->vb) ;    vorbis_comment_init(&context->vc);    vorbis_comment_add_tag(&context->vc, "encoder", LIBAVCODEC_IDENT) ;    vorbis_analysis_headerout(&context->vd, &context->vc, &header,                                &header_comm, &header_code);        len = header.bytes + header_comm.bytes +  header_code.bytes;    avccontext->extradata_size= 64 + len + len/255;    p = avccontext->extradata= av_mallocz(avccontext->extradata_size);    p[0] = 2;    offset = 1;    offset += av_xiphlacing(&p[offset], header.bytes);    offset += av_xiphlacing(&p[offset], header_comm.bytes);    memcpy(&p[offset], header.packet, header.bytes);    offset += header.bytes;    memcpy(&p[offset], header_comm.packet, header_comm.bytes);    offset += header_comm.bytes;    memcpy(&p[offset], header_code.packet, header_code.bytes);    offset += header_code.bytes;    avccontext->extradata_size = offset;    avccontext->extradata= av_realloc(avccontext->extradata, avccontext->extradata_size);                                /*    vorbis_block_clear(&context->vb);    vorbis_dsp_clear(&context->vd);    vorbis_info_clear(&context->vi);*/    vorbis_comment_clear(&context->vc);           avccontext->frame_size = OGGVORBIS_FRAME_SIZE ;     avccontext->coded_frame= avcodec_alloc_frame();    avccontext->coded_frame->key_frame= 1;        return 0 ;}