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

Reply via email to