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.

TDA4VM: How does the Gstreamer interface set the full I-frame encoding?

Part Number: TDA4VM


Dear exprets,

The SDK I use is 8.05. In this version, the encoding and decoding demo calls the Gstreamer interface. When setting the encoding parameters, there is no configuration related to I frame and P frame, only the frame rate and bit rate are set. So I want to make sure that using Gstreamer interface is full I-frame encoding? Or something else. Can full I-frame encoding be done using Gstreamer?

Regards,

Xin

  • Hi Xin,

    After checking, there is not a working GStreamer control for setting only I-frames. However, this can be done in GStreamer, and we are currently working on adding that control. For now, you can set the I-frame period by going into drivers/media/platform/img/vxe-vxd/encoder/vxe_enc.c and change ctx->vparams.intra_cnt to any value.
    You will have to rebuild the kernel and modules and update your board with this patch. I will update this thread when the patch becomes available. 

    Thank You,
    Sarabesh S

  • Keep in mind, this patch was added against our latest commit. Since you are on SDK 8.05 release, you would need to back port the patch and rebuild everything. It is a small patch that is only a two line addition.

    Thanks,
    Sarabesh S

  • Hello Xin, 

    Here is the patch:

     https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/tiL6.1_2D00_media_2D00_img_2D00_vxe_2D00_vxd_2D00_encoder_2D00_Expose_2D00_I_2D00_Frame_2D00_Period_2D00_Control.patch

    Regards,
    Sarabesh S

  • Hi Sarabesh S,

    Coding I - only need only in drivers/media/platform/img/vxe VXD/encoder/vxe_enc c Settings ctx->vparams.intra_cnt= 1? , At the same time,Shouldn't the value ctx->vparams.idr_period be set to 1?

    And what does the patch you added below do? I didn't find a similar function in the corresponding file.

    Regards,

    Xin

  • Hi Xin, 

    And what does the patch you added below do? I didn't find a similar function in the corresponding file.

    The patch adds the gstreamer control to enable the I-frame period. Since the patch was added against the latest SDK, you will need to back-port the patch to have I-frame period as a gstreamer control. 

    Coding I - only need only in drivers/media/platform/img/vxe VXD/encoder/vxe_enc c Settings ctx->vparams.intra_cnt= 1? , At the same time,Shouldn't the value ctx->vparams.idr_period be set to 1?

    You can hard code idr_period as well but IDR frames are not the exact same as a sole I-frame. IDR frames also contain header information that other frames may use as reference. If you want to have additional header information (i.e. sps, vps, pps) in each I-frame then you can set this control as well.

    Thanks,
    Sarabesh S.

  • Hi Sarabesh S,

    Thanks for your reply,I will try it.

    Regards,

    Xin

  • Hi Xin,

    Sounds good. Let me know your results.

    Regards,
    Sarabesh S.

  • Hi Sarabesh S,

    I compared the size of the h264 file generated before and after the change and found no change. The default setting before modification is ctx->vparams.intra_cnt = 30;  After the change ctx->vparams.intra_cnt = 1; Normally, the h264 file would be larger, wouldn't it? Is there any software or way to see if the generated H264 file is all I-frame?

    Regards,

    Xin

  • Hi Xin, 

    Can you send me the output stream? I can analyze the frame types with one of our tools. 

    Thanks,
    Sarabesh S.

  • Hi Sarabesh S,

    This is the encoded h264 file, please help to analyze it.

    output_video_0.zip

    Regards,

    Xin

  • Hi Xin, 

    Yes, after taking a look, this does not have the I-frame period for every frame. I am in the process of doing some testing on this to confirm this on my environment. I will let you know when I have more updates.

    Thanks,
    Sarabesh S.

  • Hi Xin, 

    I made the changes for setting ctx->vparams.intra_cnt= 1 and ran this pipeline on the 9.0 SDK release: 

    gst-launch-1.0 filesrc location=/test_streams/bbb_gstdec264_1920x1080_short.yuv ! rawvideoparse width=1920 height=1080 format=nv12 framerate=30/1 colorimetry=bt601 ! v4l2h264enc extra-controls="enc,i_frame_period=1" ! filesink location=/test_streams/bbb_1080p_gstenc_short.264

    After analyzing the output stream, I can confirm that all I-frames were set. Let me know your results.

    Best,
    Sarabesh S.

  • Hi Sarabesh S,

    I previously just modified this parameter, recompiled the linux sdk, and then ran gstreamer coding programs on the linux side. Are you saying that I modify this parameter, add your previous patch, and then add the I-frame control element in the gstreamer pipeline, so I can do all three steps to encode full I-frames?

    Regards,

    Xin

  • Hi Xin, 

    Sorry, I meant after applying the patch on the 9.0 SDK I ran this GStreamer pipeline: 

    gst-launch-1.0 filesrc location=/test_streams/bbb_gstdec264_1920x1080.yuv ! rawvideoparse width=1920 height=1080 format=nv12 framerate=30/1 colorimetry=bt601 ! v4l2h264enc extra-controls="enc,h264_i_frame_period=1" ! filesink location=/test_streams/bbb_1080p_gstenc.264

    The output file had all frames set as I-frames. You do not need to hard code the I-frame period with  ctx->vparams.intra_cnt= 1 if you apply the v4l2-control patch and use the GStreamer plugin v4l2h264enc extra-controls="enc,h264_i_frame_period=1" in your pipeline . Let me know your results when you run this pipeline.

    Regards,
    Sarabesh S.

  • Hi Sarabesh S,

    I made the following changes and then recompiled the sdk to run the code, resulting in h264 of the same size as before. It seems that the change did not take effect.

    diff --git a/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c b/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c
    index 0c338bd..bb81525 100644
    --- a/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c
    +++ b/drivers/media/platform/vxe-vxd/encoder/vxe_enc.c
    @@ -365,7 +365,7 @@ void vxe_fill_default_params(struct vxe_enc_ctx *ctx)
            ctx->vparams.fine_y_search_size = 2;
            ctx->vparams.no_offscreen_mv = FALSE;
            ctx->vparams.idr_period = 1800; /* 60 * 30fps */
    -       ctx->vparams.intra_cnt = 30;
    +       ctx->vparams.intra_cnt = 1;//30;
            ctx->vparams.vop_time_resolution = 15;
            ctx->vparams.enc_features.disable_bpic_ref1 = FALSE;
            ctx->vparams.enc_features.disable_bpic_ref0 = FALSE;
    diff --git a/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c b/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c
    index 07fbde8..d25466a 100644
    --- a/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c
    +++ b/drivers/media/platform/vxe-vxd/encoder/vxe_v4l2.c
    @@ -151,7 +151,7 @@ static struct vxe_ctrl controls[] = {
                    .minimum = 1,
                    .maximum = 600,
                    .step = 1,
    -               .default_value = 30,
    +               .default_value = 1,//30,
                    .compound = FALSE,
            },
     };

    Also, the pipeline you're running below encodes only one yuv image, and can't be looped or run continuously. How can you check that the encoded stream is all I frames?

    gst-launch-1.0 filesrc location=/test_streams/bbb_gstdec264_1920x1080.yuv ! rawvideoparse width=1920 height=1080 format=nv12 framerate=30/1 colorimetry=bt601 ! v4l2h264enc extra-controls="enc,h264_i_frame_period=1" ! filesink location=/test_streams/bbb_1080p_gstenc.264

    Regards,

    Xin

  • Hi Sarabesh S,

    How do you set the path marked in the following figure to load multiple YUV images?

    Regards,

    Xin

  • Hi Sarabesh S,

    I found a tool to analyze the h264 code stream and found that the encoded video I frame interval was 30, and the modification did not take effect. I compiled the program in the rtos sdk and then ran it on the linux side. Are the arguments needed to run gstreamer pipline taken from the linux side? Or is it already determined when the rtos SDK is compiled? So it won't work on the linux side?

    Regards,

    Xin

  • Hi Xin,

    Also, the pipeline you're running below encodes only one yuv image, and can't be looped or run continuously. How can you check that the encoded stream is all I frames?

    We use a tool (Streameye) that analyzes different parameters of encoded streams including per frame frame-type. 

    Are the arguments needed to run gstreamer pipline taken from the linux side? Or is it already determined when the rtos SDK is compiled? So it won't work on the linux side?

    Yes, the arguments to run GStreamer are taken from the Linux driver. The V4L2/GStreamer Linux driver should work the same way on PDK and the Linux SDK due to this. And you can run these same pipelines on the Linux SDK alone.

    I am not sure what all is involved to backport this functionality into SDK 8.05 release if hard-coding the functionality doesn't seem to have an effect. Are you able to move to 9.0 SDK?

  • Hi Sarabesh S,

    Thanks for your reply,The codec demo I wrote before is based on the codec demo on the rtos sdk side. Is there a demo for linux sdk? I only saw some script commands to run tests for v4l2 and gstreamer in the documentation, no demo of the implementation. Can you give me some advice? About the coding demo running on the Linux side. Looking forward to your reply.

    Regards,

    Xin

  • Hi Xin, 

    If you installed PDK with the Linux images, then the base O.S. is Linux based in the RTOS SDK. Since the VPU is not an RTOS component and is a H.L.O.S component, you should be able to run the encoder on the RTOS+Linux SDK. If you are not running the RTOS+Linux (Vision Apps setup) SDK then, you will need to follow these steps for installation (HERE). 

    Otherwise, you can look at downloading just the Linux processor SDK (HERE). 

    After looking at the 8.05 Linux SDK documentation, I see that GStreamer Encoder support is not enabled. This means for encoding, you need to use TI's V4L2-test app (HERE).

    Thank You,
    Sarabesh S.

  • Hi Sarabesh S,

    Use the following command line to decode:

    tidec_decode -b -i <input_file> -o <output_file>

    The program does not terminate automatically, and the decoded image is stored in a single .raw file, not multiple .yuv files.Is this normal?

    Regards,

    Xin

  • Hi Xin,

    Since you are not specifying multiple output files in the tidec_decode v4l2 test-app it does not seem like it is supposed to output mulitiple yuv files. You may have to run multiple instances of this or run a gstreamer decode pipeline with multiple outputs like below:

    gst-launch-1.0 filesrc location=bbb_1080p30_30s.h264 ! h264parse ! tee name=t \
    t. ! queue ! v4l2h264dec ! video/x-raw,format='(string)'NV12 ! fakevideosink \
    t. ! queue ! v4l2h264dec ! video/x-raw,format='(string)'NV12 ! fakesink \
    t. ! queue ! v4l2h264dec ! video/x-raw,format='(string)'NV12 ! fakesink \
    t. ! queue ! v4l2h264dec ! video/x-raw,format='(string)'NV12 ! fakesink 

    You can replace the fakesink with filesink to write to a file.

    Thank You,
    Sarabesh S.

  • Hi Sarabesh S,

    I want to save each frame decoded from a h264 stream as a .yuv file.How do I set a command to do this?

    For the same video, about 95 frames, it took me three minutes to decode using the gstreamer command line and tens of minutes using tidec_decode. Why did it take so long? The following command is used:

    gst-launch-1.0 filesrc location=/opt/vision_apps/output_video_0.264 ! h264parse ! v4l2h264dec ! video/x-raw,format=NV12 ! filesink location=/opt/vision_apps/output.yuv

    tidec_decode -b -i output_video_0.264 -o output

    Here are some log messages for decoding using the tidec_decode command line:

    root@Linux:/opt/vision_apps# ./tidec_decode
    TI DEC V4L2 Codec decoding example application
    Copyright (c) 2018 Texas Instruments, Inc.
    No device specified, using /dev/video0
    *** Calling open_device for device 0
    [fd4] Info (/dev/video0): driver"vxd-dec" bus_info="platform:vxd-dec" card="vxd-dec" fd=0x4
    [fd4] Info (/dev/video0): capabilities"0x84204000" device_caps="0x4204000"
    [fd4] Calling V4L2 IOCTL VIDIOC_ENUM_FMT on CAPTURE
    [fd4] argp.index = 0, {pixelformat = NV12}, description = 'Y/CbCr 4:2:0'
    [fd4] argp.index = 1, {pixelformat = NV16}, description = 'Y/CbCr 4:2:2'
    [fd4] argp.index = 2, {pixelformat = TI12}, description = '10-bit YUV 4:2:0 (NV12)'
    [fd4] argp.index = 3, {pixelformat = TI16}, description = '10-bit YUV 4:2:2 (NV16)'
    [fd4] argp.index = 4, {pixelformat = YM12}, description = 'Planar YUV 4:2:0 (N-C)'
    [fd4] argp.index = 5, {pixelformat = YM16}, description = 'Planar YUV 4:2:2 (N-C)'
    [fd4] Calling V4L2 IOCTL VIDIOC_ENUM_FMT on OUTPUT
    [fd4] argp.index = 0, {pixelformat = H264}, description = 'H.264'
    [fd4] argp.index = 1, {pixelformat = HEVC}, description = 'HEVC'
    [fd4] argp.index = 2, {pixelformat = MJPG}, description = 'Motion-JPEG'
    [fd4] Calling V4L2 IOCTL VIDIOC_SUBSCRIBE_EVENT
    *** device 0 is fd 4
    Using v4l2 for capture buffers
    Input #0, h264, from '/opt/vision_apps/output_video_0.264':
      Duration: N/A, bitrate: N/A
        Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x960, 30 fps, 30 tbr, 1200k tbn, 60 tbc
    
    stream_framelevel_parsing: bitdepth: 8
    stream_framelevel_parsing: pix_fmt: 0
    stream_framelevel_parsing: pix_fmt_string: yuv420p
    
    stream_framelevel_parsing: codec: 27
    
    stream_framelevel_parsing: codec: H264stream_framelevel_parsing: demuxer is initialized, width=1280, height=960
    frame 0 frame size in demux 43677
    frame 1 frame size in demux 9410
    frame 2 frame size in demux 14946
    frame 3 frame size in demux 32879
    frame 4 frame size in demux 39092
    frame 5 frame size in demux 37879
    frame 6 frame size in demux 37082
    frame 7 frame size in demux 37120
    frame 8 frame size in demux 37599
    frame 9 frame size in demux 37604
    frame 10 frame size in demux 38204
    frame 11 frame size in demux 37922
    frame 12 frame size in demux 53923
    frame 13 frame size in demux 38133
    frame 14 frame size in demux 54542
    frame 15 frame size in demux 38858
    frame 16 frame size in demux 54734
    frame 17 frame size in demux 39100
    frame 18 frame size in demux 55169
    frame 19 frame size in demux 39022
    frame 20 frame size in demux 55134
    frame 21 frame size in demux 39122
    frame 22 frame size in demux 55085
    frame 23 frame size in demux 39028
    frame 24 frame size in demux 54996
    frame 25 frame size in demux 38850
    frame 26 frame size in demux 55018
    frame 27 frame size in demux 39396
    frame 28 frame size in demux 54994
    frame 29 frame size in demux 39239
    frame 30 frame size in demux 130842
    frame 31 frame size in demux 40149
    frame 32 frame size in demux 38574
    frame 33 frame size in demux 38189
    frame 34 frame size in demux 38001
    frame 35 frame size in demux 38405
    frame 36 frame size in demux 38148
    frame 37 frame size in demux 38303
    frame 38 frame size in demux 38221
    frame 39 frame size in demux 37740
    frame 40 frame size in demux 37795
    frame 41 frame size in demux 37699
    frame 42 frame size in demux 37912
    frame 43 frame size in demux 37978
    frame 44 frame size in demux 38062
    frame 45 frame size in demux 38298
    frame 46 frame size in demux 38382
    frame 47 frame size in demux 38495
    frame 48 frame size in demux 38256
    frame 49 frame size in demux 38351
    frame 50 frame size in demux 38418
    frame 51 frame size in demux 38054
    frame 52 frame size in demux 38500
    frame 53 frame size in demux 38658
    frame 54 frame size in demux 38369
    frame 55 frame size in demux 38348
    frame 56 frame size in demux 38229
    frame 57 frame size in demux 38103
    frame 58 frame size in demux 38277
    frame 59 frame size in demux 54767
    frame 60 frame size in demux 129745
    frame 61 frame size in demux 40308
    frame 62 frame size in demux 38333
    frame 63 frame size in demux 38001
    frame 64 frame size in demux 38096
    frame 65 frame size in demux 38130
    frame 66 frame size in demux 38625
    frame 67 frame size in demux 38511
    frame 68 frame size in demux 38427
    frame 69 frame size in demux 38543
    frame 70 frame size in demux 38275
    frame 71 frame size in demux 38331
    frame 72 frame size in demux 38241
    frame 73 frame size in demux 38226
    frame 74 frame size in demux 38345
    frame 75 frame size in demux 38317
    frame 76 frame size in demux 38377
    frame 77 frame size in demux 38473
    frame 78 frame size in demux 38581
    frame 79 frame size in demux 38309
    frame 80 frame size in demux 38589
    frame 81 frame size in demux 38457
    frame 82 frame size in demux 38717
    frame 83 frame size in demux 38108
    frame 84 frame size in demux 38216
    frame 85 frame size in demux 38382
    frame 86 frame size in demux 38284
    frame 87 frame size in demux 38278
    frame 88 frame size in demux 38463
    frame 89 frame size in demux 38683
    frame 90 frame size in demux 129830
    frame 91 frame size in demux 39812
    frame 92 frame size in demux 38659
    frame 93 frame size in demux 37969
    frame 94 frame size in demux 37824
    frame 95 frame size in demux 38054
    H264 frame sizes update is done
    Opening input file
    Opened output file /data/output_00.raw
    [fd4] init_device
    [fd4] After S_FMT on OUTPUT
    [fd4] After S_FMT on CAPTURE
    [fd4] After G_FMT on OUTPUT
    [fd4] After G_FMT fmt.fmt.pix_mp.pixelformat = H264 numplanes 1
    [fd4] fmt.fmt.pix_mp.width 1280 fmt.fmt.pix_mp.height 960 sizeimage 1843200 bytesperline 0
    [fd4] After G_FMT on CAPTURE
    [fd4] After G_FMT fmt.fmt.pix_mp.pixelformat = NV12 numplanes 1
    [fd4] fmt.fmt.pix_mp.width 1280 fmt.fmt.pix_mp.height 960 sizeimage 0 bytesperline 0
    [fd4] Setup decoding OUTPUT with VIDIOC_REQBUFS buffer size 1843200
    [fd4] After VIDIOC_REQBUFS getting buf_cnt 2
    [fd4] query buf, buffer 0xffffe2245508 plane 0 = 1843200 buffer.length 1 buffer.data_offset 0 buffer.mem_offset 0
    [fd4] After mmap -> outbufs[0].mapped = 0x0xffffbbe39000
    [fd4] query buf, buffer 0xffffe2245508 plane 0 = 1843200 buffer.length 1 buffer.data_offset 0 buffer.mem_offset 1843200
    [fd4] After mmap -> outbufs[1].mapped = 0x0xffffbbc77000
    [fd4] Setup decoding CAPTURE with VIDIOC_REQBUFS
    [fd4] buffer(y) size 1843200 buffer(uv) size 0
    [fd4] After VIDIOC_REQBUFS getting buf_cnt 19
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1073741824
    [fd4] After mmap -> capbufs[0].mapped = 0x0xffffbbab5000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1075585024
    [fd4] After mmap -> capbufs[1].mapped = 0x0xffffbb8f3000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1077428224
    [fd4] After mmap -> capbufs[2].mapped = 0x0xffffbb731000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1079271424
    [fd4] After mmap -> capbufs[3].mapped = 0x0xffffbb56f000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1081114624
    [fd4] After mmap -> capbufs[4].mapped = 0x0xffffbb3ad000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1082957824
    [fd4] After mmap -> capbufs[5].mapped = 0x0xffffbb1eb000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1084801024
    [fd4] After mmap -> capbufs[6].mapped = 0x0xffffbb029000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1086644224
    [fd4] After mmap -> capbufs[7].mapped = 0x0xffffbae67000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1088487424
    [fd4] After mmap -> capbufs[8].mapped = 0x0xffffbaca5000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1090330624
    [fd4] After mmap -> capbufs[9].mapped = 0x0xffffbaae3000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1092173824
    [fd4] After mmap -> capbufs[10].mapped = 0x0xffffba921000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1094017024
    [fd4] After mmap -> capbufs[11].mapped = 0x0xffffba75f000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1095860224
    [fd4] After mmap -> capbufs[12].mapped = 0x0xffffba59d000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1097703424
    [fd4] After mmap -> capbufs[13].mapped = 0x0xffffba3db000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1099546624
    [fd4] After mmap -> capbufs[14].mapped = 0x0xffffba219000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1101389824
    [fd4] After mmap -> capbufs[15].mapped = 0x0xffffba057000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1103233024
    [fd4] After mmap -> capbufs[16].mapped = 0x0xffffb9e95000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1105076224
    [fd4] After mmap -> capbufs[17].mapped = 0x0xffffb9cd3000
    [fd4] query buf, buffer 0xffffe2245560 plane 0 = 1843200 buffer_cap.length 1 buffer_cap.data_offset 0 buffer_cap.mem_offset 1106919424
    [fd4] After mmap -> capbufs[18].mapped = 0x0xffffb9b11000
    [fd4] MAINLOOP
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_capbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 1706758213739471 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 0 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8638477 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 1 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 10164910 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 2 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8952536 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 3 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7969685 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 4 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7968974 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 5 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 9477563 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 6 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7900300 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 7 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7989806 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 8 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9373750 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 9 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8342401 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 10 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8844075 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 11 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8084434 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 12 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9717313 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 13 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8057304 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 14 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7982285 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 15 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8249552 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 16 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9631833 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 17 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7851517 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 18 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8036574 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 0 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8221173 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 1 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 10469574 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 2 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8115011 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 3 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8025088 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 4 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 9712454 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 5 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7874391 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 6 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7998418 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 7 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7905435 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 8 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 10027594 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 9 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8168296 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 10 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7885180 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 11 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7955908 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 12 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 9920096 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 13 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8001668 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 14 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7994984 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 15 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8135551 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 16 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 9802904 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 17 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8821000 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 18 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8021310 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 0 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9544070 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 1 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8223864 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 2 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7890197 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 3 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8074595 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 4 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9768007 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 5 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8016635 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 6 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8314842 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 7 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8391161 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 8 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9694631 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 9 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8047763 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 10 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7904723 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 11 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7917464 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 12 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8127474 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 13 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7937179 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 14 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9514269 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 15 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7959332 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 16 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8864064 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 17 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8220519 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 18 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9617210 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 0 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7936702 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 1 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7980285 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 2 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8434268 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 3 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9022718 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 4 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8165477 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 5 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8015217 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 6 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 9835353 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 7 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7904605 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 8 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7912828 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 9 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8138287 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 10 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 9238593 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 11 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8165692 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 12 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7810262 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 13 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8557257 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 14 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8916575 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 15 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7789984 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 16 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7991397 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 17 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9659784 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 18 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7956008 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 0 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7727774 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 1 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7709708 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 2 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9505514 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 3 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8113094 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 4 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8732603 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 5 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8656920 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 6 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 8220322 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 7 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8024772 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 8 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7741352 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 9 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 9596982 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 10 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7793943 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 11 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8111882 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 12 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7731204 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 13 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 9549083 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 14 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 7844391 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 15 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf QBUF success
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 7996265 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 16 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 9541736 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 17 flags=00004001 FLAG_LAST=00100000
    [fd4] CAPTURE EAGAIN
    [fd4] handle_outbuf sending DEC_CMD_STOP
    [fd4] handle_outbuf QBUF success
    [fd4] handle_outbuf sending DEC_CMD_STOP after 0 ms delay
    [fd4] OUTPUT EAGAIN
    Picture buffer dequeue time is 8185969 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=1843200
    [fd4] handle_capbuf QBUF success
    [fd4] CAPTURE VIDIOC_DQBUF buffer 18 flags=00004001 FLAG_LAST=00100000
    Picture buffer dequeue time is 6879017 us
    [fd4] CAPTURE VIDIOC_DQBUF bytesused=0
    [fd4] CAPTURE VIDIOC_DQBUF buffer 1 flags=00104001 FLAG_LAST=00100000
    Stream ended, calling STREAMOFF
    [fd4] uninit_device
    [fd4] munmap outbuf 0 mapped=0x0xffffbbe39000 length=1843200
    [fd4] munmap outbuf 1 mapped=0x0xffffbbc77000 length=1843200
    [fd4] munmap capbuf 0 mapped=0x0xffffbbab5000 length=1843200
    [fd4] munmap capbuf 1 mapped=0x0xffffbb8f3000 length=1843200
    [fd4] munmap capbuf 2 mapped=0x0xffffbb731000 length=1843200
    [fd4] munmap capbuf 3 mapped=0x0xffffbb56f000 length=1843200
    [fd4] munmap capbuf 4 mapped=0x0xffffbb3ad000 length=1843200
    [fd4] munmap capbuf 5 mapped=0x0xffffbb1eb000 length=1843200
    [fd4] munmap capbuf 6 mapped=0x0xffffbb029000 length=1843200
    [fd4] munmap capbuf 7 mapped=0x0xffffbae67000 length=1843200
    [fd4] munmap capbuf 8 mapped=0x0xffffbaca5000 length=1843200
    [fd4] munmap capbuf 9 mapped=0x0xffffbaae3000 length=1843200
    [fd4] munmap capbuf 10 mapped=0x0xffffba921000 length=1843200
    [fd4] munmap capbuf 11 mapped=0x0xffffba75f000 length=1843200
    [fd4] munmap capbuf 12 mapped=0x0xffffba59d000 length=1843200
    [fd4] munmap capbuf 13 mapped=0x0xffffba3db000 length=1843200
    [fd4] munmap capbuf 14 mapped=0x0xffffba219000 length=1843200
    [fd4] munmap capbuf 15 mapped=0x0xffffba057000 length=1843200
    [fd4] munmap capbuf 16 mapped=0x0xffffb9e95000 length=1843200
    [fd4] munmap capbuf 17 mapped=0x0xffffb9cd3000 length=1843200
    [fd4] munmap capbuf 18 mapped=0x0xffffb9b11000 length=1843200
    [fd4] Calling V4L2 IOCTL VIDIOC_SUBSCRIBE_EVENT
    *** Calling close_device for device 0 [fd4]
    [fd4] close_device
    test app completed successfully

    Regards,

    Xin

  • Hi Xin,

    I want to save each frame decoded from a h264 stream as a .yuv file.How do I set a command to do this?

    I was able to grab the first frame with this command: 

    gst-launch-1.0 filesrc location=/bbb_1080p30_30s.264 max-buffers=1 ! h264parse ! videoconvert ! video/x-raw,format=NV12 ! filesink location=/bbb_1080p30_1frame.yuv

    I am still looking at how to do this with selecting any particular frame in a stream. 

    For the same video, about 95 frames, it took me three minutes to decode using the gstreamer command line and tens of minutes using tidec_decode. Why did it take so long? The following command is used:

    I believe the reason for this is that using GStreamer to make the V4L2 IOCTL calls is a lot better at buffer management and passing frames to the M2M scheduler to be processed by the CODEC than the ti-decode-test-app making those IOCTL calls. It is recommended to use GStreamer. 

    Thank You,
    Sarabesh S.

  • Hi Xin, 

    After looking into how to grab a particular frame from a stream to write its own .yuv file, I don't know if this is possible from the command line. I'm sure there is a way to do this in Python or C++ by running a GStreamer pipeline there. Additionally you would need to make sure that the frame you are decoding is an I-frame so that it is self-contained and does not need any references.

    Best Regards,
    Sarabesh S.

  • Hi Sarabesh S,

    I made an SD card using the official image and ran Gstreamer command line on the official board. Decoded 95 frames of video in three seconds, as fast as encoding. It took over 3 minutes to run with our custom board and image. What do you think caused this? Does it have anything to do with memory? What configuration do I need to adjust?

    Regards,

    Xin

  • Hi Xin, 

    I'm not sure what is different in your custom board and image. However, it does seem like it could be how your memory is allocated in the overlay files. You can compare the official default memory layout to your own to determine what is different and causing the delay in the decode process. 

    Thank You,
    Sarabesh S.

  • Hi Sarabesh S,

    As for the memory allocation part, our custom image has been modified. I need to consult with relevant team members.


    Another question is, which file does the encoding parameter set by gstreamer on the rtos side affect the v4l2 related encoding parameter set on the Linux side?The previous changes to the linux sdk for full i-frame encoding have not taken effect, and the encoded h264 file is still the default parameter. I need to find out where Gstreamer sets the v4l2 parameter. Can you help me?

    Regards,

    Xin

  • Hello Xin, 

    After doing some more testing, I have confirmed that in SDK 8.6 our GStreamer to V4L2 controls were not enabled and only were enabled in 9.0. However, I was able to hard-code the I-frame period with the following modifications in vxe_v4l2.c:

     In the vxe_s_ext_ctrls function under the V4L2_CID_MPEG_VIDEO_H264_I_PERIOD case, modify the ctx->rc.intra_freq = 5 and ctx->vparams.intra_cnt = 5 to make every 5 frames an I-frame.

    Let me know if this works for you.

    which file does the encoding parameter set by gstreamer on the rtos side affect the v4l2 related encoding parameter set on the Linux side?

    Since the VPU driver is a part of the Linux SDK, the files I mentioned above are found in the Linux installation path. I believe once you modify and rebuild Linux, you can use those new Linux images to recompile RTOS+Linux (AKA Vision-Apps) with the new VPU driver changes.  You can look at steps for building and installing RTOS+Linux HERE (Step 2a).

    Thank You,
    Sarabesh S.

  • Hello Xin, 

    Since the API is not implemented correctly to be controlled by GStreamer in the 5.10 (8.6 SDK) kernel. I will attach the patch that was made in the 6.1 (9.0 SDK) kernel which added this implementation to set V4L2 controls from GStreamer below:

    https://e2e.ti.com/cfs-file/__key/communityserver-discussions-components-files/791/0268.tiL6.1_2D00_1_2D00_2_2D00_media_2D00_img_2D00_vxe_2D00_vxd_2D00_enable_2D00_GStreamer_2D00_1.20.5.patch

    With this patch you should be able to avoid hard-coding and the values in the driver and just use the GStreamer pipeline's plugins. Keep in mind since this patch was implemented on a newer kernel I am not sure about what (if any) back-porting efforts are involved.

    Thank You,
    Sarabesh S.

  • Hi Sarabesh S.

    Thanks for your patient help, I got the full I-frame encoded video by modifying here.

    Regards,

    Xin

  • Hi Xin, 

    Glad to hear and no problem. 

    Regards,
    Sarabesh S.