[Ffmpeg-devel] Re: How to convert a RGB buffer to AVFrame?
Zinetz Victor
mail
Thu Sep 28 15:04:11 CEST 2006
Tran Huu Tri wrote:
> Hi,
>
> I need to write the program that capture buffer from webcam
> in RGB format and use ffmpeg codecs library to convert to
> mpeg video file with the codecs as CODEC_ID_MPEG1VIDEO or
> CODEC_ID_H263,?
>
>
>
> But I don?t know how to convert RGB buffer to AVFrame
> structure.
>
delphi code:
const
in_fmt: PIX_FMT_YUV420P;
var
YUVframe, RGBframe, ENCframe: PAVFrame;
YUVbuf,
RGBbuf: pointer;
size: integer;
dwWidth, dwHeight: integer;
codec_ctx: PAVCodecContext;
codec: PAVCodec;
...
YUVframe := avcodec_alloc_frame ();
size := avpicture_get_size (in_fmt, dwWidth, dwHeight);
YUVbuf := AllocMem (size);
avpicture_fill (PAVPicture (YUVframe), YUVbuf, in_fmt, dwWidth,
dwHeight);
RGBframe := avcodec_alloc_frame ();
size := avpicture_get_size (PIX_FMT_RGBA32, dwWidth, dwHeight);
RGBbuf := AllocMem (size);
avpicture_fill (PAVPicture (RGBframe), RGBbuf, PIX_FMT_RGBA32,
dwWidth, dwHeight);
codec_ctx := avcodec_alloc_context ();
codec_ctx.codec_type := CODEC_TYPE_VIDEO;
codec_ctx.codec_id := CODEC_ID_XVID;
codec_ctx.bit_rate := 100000;
codec_ctx.time_base.num := 25;
codec_ctx.time_base.den := 1;
codec_ctx.pix_fmt := in_fmt;
codec := avcodec_find_encoder (codec_ctx.codec_id);
avcodec_open (codec_ctx, codec);
...
getting data in RGBbuf
...
img_convert (PAVPicture (YuvFrame), in_fmt,
PAVPicture (RgbFrame), PIX_FMT_RGBA32,
dwWidth, dwHeight);
avcodec_encode_video (codec_ctx, EncodedBuf, 100000, YuvFrame);
More information about the ffmpeg-devel
mailing list