It seems that you fail to initialize some AVCodecContext member correctly!

Some tips:

//you should set 250*1000 if you want the bitrate is 250Kbps,
// but you can ignore this setting, because you use rate-control method:CRF
a_pStream->codec->bit_rate = 250;

you should set the following as well:

a_pStream->codec->width = your_width;
a_pStream->codec->height = your_height;
a_pStream->codec->codec_type = CODEC_TYPE_VIDEO;
a_pStream->codec->codec_id = CODEC_ID_H264;


On Fri, Mar 19, 2010 at 10:35 PM,  <[email protected]> wrote:
> I am trying to use libavcodec along with libx264 to encode H.264 video in an
> flv container.  Even though the equivalent works with ffmpeg from the
> command line (ffmpeg -i infile.flv -vcodec libx264 -vpre lossless_ultrafast
> -crf 22 -threads  0 outfile.flv), and even though the avcodec_find and
> avcodec_find_by_name calls both pass, the avcodec_open call fails for codec
> id CODEC_ID_H264.  Any ideas?  Any tips on trouble shooting?
>
> Thanks,
> Bob
>
> <<
>   AVCodec* l_pCodec;
>   AVCodecContext* l_pCodecCtx;
>
>   l_pCodecCtx = a_pStream->codec;
>
>   a_pStream->codec->bit_rate = 250;
>   switch (a_pStream->codec->codec_id)
>   {
>   case CODEC_ID_H264:
>       LOG4CXX_DEBUG(logger, l_strFunction << "Initializing libx264
> encoder");
>       //From libx264-lossless_ultrafast.ffpreset
>       //coder=0
>       a_pStream->codec->coder_type = FF_CODER_TYPE_VLC;
>       //flags=+loop
>       a_pStream->codec->flags |= CODEC_FLAG_LOOP_FILTER;
>       //cmp=+chroma
>       a_pStream->codec->me_cmp |= FF_CMP_CHROMA;
>       //partitions=-parti8x8-parti4x4-partp8x8-partp4x4-partb8x8
>       a_pStream->codec->partitions &=
> ~(X264_PART_I8X8|X264_PART_I4X4|X264_PART_P8X8|X264_PART_P4X4|X264_PART_B
> 8X8);
>       //me_method=dia
>       a_pStream->codec->me_method = ME_EPZS;
>       //subq=0
>       a_pStream->codec->me_subpel_quality = 0;
>       //me_range=16
>       a_pStream->codec->me_range = 16;
>       //g=250
>       a_pStream->codec->gop_size = 250;
>       //keyint_min=25
>       a_pStream->codec->keyint_min = 25;
>       //sc_threshold=40
>       a_pStream->codec->scenechange_threshold = 40;
>       //i_qfactor=0.71
>       a_pStream->codec->i_quant_factor = 0.71;
>       //b_strategy=1
>       a_pStream->codec->b_frame_strategy = 1;
>       //qcomp=0.6
>       a_pStream->codec->qcompress = 0.6;
>       //qmin=10
>       a_pStream->codec->qmin = 10;
>       //qmax=51
>       a_pStream->codec->qmax = 51;
>       //qdiff=4
>       a_pStream->codec->max_qdiff = 4;
>       //directpred=1
>       a_pStream->codec->directpred = 1;
>       //flags2=+fastpskip+mbtree
>       a_pStream->codec->flags2 |=
> (CODEC_FLAG2_FASTPSKIP|CODEC_FLAG2_MBTREE);
>       //cqp=0
>       a_pStream->codec->cqp = 0;
>       //////////////////////////////////////
>       a_pStream->codec->crf = 22;
>       a_pStream->codec->thread_count = 0;
>       break;
>   default:
>       break;
>   }
>
>   // find the video encoder  ********* (Both of these pass) *********
> //  l_pCodec = avcodec_find_encoder(l_pCodecCtx->codec_id);
>   l_pCodec = avcodec_find_encoder_by_name("libx264");
>   if (!l_pCodec)
>   {
>       LOG4CXX_DEBUG(logger, l_strFunction << "encoder not found " <<
> l_pCodecCtx->codec_id);
>       exit(1);
>   }
>
>   // open the codec  ********* (This Fails) *********
>   if (avcodec_open(l_pCodecCtx, l_pCodec) < 0)
>   {
>       LOG4CXX_DEBUG(logger, l_strFunction << "could not open codec " <<
> l_pCodecCtx->codec_id);
>       exit(1);
>   }
>>>
> _______________________________________________
> libav-user mailing list
> [email protected]
> https://lists.mplayerhq.hu/mailman/listinfo/libav-user
>



-- 
-----------------------------------------------------------------------------------------
My key fingerprint: d1:03:f5:32:26:ff:d7:3c:e4:42:e3:51:ec:92:78:b2
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to