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
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;
}