Any help would be appreciated. Thanks Karthik
On 6 June 2013 15:51, Karthik Viswanathan <vkarthi...@gmail.com> wrote: > Hello, > > I got the ffmpeg builds from zeranoe[20130601-git-716dbc7] & used gcc > 4.8.0 on windows to compile. > > I am trying to convert a h264 video to webm. The output video is empty > and the console is filled with 'Provided packet is too small, needs to > be 612'. > > ////////////////////// the decoder: > > pFormatCtxIn = avformat_alloc_context(); > > ret = avformat_open_input(&pFormatCtxIn, "bump.mp4", NULL, NULL); > > if(avformat_find_stream_info(pFormatCtxIn,NULL)<0) > return -1; > > video_stream_idx = -1; > for(i=0; i<pFormatCtxIn->nb_streams; i++){ > if(pFormatCtxIn->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) > { > video_stream_idx=i; > } > } > > if(video_stream_idx==-1) > return -1; > > pCodecCtxIn = pFormatCtxIn->streams[video_stream_idx]->codec; > > pCodecIn = avcodec_find_decoder(pCodecCtxIn->codec_id); > > avcodec_open2(pCodecCtxIn,pCodecIn, NULL); > > if(pCodecCtxIn->time_base.num>1000 && pCodecCtxIn->time_base.den==1) > pCodecCtxIn->time_base.den=1000; > > /////////////////// the encoder: > > pOfmtOut = av_guess_format(NULL, filename,NULL); > > pFormatCtxOut = avformat_alloc_context(); > > pOfmtOut->video_codec = AV_CODEC_ID_VP8; > > pFormatCtxOut->oformat = pOfmtOut; > > > snprintf(pFormatCtxOut->filename,sizeof(pFormatCtxOut->filename),"%s",filename); > > strmVdoOut = avformat_new_stream(pFormatCtxOut,NULL); > > pCodecCtxOut = strmVdoOut->codec; > > pCodecCtxOut->codec_id = pOfmtOut->video_codec; > pCodecCtxOut->codec_type = AVMEDIA_TYPE_VIDEO; > > pCodecCtxOut->bit_rate = 4000; /* open it */ > pCodecCtxOut->pix_fmt = AV_PIX_FMT_YUV420P; > pCodecCtxOut->width = 1360; > pCodecCtxOut->height = 760; > pCodecCtxOut->time_base= (AVRational){1,30}; > > if(pFormatCtxOut->oformat->flags & AVFMT_GLOBALHEADER) > pCodecCtxOut->flags |= CODEC_FLAG_GLOBAL_HEADER; > > pCodecOut = avcodec_find_encoder(pCodecCtxOut->codec_id); > > avcodec_open2(pCodecCtxOut, pCodecOut,NULL); > > avio_open(&pFormatCtxOut->pb, filename, AVIO_FLAG_WRITE); > > ret = avformat_write_header(pFormatCtxOut, NULL); > > /////////////////// frame allocation > > frame = avcodec_alloc_frame(); > > frame->format = pCodecCtxOut->pix_fmt; > frame->width = pCodecCtxOut->width; > frame->height = pCodecCtxOut->height; > > ret = av_image_alloc(frame->data, frame->linesize, > pCodecCtxOut->width, pCodecCtxOut->height,pCodecCtxOut->pix_fmt, 32); > > //////////////////// the transcoding > > i = 0; > while(++i) { > av_init_packet(&packet); > > ret = av_read_frame(pFormatCtxIn,&packet); > if(ret < 0){ > fprintf(stderr,"Error reading frame\n"); > break; > } > > if(packet.stream_index == video_stream_idx){ > > ret = avcodec_decode_video2(pCodecCtxIn,frame,&got_output,&packet); > > if (got_output) { > > frame->pts=i; > > ret = avcodec_encode_video2(pCodecCtxOut, &packet, frame, > &got_output); > > if (got_output) { > > if (pCodecCtxOut->coded_frame->pts != (0x8000000000000000LL)) > packet.pts = av_rescale_q(pCodecCtxOut->coded_frame->pts, > pCodecCtxOut->time_base, strmVdoOut->time_base); > > if(pCodecCtxOut->coded_frame->key_frame) > packet.flags |= AV_PKT_FLAG_KEY; > > if(av_interleaved_write_frame(pFormatCtxOut,&packet) < 0){ > fprintf(stderr,"error writing frame"); > exit(1); > } > } > } > } > av_free_packet(&packet); > } > > The full code is available here: > https://www.dropbox.com/s/agltcde1o1mej7h/try.c -- - Karthik _______________________________________________ Libav-user mailing list Libav-user@ffmpeg.org http://ffmpeg.org/mailman/listinfo/libav-user