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

Reply via email to