On 25.01.2018 09:25, Tobias Rapp wrote:
Hi,

trying to do the equivalent of FFmpeg command-line output option "-q:v 3" on library level I came up with the following code (error checking stripped off):

     AVCodecContext *enc_ctx = NULL;
     const AVCodec *codec = avcodec_find_encoder_by_name("mjpeg");
     int ret;

     enc_ctx = avcodec_alloc_context3(codec);
     enc_ctx->flags |= AV_CODEC_FLAG_QSCALE;
     enc_ctx->global_quality = FF_QP2LAMBDA * 3.0;
     ret = avcodec_open2(enc_ctx, enc_ctx->codec, NULL);

Unfortunately it doesn't seem to have any effect on the output image size. Is there something obvious that I'm missing?


Answering myself: Apparently setting the encoder option is not sufficient for mjpeg. The encoding quality has to be set for each frame that is passed to the encoder.

Example:

    frame->quality = enc_ctx->global_quality;
    frame->pict_type = AV_PICTURE_TYPE_NONE;
    ret = avcodec_send_frame(enc_ctx, frame);
    if (ret < 0) {
        // ...
    }

Looks weird but seems to work.

Regards,
Tobias

_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to