Hi to all
anyone experienced and error encodinc with latest version of
libavcodec? The code that works perfectly with
version 57.24.102 doesn't work with latest one. The error is "Invalid
argument": Here is the code:
AVCodec *pcodec_xd;
AVCodecContext *pCodecCtx_xd;
AVFrame *pFrame_xd;
AVFormatContext* _avFormatContext_xd;
AVDictionary *av_option=NULL;
AVPacket thpkt;
int smerr=0, gotp;
AnsiString str1,stre;
AVRational vform;
unsigned long drt= 120000000;
int xd_pkt_mxf_pts=0;
char str_err[256];
pcodec_xd = avcodec_find_encoder(AV_CODEC_ID_DNXHD);
if (!pcodec_xd) { stre.printf("Unable to find codec MPEG2"); smerr =
-4; goto stp_b2mx;}
pCodecCtx_xd = avcodec_alloc_context3(pcodec_xd);
if (pCodecCtx_xd==NULL) { stre.printf("Unable to alloc codec
context");smerr = -5; goto stp_b2mx;}
pFrame_xd = av_frame_alloc();
if (pFrame_xd==NULL) { stre.printf("Unable to alloc frame");smerr =
-6; goto stp_b2mx;}
if(av_image_alloc(pFrame_xd->data,
pFrame_xd->linesize,1920,1080,AV_PIX_FMT_YUV422P,16)<0)
{ stre.printf("Unable to alloc image");goto stp_b2mx;}
pFrame_xd->interlaced_frame = 1; pFrame_xd->top_field_first = 1;
pFrame_xd->qscale_type = 1;
pCodecCtx_xd->flags = CODEC_FLAG_INTERLACED_DCT;
pCodecCtx_xd->gop_size=1; pCodecCtx_xd->max_b_frames=0;
pCodecCtx_xd->height =1080;
vform.num=1;vform.den=1;
pCodecCtx_xd->sample_aspect_ratio = vform;
pCodecCtx_xd->rc_max_rate=pCodecCtx_xd->rc_min_rate=pCodecCtx_xd->bit_rate=drt;
pCodecCtx_xd->time_base.num= 1;
pCodecCtx_xd->time_base.den== 25;
pCodecCtx_xd->pix_fmt=AV_PIX_FMT_YUV422P; ///< planar YUV 4:2:2,
16bpp, (1 Cr & Cb sample per 2x1 Y samples)
pCodecCtx_xd->thread_count=4;
pCodecCtx_xd->width=1920;
pCodecCtx_xd->framerate.num = 25;
pCodecCtx_xd->framerate.den = 1;
smerr =
av_opt_set(pCodecCtx_xd->priv_data,"profile","dnxhd",AV_OPT_SEARCH_CHILDREN);
if(smerr<0)
{ if(av_strerror(smerr,str_err,256)==0){ stre.printf("Error (%s)
setting option",str_err); }
else { stre.printf("Error (%d) returned from
av_opt_set",smerr); }
goto stp_b2mx;
}
if (!avcodec_is_open(pCodecCtx_xd))
{
smerr = avcodec_open2(pCodecCtx_xd, pcodec_xd,&av_option);
if ( smerr < 0)
{
if(av_strerror(smerr,str_err,256)==0){ stre.printf("Error opening
codec : %s",str_err); }
else { stre.printf("Error (%d) opening codec",smerr); }
goto stp_b2mx;
}
}
av_init_packet(&thpkt);
smerr = avcodec_send_frame(pCodecCtx_xd, pFrame_xd);
if(smerr<0)
{
if(av_strerror(smerr,str_err,256)==0){ stre.printf("Error returned
from avcodec_send_frame (%s)",str_err); }
else { stre.printf("Error (%d) returned from
avcodec_send_frame",smerr); }
goto stp_b2mx;
}
smerr = avcodec_receive_packet(pCodecCtx_xd, &thpkt);
if(smerr<0)
{
if(av_strerror(smerr,str_err,256)==0){ stre.printf("Error returned
from avcodec_receive_packet (%s)",str_err); }
else { stre.printf("Error (%d) returned from
avcodec_receive_packet",smerr); }
goto stp_b2mx;
}
All works fine till sending packet. At thispoint the error returned is
invalid data. Same code works with previous versions.
Any suggestions ?
regards
Francesco
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user