[Libav-user] Problem with codec->encode2

Pierre Delmas pierre.delmas at centrale-marseille.fr
Sat Apr 15 19:00:01 EEST 2017


Hello,

For a project I need to be able to read, and write a video using libav.

So I looked for examples on Internet to do that and I found one about
writing video and I trying to implement it into my own code (available
at the end of mail) but now I have a problem.

When I arrive at /AVPacket *pkt; /the system says "dimensions not set" I
can't find why. So is there a better solution to write than the one I
tried ? If yes do you have some examples ?

void Video::write(string nameVideo)
{
  AVOutputFormat *oformat = av_guess_format(NULL, nameVideo.c_str(), NULL);
    if (oformat == NULL)
    {
        oformat = av_guess_format("mp4", NULL, NULL);
    }

    AVCodecContext *m_codecContext;
    AVFormatContext *m_formatCtx;

    m_codecContext = avcodec_alloc_context3(codec);
    m_codecContext->codec_id = oformat->video_codec;
    m_codecContext->codec_type = AVMEDIA_TYPE_VIDEO;
    m_codecContext->gop_size = 30;
    m_codecContext->bit_rate = width * height * 4;
    m_codecContext->width = width;
    m_codecContext->height = height;
    m_codecContext->time_base = (AVRational)frameRate;
    m_codecContext->max_b_frames = max_b_frames;
    m_codecContext->pix_fmt = AV_PIX_FMT_YUV420P;

    m_formatCtx = avformat_alloc_context();
    m_formatCtx->oformat = oformat;
    m_formatCtx->video_codec_id = oformat->video_codec;

    snprintf(m_formatCtx->filename, sizeof(m_formatCtx->filename), "%s",
nameVideo.c_str());

    AVStream *videoStream2 = avformat_new_stream(m_formatCtx, codec);

    avcodec_open2(m_codecContext, m_codecContext->codec,NULL);
    avio_open(&m_formatCtx->pb, nameVideo.c_str(), AVIO_FLAG_WRITE);
    avformat_write_header(m_formatCtx,NULL);

    int ret=0;

    AVPacket *pkt;
    int got_packet = 0;

    ret = avcodec_send_frame(codecCtx, frames->at(1));
    if (ret < 0)
    {
        throw "Couldn't send frame. Problem";
    }

    ret = avcodec_receive_packet(codecCtx, pkt);
    if (!ret)
    {
        got_packet = 1;
    }

    if (ret == AVERROR(EAGAIN))
    {
        return 0;
    }

    return ret;
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20170415/75f795ca/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20170415/75f795ca/attachment.sig>


More information about the Libav-user mailing list