[Libav-user] Problem with codec->encode2

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
Report Content as Inappropriate

[Libav-user] Problem with codec->encode2

Pierre Delmas

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);

    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;

Libav-user mailing list
[hidden email]

signature.asc (484 bytes) Download Attachment