Hi Mark, getting a 0 value back from avcodec_encode_video is OK( http://cekirdek.pardus.org.tr/~ismail/ffmpeg-docs/avcodec_8h.html#d963e70f15a45939cec41d99fa3f3ab7),
i think you doesn't write your file correct. Instead of writing only to an opened file descriptor, try using an AVFormatContext to write the MP4 file. Regards, Jan 2010/6/16 Mark Kenna <[email protected]> > > On 15/06/2010 14:44, Mark Kenna wrote: > >> >> >> On 15/06/2010 14:23, Mark Kenna wrote: >> >>> On 15/06/2010 13:59, Muras wrote: >>> >>>> wats the error are u getting >>>> >>>> On Tue, Jun 15, 2010 at 6:19 PM, Mark Kenna< >>>> [email protected]> wrote: >>>> >>>> Hi >>>>> >>>>> I am attempting to modify api_example.c to encode to a CODEC_ID_H264. I >>>>> am >>>>> having some trouble and it's possibly due to my lack of knowledge on >>>>> the >>>>> sample parameters. Can someone please suggest whether there is >>>>> something >>>>> extra that needs to be done to encode H264? >>>>> >>>>> Thanks, >>>>> Mark. >>>>> _______________________________________________ >>>>> libav-user mailing list >>>>> [email protected] >>>>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>>>> >>>>> _______________________________________________ >>>> libav-user mailing list >>>> [email protected] >>>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>>> >>> >>> Hi >>> >>> I am getting a value of zero returned from: avcodec_encode_video(c, >>> outbuf, outbuf_size, NULL); >>> >>> Thanks >>> _______________________________________________ >>> libav-user mailing list >>> [email protected] >>> https://lists.mplayerhq.hu/mailman/listinfo/libav-user >>> >> >> I have modified the code to use MPEG4 encoding, this does produce a file >> but it doesn't play in VLC. Upon checking this with FFProbe, the bitrate and >> duration are showing as N/A. I include a snippet of my code. >> >>> int _tmain(int argc, _TCHAR* argv[]) >>> { >>> av_register_all(); >>> >>> const char* filename = "test1.mp4"; >>> >>> AVCodec *codec; >>> AVCodecContext *c= NULL; >>> int i, out_size, size, x, y, outbuf_size; >>> FILE *f; >>> AVFrame *picture; >>> uint8_t *outbuf, *picture_buf; >>> >>> printf("Video encoding\n"); >>> >>> /* find the mpeg1 video encoder */ >>> codec = avcodec_find_encoder(CodecID::CODEC_ID_MPEG4); >>> if (!codec) { >>> fprintf(stderr, "codec not found\n"); >>> exit(1); >>> } >>> >>> c= avcodec_alloc_context(); >>> picture= avcodec_alloc_frame(); >>> >>> // /* put sample parameters */ >>> // c->bit_rate = 400000; >>> // /* resolution must be a multiple of two */ >>> // c->width = 640; >>> // c->height = 480; >>> // /* frames per second */ >>> //c->time_base.den = 25; >>> //c->time_base.num = 1; >>> // c->gop_size = 10; /* emit one intra frame every ten frames */ >>> // c->max_b_frames=10; >>> // c->pix_fmt = PIX_FMT_YUV420P; >>> >>> c->width = 192; >>> c->height = 144; >>> c->keyint_min = 10; >>> c->i_quant_factor = 0.71; >>> c->bit_rate_tolerance = 20000; >>> c->rc_max_rate = 100000; >>> c->rc_buffer_size = 8835000; >>> c->qcompress = 0.6; >>> c->qmin = 10; >>> c->qmax = 30; >>> c->max_qdiff = 4; >>> c->gop_size = 30; >>> c->time_base.num = 1; >>> c->time_base.den = 25; >>> c->sample_aspect_ratio = av_d2q(1, 255); >>> c->profile = 30; >>> c->level = 30; >>> c->pix_fmt = PIX_FMT_YUV420P; >>> >>> /* open it */ >>> if (avcodec_open(c, codec) < 0) { >>> fprintf(stderr, "could not open codec\n"); >>> exit(1); >>> } >>> >>> f = fopen(filename, "wb"); >>> if (!f) { >>> fprintf(stderr, "could not open %s\n", filename); >>> exit(1); >>> } >>> >>> /* alloc image and output buffer */ >>> outbuf_size = 100000; >>> outbuf = (uint8_t*)malloc(outbuf_size); >>> size = c->width * c->height; >>> picture_buf = (uint8_t*)malloc((size * 3) / 2); /* size for YUV 420 */ >>> >>> picture->data[0] = picture_buf; >>> picture->data[1] = picture->data[0] + size; >>> picture->data[2] = picture->data[1] + size / 4; >>> picture->linesize[0] = c->width; >>> picture->linesize[1] = c->width / 2; >>> picture->linesize[2] = c->width / 2; >>> >>> /* encode 1 second of video */ >>> for(i=0;i<25;i++) { >>> fflush(stdout); >>> /* prepare a dummy image */ >>> /* Y */ >>> for(y=0;y<c->height;y++) { >>> for(x=0;x<c->width;x++) { >>> picture->data[0][y * picture->linesize[0] + x] = x + y + i >>> * 3; >>> } >>> } >>> >>> /* Cb and Cr */ >>> for(y=0;y<c->height/2;y++) { >>> for(x=0;x<c->width/2;x++) { >>> picture->data[1][y * picture->linesize[1] + x] = 128 + y + >>> i * 2; >>> picture->data[2][y * picture->linesize[2] + x] = 64 + x + >>> i * 5; >>> } >>> } >>> >>> /* encode the image */ >>> out_size = avcodec_encode_video(c, outbuf, outbuf_size, picture); >>> printf("encoding frame %3d (size=%5d)\n", i, out_size); >>> fwrite(outbuf, sizeof(uint8_t), out_size, f); >>> } >>> >>> fclose(f); >>> free(picture_buf); >>> free(outbuf); >>> >>> avcodec_close(c); >>> av_free(c); >>> av_free(picture); >>> printf("\n"); >>> >>> return 0; >>> } >>> >> >> > I am still unable to successfully encode anything to H264 when using > CODEC_Id_H264 due to a 0-value being returned from avcodec_encode_video. Can > someone please suggest a possible course of action. > > > Thanks, > Mark. > > _______________________________________________ > libav-user mailing list > [email protected] > https://lists.mplayerhq.hu/mailman/listinfo/libav-user > > _______________________________________________ libav-user mailing list [email protected] https://lists.mplayerhq.hu/mailman/listinfo/libav-user
