This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/AM5728: GStreamer JPEG encoder quality

Part Number: AM5728

Tool/software: Linux

Hello,

I used the pipeline to capture a picture:

gst-launch-1.0 -e v4l2src device=/dev/video2 num-buffers=1 io-mode=4 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! vpe ! ducatijpegenc bitrate=10000 intra-interval=1 ! filesink location=./testjpegenc.jpeg

and the testjpegenc.jpeg was only 18.1Kb.

and I set the bitrate of the plugin ducatijpegenc 100000.And the picture was still 18.1Kb.

So what should I do to improve the quality of the picture.

  • Hello,
    In this case each image is independent so it does not care about the VBR or CBR.
    Encoder encodes based on the qp and video content.
    You could change the qp value but you should do this in the code.
    Yo could find it under /tisdk/build/arago-tmp-external-linaro-toolchain/work/am57xx_evm-linux-gnueabi/gstreamer1.0-plugins-ducati/git-r2.24/git/src folder, gstducatijpegenc.c file.
    You could check the ducatijpegenc user guide for more information regarding qp values etc.

    BR
    Margarita
  • Hello,
    Because I didn't have this file:/tisdk/build/arago-tmp-external-linaro-toolchain/work/am57xx_evm-linux-gnueabi/gstreamer1.0-plugins-ducati/git-r2.24/git/src folder, gstducatijpegenc.c file.
    So I follow the website:processors.wiki.ti.com/.../Processor_SDK_Building_The_SDK
    and this website :e2e.ti.com/.../646368

    I run
    $ sudo apt-get install git build-essential python diffstat texinfo gawk chrpath dos2unix wget unzip socat doxygen libc6:i386 libncurses5:i386 libstdc++6:i386 libz1:i386
    $ sudo dpkg-reconfigure dash
    Select "No" when prompted.

    $ wget releases.linaro.org/.../gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz
    $ tar -Jxvf gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf.tar.xz -C $HOME

    $ git clone git://arago-project.org/git/projects/oe-layersetup.git tisdk
    $ cd tisdk
    $ ./oe-layertool-setup.sh -f configs/processor-sdk/processor-sdk-04.01.00.06-config.txt
    $ cd build
    $ . conf/setenv
    $ export PATH=$HOME/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin:$PATH
    but after this command:$ MACHINE=am57xx-evm bitbake gstreamer

    It occured a problem:
    WARNING: linux-libc-headers-4.9-r0.arago2 do_fetch: Failed to fetch URL git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git;protocol=git;branch=ti-lsk-linux-4.9.y, attempting MIRRORS if available
    ERROR: linux-libc-headers-4.9-r0.arago2 do_fetch: Fetcher failure: Fetch command export DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-NCG95p4PW2"; export SSH_AUTH_SOCK="/run/user/1000/keyring-1VNM6J/ssh"; export PATH="/home/hsg/tisdk/sources/oe-core/scripts:/home/hsg/tisdk/build/arago-tmp-external-linaro-toolchain/sysroots/x86_64-linux/usr/bin/arm-linux-gnueabi:/home/hsg/tisdk/build/arago-tmp-external-linaro-toolchain/sysroots/am57xx-evm/usr/bin/crossscripts:/home/hsg/tisdk/build/arago-tmp-external-linaro-toolchain/sysroots/x86_64-linux/usr/sbin:/home/hsg/tisdk/build/arago-tmp-external-linaro-toolchain/sysroots/x86_64-linux/usr/bin:/home/hsg/tisdk/build/arago-tmp-external-linaro-toolchain/sysroots/x86_64-linux/sbin:/home/hsg/tisdk/build/arago-tmp-external-linaro-toolchain/sysroots/x86_64-linux/bin:/home/hsg/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin:/home/hsg/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin:/home/hsg/tisdk/sources/meta-browser/scripts:/home/hsg/tisdk/sources/oe-core/scripts:/home/hsg/tisdk/sources/bitbake/bin:/home/hsg/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin:/home/hsg/tisdk/sources/meta-browser/scripts:/home/hsg/tisdk/sources/oe-core/scripts:/home/hsg/tisdk/sources/bitbake/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/hsg/ti-processor-sdk-linux-am57xx-evm-04.01.00.06/linux-devkit/sysroots/x86_64-arago-linux/usr/bin"; export HOME="/home/hsg"; LANG=C git -c core.fsyncobjectfiles=0 clone --bare --mirror git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git /home/hsg/tisdk/downloads/git2/git.ti.com.ti-linux-kernel.ti-linux-kernel.git --progress failed with exit code 128, output:
    Cloning into bare repository '/home/hsg/tisdk/downloads/git2/git.ti.com.ti-linux-kernel.ti-linux-kernel.git'...
    remote: Counting objects: 7766338, done.
    remote: Compressing objects: 100% (1091874/1091874), done.
    fatal: The remote end hung up unexpectedly.41 MiB | 15.00 KiB/s
    fatal: early EOF
    fatal: index-pack failed

    ERROR: linux-libc-headers-4.9-r0.arago2 do_fetch: Fetcher failure for URL: 'git://git.ti.com/ti-linux-kernel/ti-linux-kernel.git;protocol=git;branch=ti-lsk-linux-4.9.y'. Unable to fetch URL from any source.
    ERROR: linux-libc-headers-4.9-r0.arago2 do_fetch: Function failed: base_do_fetch
    ERROR: Logfile of failure stored in: /home/hsg/tisdk/build/arago-tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/linux-libc-headers/4.9-r0.arago2/temp/log.do_fetch.18052
    ERROR: Task (/home/hsg/tisdk/sources/meta-arago/meta-arago-distro/recipes-kernel/linux-libc-headers/linux-libc-headers_4.9.bb:do_fetch) failed with exit code '1'

    So have u met this problem?Could help me?

    Best regards!
    Hsg
  • Hello,

    Please check this thread:
    e2e.ti.com/.../2424286

    BR
    Margarita
  • Hello,
    I want to ask u how big the file which I download?
    And is that true if I run this command:MACHINE=am57xx-evm bitbake gstreamer
    I want to change the qp value and rebuild the sdk.
    And is there any convient way to change the qp value.
    Why did not u left a connector to change the qp value?
  • Hello,

    You could execute this command:
    MACHINE=am57xx-evm bitbake gstreamer1.0-plugins-ducati
    This is only for gst ducati plugin.
    You could recompile the plugin with this MACHINE=am57xx-evm bitbake gstreamer1.0-plugins-ducati --force -c compile
    if you make some modifications in this.
    The new ducati gst lib could be find under :
    tisdk/build/arago-tmp-external-linaro-toolchain/work/am57xx_evm-linux-gnueabi/gstreamer1.0-plugins-ducati/git-r2.24/git/src/.libs
    You must copy this on your sd card under /usr/lib/gstreamer-1.0 folder.

    Hope this helps.

    BR
    Margarita
  • Hello,

    I recompile the plugin with this MACHINE=am57xx-evm bitbake gstreamer1.0-plugins-ducati --force -c compile.
    And I did not find any .libs under tisdk/build/arago-tmp-external-linaro-toolchain/work/am57xx_evm-linux-gnueabi/gstreamer1.0-plugins-ducati/git-r2.24/git/src

    Do you mean that I should put the lib*.lo to sd card?

  • Hello,

    hsg said:
    Do you mean that I should put the lib*.lo to sd card?

    No, no you need the .so file.

    Please press <ctrl>+<h> and you will see .libs folder.

    In this folder you could find libgstducati.so file.

    BR
    Margarita

  • Hello,
    I changed the dynParams->qualityFactor from 50 to 100.
    However, the encode pic was still 18.9K.
    My test pipeline was: gst-launch-1.0 -e v4l2src device=/dev/video2 num-buffers=1 io-mode=4 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! videoconvert ! ducatijpegenc bitrate=10000 ! filesink location=./testjpegenc.jpeg
    So which settings should I change to improve the quality of the encode file?
    Is that the qpmaxi ,qpmini or qpi?
    And could u give me the ducatijpegenc user guide?
    Best regards!
    hsg.
  • Hello,

    Please check here:
    git.ti.com/.../docs

    Right click on the user guide and save it.
    Please check qp values.

    BR
    Margarita
  • Hello,
    There is no qp in the gstducatijpegenc.c file:

    #ifdef HAVE_CONFIG_H
    #include "config.h"
    #endif

    #include "gstducati.h"
    #include "gstducatijpegenc.h"

    #include <string.h>

    #include <math.h>

    #define GST_CAT_DEFAULT gst_ducati_debug

    enum
    {
    LAST_SIGNAL
    };

    static gboolean gst_ducati_jpegenc_allocate_params (GstDucatiVidEnc *
    self, gint params_sz, gint dynparams_sz, gint status_sz, gint inargs_sz,
    gint outargs_sz);
    static gboolean gst_ducati_jpegenc_configure (GstDucatiVidEnc * self);


    static GstStaticPadTemplate gst_ducati_jpegenc_sink_template =
    GST_STATIC_PAD_TEMPLATE ("sink",
    GST_PAD_SINK,
    GST_PAD_ALWAYS,
    GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("NV12"))
    );

    static GstStaticPadTemplate gst_ducati_jpegenc_src_template =
    GST_STATIC_PAD_TEMPLATE ("src",
    GST_PAD_SRC,
    GST_PAD_ALWAYS,
    GST_STATIC_CAPS ("image/jpeg, "
    "parsed = (boolean)true, "
    "width = (int)[ 32, 4096 ], "
    "height = (int)[ 32, 4096 ], "
    "framerate = (fraction)[ 0, max ];")
    );

    #define parent_class gst_ducati_jpegenc_parent_class
    G_DEFINE_TYPE (GstDucatiJPEGEnc, gst_ducati_jpegenc, GST_TYPE_DUCATIVIDENC);

    static void
    gst_ducati_jpegenc_class_init (GstDucatiJPEGEncClass * klass)
    {
    GstDucatiVidEncClass *videnc_class;
    GstElementClass *element_class = GST_ELEMENT_CLASS (klass);

    videnc_class = GST_DUCATIVIDENC_CLASS (klass);

    gst_element_class_add_pad_template (element_class,
    gst_static_pad_template_get (&gst_ducati_jpegenc_src_template));
    gst_element_class_add_pad_template (element_class,
    gst_static_pad_template_get (&gst_ducati_jpegenc_sink_template));

    gst_element_class_set_metadata (element_class, "JPEG Encoder",
    "Codec/Encoder/Video",
    "Encode raw video into JPEG stream",
    "ti <ti@ti.com>");

    GST_DUCATIVIDENC_CLASS (element_class)->codec_name = "ivahd_jpegvenc";

    videnc_class->allocate_params = gst_ducati_jpegenc_allocate_params;
    videnc_class->configure = gst_ducati_jpegenc_configure;
    }

    static void
    gst_ducati_jpegenc_init (GstDucatiJPEGEnc * self)
    {
    GST_DEBUG ("gst_ducati_jpegenc_init");
    }

    static gboolean
    gst_ducati_jpegenc_configure (GstDucatiVidEnc * videnc)
    {
    GstDucatiJPEGEnc *self = GST_DUCATIJPEGENC (videnc);
    IJPEGVENC_Params *params;
    IJPEGVENC_DynamicParams *dynParams;
    const GstVideoCodecState *state;
    GstCaps *caps;
    const char *s;
    gboolean ret = TRUE;

    if (!GST_DUCATIVIDENC_CLASS (parent_class)->configure (videnc))
    return FALSE;

    params = (IJPEGVENC_Params *) videnc->params;

    params->maxThumbnailHSizeApp0 = 4096;
    params->maxThumbnailHSizeApp1 = 4096;
    params->maxThumbnailVSizeApp0 = 4096;
    params->maxThumbnailVSizeApp1 = 4096;
    params->debugTraceLevel = 0;

    params->lastNFramesToLog = 0;
    params->Markerposition = 0;

    params->rateControlParams.VBRDuration = 8;
    params->rateControlParams.VBRsensitivity = 0;
    params->rateControlParams.vbvUseLevelThQ5 = 0;

    params->rateControlParams.rateControlParamsPreset = 1;
    params->rateControlParams.rcAlgo = 0;
    params->rateControlParams.qpMaxI = 24;51
    params->rateControlParams.qpMinI = 1;
    params->rateControlParams.qpI = -1;//-1
    params->rateControlParams.initialBufferLevel = 10000000;
    params->rateControlParams.HRDBufferSize = 10000000;
    params->rateControlParams.discardSavedBits = 0;

    videnc->params->rateControlPreset = 4;
    videnc->params->maxBitRate = 7500000;
    videnc->params->minBitRate = 4500000;

    dynParams = (IJPEGVENC_DynamicParams *) videnc->dynParams;

    dynParams->restartInterval = 0;
    dynParams->qualityFactor = 50;//50
    dynParams->quantTable = NULL;

    dynParams->enablePrivacyMasking = 0;

    state = videnc->input_state;
    caps = gst_caps_new_simple ("image/jpeg",
    "parsed", G_TYPE_BOOLEAN, TRUE,
    "width", G_TYPE_INT, videnc->rect.w,
    "height", G_TYPE_INT, videnc->rect.h,
    "framerate", GST_TYPE_FRACTION, GST_VIDEO_INFO_FPS_N (&state->info), GST_VIDEO_INFO_FPS_D (&state->info),
    NULL);
    ret = gst_pad_set_caps (GST_VIDEO_ENCODER_SRC_PAD (self), caps);

    return ret;
    }

    static gboolean
    gst_ducati_jpegenc_allocate_params (GstDucatiVidEnc *
    videnc, gint params_sz, gint dynparams_sz, gint status_sz, gint inargs_sz,
    gint outargs_sz)
    {
    return GST_DUCATIVIDENC_CLASS (parent_class)->allocate_params (videnc,
    sizeof (IVIDENC2_Params), sizeof (IVIDENC2_DynamicParams),
    sizeof (IVIDENC2_Status), sizeof (IVIDENC2_InArgs),
    sizeof (IVIDENC2_OutArgs));
    }
  • Hello,

    hsg said:
    params->rateControlParams.qpMaxI = 24;51
    params->rateControlParams.qpMinI = 1;
    params->rateControlParams.qpI = -1;//-1

    But you link it.

    Please also check chapter 11 of the guide:

    "qpI – This parameter gives the initial QP for rate control module to start with. Range is -1 to 51
    When qpI is set to -1, codec internally decides which QP to start with; Otherwise user given
    QP is used. If qpI = 51, then highest compression can be seen i.e. low bitrate.
    qpMaxI – Maximum QP value. Care should be taken to set this vaue > 24 when qpI = -1 as codec
    chosen initial QP when qpI = -1 is 24. Range 0 to 51.
    qpMinI – Minimum QP value. This value should be less than qpI and qpMaxI. Range 0 to 51."

    I would recommend you  go through the guide very careful.

    BR
    Margarita

    BR
    Margarita

  • Hello,
    I have read the guide very carefully.
    And I tried the qpi=1,qpMaxi=1,qpmin=1 and qpi=51,qpMaxi=51,qpmin=1.
    However,the encode picture was still around 18K.
    So could u tried on your side?
    Or Is there any other combinations?
    Thanks!
    hsg
  • Hello,

    You could try this demo videnc2test and changed the params in it to archive the compression that you want also.

    BR
    Margarita
  • Hello,

    Where is the demo?

    hsg.

  • Hello,

    The binary of this demo is  under /usr/bin.
    You could build it by using this command:
    MACHINE=am57xx-evm bitbake omapdrmtest

    BR
    Margarita

  • Hello,

    I run this command:
    ./videnc2test 1920 1088 300 in.yuv out.h264 15 128 h264 baseline 10 OMAPDRM
    ../git/videnc2test.c:911: init_h264_dyn_params error: Codec_control returned err=-1, extendedError=00000001
    ../git/videnc2test.c:1060: encoder_init error: H264 encoder static parameter error

    could u tell me the where is the .c file.
    This demo didn't help me to improve the encode quality.
    Could u tried on your side?
    And could u tell me the reason why it din't help after I change the qpi,qpmaxi and qpmini?

    Best regards!
    hsg.
  • Hello,

    But your command is wrong.

    You must run this one for example:

    videnc2test 1280 720 1000 jpeg.nv12 out.mjpeg 30 10000 jpeg null 0 OMAPDRM

    where:

    1280 720 is resolution;

    1000 is frame to write;

    jpeg.nv12 out.mjpeg input output file;

    30 fps;

    10000 bitrate;

    jpeg is the codec;

    null 0 OMAPDRM  is  baseline/high level buffertype.

    The source code could be found here:

    /tisdk/build/arago-tmp-external-linaro-toolchain/work/armv7ahf-neon-linux-gnueabi/omapdrmtest/1.0.0-r22/git

    videnc2test.c

    You could try to increase the qualityFactor.

    hsg said:
    Could u tried on your side?

    Yes, meanwhile you could try to adjust the params also.

    BR

    Margarita

  • Hello,
    I have already tried to increase the qualityFactor.
    It did not help anymore!! Could u tried on your side and tell me a reliable way to solve the problem?
    Have you tried the solution before you tell me??
  • Hello,

    I will try and let you know the results on my side when I am done.

    BR
    Margarita
  • Hello,

    I tried on my side here is the results:

    1. Videnc2test:
    videnc2test 1280 720 1000 jpeg.nv12 out.mjpeg 30 10000 jpeg null 0 OMAPDRM
    videnc2test 1280 720 1000 jpeg.nv12 out1.mjpeg 30 1000 jpeg null 0 OMAPDRM

    -rw-r--r--    1 root     root      41751179 Dec 23 13:47 out.mjpeg
    -rw-r--r--    1 root     root      15819768 Dec 23 13:48 out1.mjpeg


    In this case please comment this line:
     // params->rateControlPreset = 4;

    and rebuild the demo.

    2 Gstreamer:

    gst-launch-1.0 -e  videotestsrc num-buffers=1000 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! vpe ! ducatijpegenc bitrate=10000 ! filesink location=testjpegenc.jpeg


    gst-launch-1.0 -e  videotestsrc num-buffers=1000 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! vpe ! ducatijpegenc bitrate=1000 ! filesink location=testjpegenc1.jpeg

    -rw-r--r--    1 root     root      41751179 Dec 23 13:48 testjpegenc.jpeg
    -rw-r--r--    1 root     root      15819768 Dec 23 13:48 testjpegenc1.jpeg


    In this case please comment:
      //videnc->params->rateControlPreset = 4;

    and change this:

    {
      return GST_DUCATIVIDENC_CLASS (parent_class)->allocate_params (videnc,
        // sizeof (IVIDENC2_Params), sizeof (IVIDENC2_DynamicParams),
          sizeof (IJPEGVENC_Params), sizeof (IVIDENC2_DynamicParams),
          sizeof (IVIDENC2_Status), sizeof (IVIDENC2_InArgs),
          sizeof (IVIDENC2_OutArgs));
    }
    Rebuild the ducati lib.

    Hope this helps.

    Please if this answer your question click on "This resolved my issue" button so the thread could be close.
    If you have new questions/issues you could open new topics.


    BR
    Margarita

  • Hello,

    Sorry I forgot to point you the files that you must change.

    Case 1 : videnc2test.c
    Case 2 : gstducatijpegenc.c

    BR
    Margarita

  • Hello,
    Could u tell me how to rebuild the Videnc2test demo.
    I run only this:MACHINE=am57xx-evm bitbake gstreamer1.0-plugins-ducati --force -c compile
    After that I used the same pipeline,the encode file was still around 20k even if I changed the bitrate.

    Best regards!
    hsg
  • Hello,

    hsg said:
    Could u tell me how to rebuild the Videnc2test demo.

    The same way as you rebuilt it previous time when you changed the qp values.

     MACHINE=am57xx-evm bitbake omapdrmtest --force -c compile

    hsg said:
    After that I used the same pipeline,the encode file was still around 20k even if I changed the bitrate.

    Try when the num-buffers=1000 for example and make sure that the changes are applied. 

    BR
    Margarita

  • Hello,

    I followed your instructions but the encode picture was still around 20KB

    Did u succeed on your side in this way?

    I mean that you can improve the quality of the picture in this way.

    Best regards!

    hsg

  • Hello,

    This is the result on my side:

    "1. Videnc2test:

    videnc2test 1280 720 1000 jpeg.nv12 out.mjpeg 30 10000 jpeg null 0 OMAPDRM

    videnc2test 1280 720 1000 jpeg.nv12 out1.mjpeg 30 1000 jpeg null 0 OMAPDRM

    -rw-r--r--    1 root     root      41751179 Dec 23 13:47 out.mjpeg

    -rw-r--r--    1 root     root      15819768 Dec 23 13:48 out1.mjpeg

    In this case please comment this line:

    // params->rateControlPreset = 4;

    and rebuild the demo.

    2 Gstreamer:

    gst-launch-1.0 -e  videotestsrc num-buffers=1000 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! vpe ! ducatijpegenc bitrate=10000 ! filesink location=testjpegenc.jpeg

    gst-launch-1.0 -e  videotestsrc num-buffers=1000 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! vpe ! ducatijpegenc bitrate=1000 ! filesink location=testjpegenc1.jpeg

    -rw-r--r--    1 root     root      41751179 Dec 23 13:48 testjpegenc.jpeg

    -rw-r--r--    1 root     root      15819768 Dec 23 13:48 testjpegenc1.jpeg

    In this case please comment:

     //videnc->params->rateControlPreset = 4;

    and change this:

    {

     return GST_DUCATIVIDENC_CLASS (parent_class)->allocate_params (videnc,

       // sizeof (IVIDENC2_Params), sizeof (IVIDENC2_DynamicParams),

         sizeof (IJPEGVENC_Params), sizeof (IVIDENC2_DynamicParams),

         sizeof (IVIDENC2_Status), sizeof (IVIDENC2_InArgs),

         sizeof (IVIDENC2_OutArgs));

    }

    Rebuild the ducati lib. "

    Please try the same pipelines on your side and let me know do you observe the same. If not, probably you have not apply the changes or cp the new lib or else.

    If you are executing Videnc2test make sure that you execute the rebuilt demo not the default one.

    As you could see the results of Videnc2test demo and gstreamer are the same. 
    First file is in case when bitrate is 10 000. Second one the bitrate is 1000.

    BR
    Margarita

  • Hello,

    You used the pipeline:

    gst-launch-1.0 -e  videotestsrc num-buffers=1000 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! vpe ! ducatijpegenc bitrate=10000 ! filesink location=testjpegenc.jpeg

    gst-launch-1.0 -e  videotestsrc num-buffers=1000 ! 'video/x-raw,format=(string)YUY2,width=1280,height=720,framerate=(fraction)30/1' ! vpe ! ducatijpegenc bitrate=1000 ! filesink location=testjpegenc1.jpeg

    -rw-r--r--    1 root     root      41751179 Dec 23 13:48 testjpegenc.jpeg

    -rw-r--r--    1 root     root      15819768 Dec 23 13:48 testjpegenc1.jpeg

    However, I want to capture one frame.You captured 1000 buffers ,and its output was around 41MB.

    So one frame was aroud 40kB. Its quality of the picture could not meet the needs.

    Do u understand me?

     

  • Hello,

    Please check the mjpeg user guide chapter Rate Control:
    11.5 Limitations
    "Since rate control operates only at frame level, 1-2 seconds delay may be expected
    to reach target bitrate compared to other codecs (H.264)."

    For one frame try to change qp values.

    BR
    Margarita