Hi dear community,
I have to study the source code of the ffmpeg
source code file libavcodec/libx264.c, that ffmpeg use to encode using x264,
I paste the function of major interest for my goal:
static int X264_frame(AVCodecContext *ctx, uint8_t *buf, int bufsize, void
*data)
{
X264Context *x4 = ctx->priv_data;
AVFrame *frame = data;
x264_nal_t *nal;
int nnal, i;
x264_picture_t pic_out;
x4->pic.img.i_csp = X264_CSP_I420;
x4->pic.img.i_plane = 3;
if (frame) {
for(i = 0; i < 3; i++){
x4->pic.img.plane[i] = frame->data[i];
x4->pic.img.i_stride[i] = frame->linesize[i];
}
x4->pic.i_pts = frame->pts;
x4->pic.i_type = X264_TYPE_AUTO;
}
if(x264_encoder_encode(x4->enc, &nal, &nnal, frame? &x4->pic: NULL,
&pic_out))
return -1;
bufsize = encode_nals(ctx, buf, bufsize, nal, nnal, 0);
if(bufsize < 0)
return -1;
/* FIXME: dts */
x4->out_pic.pts = pic_out.i_pts;
switch(pic_out.i_type){
case X264_TYPE_IDR:
case X264_TYPE_I:
x4->out_pic.pict_type = FF_I_TYPE;
break;
case X264_TYPE_P:
x4->out_pic.pict_type = FF_P_TYPE;
break;
case X264_TYPE_B:
case X264_TYPE_BREF:
x4->out_pic.pict_type = FF_B_TYPE;
break;
}
x4->out_pic.key_frame = pic_out.i_type == X264_TYPE_IDR;
x4->out_pic.quality = (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA;
return bufsize;
}
and when I observe the frame encoder function, I don't understand a very
delicate step. The x264 function x264_encoder_encode save the encoded frame
at the address &pic_out, but the function Encoder_frame() don't save these
reference in any variables and I cannot understand why the encoded frame
will not be miss. Where I can find the binary array that include the encoded
frame? I need to understand what buffer contain the encoded frame.
Thank in advance.
Best Regards
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user