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.

RTOS/TDA2EXEVM: TDA2EXEVM

Part Number: TDA2EXEVM

Tool/software: TI-RTOS

Hi there,

i want to record six .mp4 files at the same time, instead of copying the same date on the shared memory, i want to duplicate the data from the single camera , encode it record files from individual memories.  

I am using vision sdk version 2.12.  And below is my usecase, 

Capture -> Dup -> Merge -> Encode ->  IPCIn(A15) -> customised_link(A15).

After successful  compilation i am getting the encoded data for only  one channel. even i edited the filename_priv.c file to dup and merge it to encoding.

------------------------------------------------------------------------------------------------------------------------------------------------------------------

[HOST] [IPU2 ] 12.479899 s: ENCODE: Creating CH0 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
[HOST] [IPU2 ] 12.512932 s: ENCODE: CH0: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01

[HOST] [IPU2 ] 12.513206 s: ENCODE: All CH Create ... DONE !!!

[HOST] [IPU2 ] 12.514426 s: ENCODE: Create ... DONE !!!

------------------------------------------------------------------------------------------------------------------------------------------------------------------

please refer to the below code and suggest me in the way that i need six encoded data from the same camera.

=================================================================================

Void chains_singlechannel_dvr_ConnectLinks(chains_singlechannel_dvrObj *pObj){

//Capture -> Dup
pObj->CapturePrm.outQueParams.nextLink = pObj->DupLinkID;
pObj->DupPrm.inQueParams.prevLinkId = pObj->CaptureLinkID;
pObj->DupPrm.inQueParams.prevLinkQueId = 0;

//Dup0 -> Merge0
pObj->DupPrm.outQueParams[0].nextLink = pObj->MergeLinkID;
pObj->MergePrm.inQueParams[0].prevLinkId = pObj->DupLinkID;
pObj->MergePrm.inQueParams[0].prevLinkQueId = 0;

//Dup1 -> Merge1
pObj->DupPrm.outQueParams[1].nextLink = pObj->MergeLinkID;
pObj->MergePrm.inQueParams[1].prevLinkId = pObj->DupLinkID;
pObj->MergePrm.inQueParams[1].prevLinkQueId = 1;

//Dup2 -> Merge2
pObj->DupPrm.outQueParams[2].nextLink = pObj->MergeLinkID;
pObj->MergePrm.inQueParams[2].prevLinkId = pObj->DupLinkID;
pObj->MergePrm.inQueParams[2].prevLinkQueId = 2;

//Dup3 -> Merge3
pObj->DupPrm.outQueParams[3].nextLink = pObj->MergeLinkID;
pObj->MergePrm.inQueParams[3].prevLinkId = pObj->DupLinkID;
pObj->MergePrm.inQueParams[3].prevLinkQueId = 3;

//Dup4 -> Merge4
pObj->DupPrm.outQueParams[4].nextLink = pObj->MergeLinkID;
pObj->MergePrm.inQueParams[4].prevLinkId = pObj->DupLinkID;
pObj->MergePrm.inQueParams[4].prevLinkQueId = 4;

//Dup5 -> Merge5
pObj->DupPrm.outQueParams[5].nextLink = pObj->MergeLinkID;
pObj->MergePrm.inQueParams[5].prevLinkId = pObj->DupLinkID;
pObj->MergePrm.inQueParams[5].prevLinkQueId = 5;

//Merge -> Encode
pObj->MergePrm.outQueParams.nextLink = pObj->EncodeLinkID;
pObj->EncodePrm.inQueParams.prevLinkId = pObj->MergeLinkID;
pObj->EncodePrm.inQueParams.prevLinkQueId = 0;

//Encode -> IPCOut_IPU1_0_A15_0_0
pObj->EncodePrm.outQueParams.nextLink = pObj->IPCOut_IPU1_0_A15_0_0LinkID;
pObj->IPCOut_IPU1_0_A15_0_0Prm.inQueParams.prevLinkId = pObj->EncodeLinkID;
pObj->IPCOut_IPU1_0_A15_0_0Prm.inQueParams.prevLinkQueId = 0;

//IPCOut_IPU1_0_A15_0_0 -> IPCIn_A15_0_IPU1_0_0
pObj->IPCOut_IPU1_0_A15_0_0Prm.outQueParams.nextLink = pObj->IPCIn_A15_0_IPU1_0_0LinkID;
pObj->IPCIn_A15_0_IPU1_0_0Prm.inQueParams.prevLinkId = pObj->IPCOut_IPU1_0_A15_0_0LinkID;
pObj->IPCIn_A15_0_IPU1_0_0Prm.inQueParams.prevLinkQueId = 0;

//IPCIn_A15_0_IPU1_0_0 -> DefLink_vsdkbuf
pObj->IPCIn_A15_0_IPU1_0_0Prm.outQueParams.nextLink = pObj->DefLink_vsdkbufLinkID;
pObj->DefLink_vsdkbufPrm.inQueParams[0].prevLinkId = pObj->IPCIn_A15_0_IPU1_0_0LinkID;
pObj->DefLink_vsdkbufPrm.inQueParams[0].prevLinkQueId = 0;

}

regards 

balaji t

  • Hi,

    Please share the stats log (press p)after running your usecase for 1 min.
    Can you check inside inside create and process function of encoder link that how many channels has been created and in processing how many channels are getting data.

    Regards,
    Anuj
  • Hi Anuj,

    I am happy to see your reply,

    where can i check, that how many channels are created in encoding, please provide me the file/function name.

    And also tell me, to record 6 live videos the use-case which i am using is correct or not.

    Capture -> Dup -> Merge -> Encode -> IPCIn(A15) -> customised_link(A15).

    regards
    balaji t

  • Hi,

    Please add a log in below file
    vision_sdk\links_fw\src\rtos\links_ipu\iva\iva_enc\encLink_common.c
    in EncLink_codecCreate function after UTILS_assert(pObj->inQueInfo.numCh <= ENC_LINK_MAX_CH); line
    Vps_printf("No of channels for encoder %d\n",pObj->inQueInfo.numCh);

    Please make sure you are getting the belo logs for all channels
    ENCODE: Creating CH%d of %d x %d, "
    " pitch = (%d, %d) [%d] [%d], bitrate = %d Kbps ...

    Regards,
    Anuj
  • Hi Anuj,

    i am not getting 6 channels, for that print Vps_printf("No of channels for encoder %d\n",pObj->inQueInfo.numCh);. just got the below value.

    No of channels for encoder 1

    will you please help me to correct the use-case in such a way that i need 6 channels.

    regards
    balaji t
  • Hi,

    Can you share your Dup and Merge link params.

    Regards,
    Anuj
  • Hi Anuj,
    please find the dup and merge link parameters.
    I consider myself, that single capture, dup into 6 and merge it again, and then encode etc.,
    please correct me if i was wrong.
    ==================================================================
    chains_cabinchannel_dvr_ConnectLinks(chains_cabinchannel_dvrObj *pObj){

    //Capture -> Dup
    pObj->CapturePrm.outQueParams.nextLink = pObj->DupLinkID;
    pObj->DupPrm.inQueParams.prevLinkId = pObj->CaptureLinkID;
    pObj->DupPrm.inQueParams.prevLinkQueId = 0;

    pObj->DupPrm.notifyNextLink = TRUE;
    //Dup0 -> Merge0
    pObj->DupPrm.outQueParams[0].nextLink = pObj->MergeLinkID;
    pObj->MergePrm.inQueParams[0].prevLinkId = pObj->DupLinkID;
    pObj->MergePrm.inQueParams[0].prevLinkQueId = 0;
    pObj->DupPrm.notifyNextLink = TRUE;

    //Dup1 -> Merge1
    pObj->DupPrm.outQueParams[1].nextLink = pObj->MergeLinkID;
    pObj->MergePrm.inQueParams[1].prevLinkId = pObj->DupLinkID;
    pObj->MergePrm.inQueParams[1].prevLinkQueId = 1;
    pObj->DupPrm.notifyNextLink = TRUE;

    //Dup2 -> Merge2
    pObj->DupPrm.outQueParams[2].nextLink = pObj->MergeLinkID;
    pObj->MergePrm.inQueParams[2].prevLinkId = pObj->DupLinkID;
    pObj->MergePrm.inQueParams[2].prevLinkQueId = 2;
    pObj->DupPrm.notifyNextLink = TRUE;
    #if 1
    //Dup3 -> Merge3
    pObj->DupPrm.outQueParams[3].nextLink = pObj->MergeLinkID;
    pObj->MergePrm.inQueParams[3].prevLinkId = pObj->DupLinkID;
    pObj->MergePrm.inQueParams[3].prevLinkQueId = 3;

    //Dup4 -> Merge4
    pObj->DupPrm.outQueParams[4].nextLink = pObj->MergeLinkID;
    pObj->MergePrm.inQueParams[4].prevLinkId = pObj->DupLinkID;
    pObj->MergePrm.inQueParams[4].prevLinkQueId = 4;

    //Dup5 -> Merge5
    pObj->DupPrm.outQueParams[5].nextLink = pObj->MergeLinkID;
    pObj->MergePrm.inQueParams[5].prevLinkId = pObj->DupLinkID;
    pObj->MergePrm.inQueParams[5].prevLinkQueId = 5;
    #endif
    //Merge -> Encode
    pObj->MergePrm.outQueParams.nextLink = pObj->EncodeLinkID;
    pObj->EncodePrm.inQueParams.prevLinkId = pObj->MergeLinkID;
    pObj->EncodePrm.inQueParams.prevLinkQueId = 0;

    //Encode -> IPCOut_IPU1_0_A15_0_0
    pObj->EncodePrm.outQueParams.nextLink = pObj->IPCOut_IPU1_0_A15_0_0LinkID;
    pObj->IPCOut_IPU1_0_A15_0_0Prm.inQueParams.prevLinkId = pObj->EncodeLinkID;
    pObj->IPCOut_IPU1_0_A15_0_0Prm.inQueParams.prevLinkQueId = 0;

    //IPCOut_IPU1_0_A15_0_0 -> IPCIn_A15_0_IPU1_0_0
    pObj->IPCOut_IPU1_0_A15_0_0Prm.outQueParams.nextLink = pObj->IPCIn_A15_0_IPU1_0_0LinkID;
    pObj->IPCIn_A15_0_IPU1_0_0Prm.inQueParams.prevLinkId = pObj->IPCOut_IPU1_0_A15_0_0LinkID;
    pObj->IPCIn_A15_0_IPU1_0_0Prm.inQueParams.prevLinkQueId = 0;

    //IPCIn_A15_0_IPU1_0_0 -> DefLink_vsdkbuf
    pObj->IPCIn_A15_0_IPU1_0_0Prm.outQueParams.nextLink = pObj->DefLink_vsdkbufLinkID;
    pObj->DefLink_vsdkbufPrm.inQueParams[0].prevLinkId = pObj->IPCIn_A15_0_IPU1_0_0LinkID;
    pObj->DefLink_vsdkbufPrm.inQueParams[0].prevLinkQueId = 0;

    }
    =============================================================================================
    regards
    balaji t
  • Hi Anuj,
    could you please help me to get rid of this error in the last line. here you can see that no of channels created are 6 but there is no resolution prints.
    =====================================================
    12.393094 s: Bj No of channels for encoder 6
    rate 44100 sysclk 19200000 divs_rate 8000 divs_sysclk 19200000
    rate 44100 sysclk 19200000 divs_rate 44100 divs_sysclk 19200000
    rundemo.sh[91]: [HOST] [IPU2 ] 12.393216 s: ENCODE: DEBUG enclink_populate_outbuf_pool_size_info resClassChInfo.numActiveResClass = 1
    adc3101_hw_params
    rundemo.sh[91]: [HOST] [IPU2 ] 12.393918 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->numAllocPools = 1adc3101_ interface ctrl 12

    : [ HOST] [IPU2 ] 12.403769 s: ENCODE: DEBUG ncLink_codecCreateOutObj pOutObj->outBufs[0] = 94baf3f0
    : [HOST] [IPU2 ] 12.413652 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[1] = 94baf418
    : [HOST] [IPU2 ] 12.423534 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[2] = 94baf440
    : [HOST] [IPU2 ] 12.433386 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[3] = 94baf468
    [HOST] [IPU2 ] 12.443237 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[4] = 94baf490
    [HOST] [IPU2 ] 12.453120 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[5] = 94baf4b8
    [HOST] [IPU2 ] 12.462972 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[6] = 94baf4e0
    [HOST] [IPU2 ] 12.472854 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[7] = 94baf508
    [HOST] [IPU2 ] 12.482736 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[8] = 94baf530
    [HOST] [IPU2 ] 12.492618 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[9] = 94baf558
    [HOST] [IPU2 ] 12.502501 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[10] = 94baf580
    [HOST] [IPU2 ] 12.512352 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[11] = 94baf5a8
    [HOST] [IPU2 ] 12.522265 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[12] = 94baf5d0
    [HOST] [IPU2 ] 12.532117 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[13] = 94baf5f8
    [HOST] [IPU2 ] 12.541938 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[14] = 94baf62
    [HOST] [IPU2 ] 12.551820 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[15] = 94baf648
    [HOST] [IPU2 ] 12.561703 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[16] = 94baf670
    [HOST] [IPU2 ] 12.571615 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[17] = 94baf698
    [HOST] [IPU2 ] 12.581528 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[18] = 94baf6c0
    [HOST] [IPU2 ] 12.591441 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[19] = 94baf6e8
    [HOST] [IPU2 ] 12.601323 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[20] = 94baf710
    [HOST] [IPU2 ] 12.611206 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[21] = 94baf738
    [HOST] [IPU2 ] 12.621027 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[22] = 94baf760
    [HOST] [IPU2 ] 12.630909 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[23] = 94baf788
    [HOST] [IPU2 ] 12.631062 s: Assertion @ Line: 652 in links_ipu/iva/iva_enc/encLink_common.c: 0 : failed !!!

    regards
    balaji t
  • Hi Anuj,

    Is there any update..?

    regards
    balaji t
  • Hi,

    You have added some log in encLink_common.c so the line no is not matching.
    Are you gettting the below assert
    pBaseAddr = Utils_memAlloc(UTILS_HEAPID_DDR_CACHED_SR,
    pOutObj->buf_size[i],
    IVACODEC_VDMA_BUFFER_ALIGNMENT);
    UTILS_assert(pBaseAddr != NULL);
    Please confirm.
    If yes then please set numBufPerCh of the create args of encoder in usecase to 2.

    Regards,
    Anuj
  • Hi Anuj,

    Thank you for the reply, i resolved the encoder issue.
    BTW, As a beginner to vision-SDK links and chains, how one can understand the communication between two links.
    lets say an example, data communication between capture -> encode.?
    Any documents would be very useful.

    Thank you,

    regards
    balaji t

  • Hi,

    Please refer the docs in below folder
    vision_sdk\docs\Architecture

    Regards,
    Anuj
  • Hi Anuj,

    how can i conform that my use-case was success-full.
    According to the use-case mentioned below,
    Capture -> Dup(6) -> Merge(6) -> Encode -> IPCIn(A15) -> customised_link(A15).
    It created 6 channels. To be mentioned, we can the below log in the screen,
    -----------------------------------------------------------------------------------------------------------
    No of channels for encoder 6
    rundemo.sh[84]: [HOST] [IPU2 ] 12.378362 s: Bj ENCODE: Creating CH0 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.411395 s: ENCODE: CH0: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.411700 s: Bj ENCODE: Creating CH1 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.444946 s: ENCODE: CH1: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.445281 s: Bj ENCODE: Creating CH2 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.478527 s: ENCODE: CH2: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.478801 s: Bj ENCODE: Creating CH3 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.512017 s: ENCODE: CH3: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.512352 s: Bj ENCODE: Creating CH4 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.545446 s: ENCODE: CH4: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.545720 s: Bj ENCODE: Creating CH5 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.578936 s: ENCODE: CH5: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    But in Input and Output statistics, i am getting for only one channel.(model log shown below),

    rundemo.sh[84]: [HOST] [IPU2 ] 231.146312 s: CAPTURE: VIP1 Slice1 PortA FRAME MODE
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146434 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146495 s: [ CAPTURE ] Link Statistics,
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146556 s: ******************************
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146617 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146647 s: Elapsed time = 218396 msec
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146739 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146769 s: New data Recv = 16.48 fps
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146861 s: Get Full Buf Cb = 16.48 fps
    rundemo.sh[84]: [HOST] [IPU2 ] 231.146922 s: Put Empty Buf Cb = 98.90 fps
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147013 s: Driver/Notify Cb = 16.48 fps
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147074 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147135 s: Input Statistics,
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147196 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147257 s: CH | In Recv | In Drop | In User Drop | In Process
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147318 s: | FPS | FPS | FPS | FPS
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147410 s: --------------------------------------------------
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147501 s: 0 | 16.48 0. 0 0. 0 16.48
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147623 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147654 s: Output Statistics,
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147715 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147745 s: CH | Out | Out | Out Drop | Out User Drop
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147837 s: | ID | FPS | FPS | FPS
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147898 s: ---------------------------------------------
    rundemo.sh[84]: [HOST] [IPU2 ] 231.147989 s: 0 | 0 16.48 0. 0 0. 0
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148173 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148203 s: [VIP1 Slice1 PortA] Statistics
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148264 s: ==============================
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148325 s: Number of request queued : 3601
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148417 s: Number of request dequeued: 3601
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148478 s: Overflow Count : 0
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148539 s:
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148600 s: CH | Q DQ Total Top Bot Total Top Bot Min/Max Min/Max Dropped Repeat Fid c
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148722 s: (I/S/CH) | Count Count Fields Fields Fields FPS FPS FPS Width Height Frames Frames Repeatr
    rundemo.sh[84]: [HOST] [IPU2 ] 231.148844 s: ----------------------------------------------------------------------------------------------------------------------
    rundemo.sh[84]: [HOST] [IPU2 ] 231.149179 s: 02.0.00 | 3605 3601 3601 3601 0 16 16 0 720/720 480/480 0 0 00
    rundemo.sh[84]: [HOST] [IPU2 ] 231.149332 s:
    ==============================================================================================================
    we can see the all the input and output characteristics are there for only one channel. can we consider this as a normal case, or-else we need to get statistics for all the six duplicate channels?
    Anuj, please comment on the above.

    Thank you,

    reragds
    balaji.t
  • Hi,
    Please check the complete stats.
    You can find it for encoder link which will show stats for all 6 channels if its running successfully.
    Stats of capture link wont help.

    Regards,
    Anuj
  • Hi Anuj,
    with the help of the below log,can i conform that i am getting 6 encoded data from duped 6 channels.
    No of channels for encoder 6
    rundemo.sh[84]: [HOST] [IPU2 ] 12.378362 s: Bj ENCODE: Creating CH0 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.411395 s: ENCODE: CH0: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.411700 s: Bj ENCODE: Creating CH1 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.444946 s: ENCODE: CH1: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.445281 s: Bj ENCODE: Creating CH2 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.478527 s: ENCODE: CH2: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.478801 s: Bj ENCODE: Creating CH3 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.512017 s: ENCODE: CH3: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.512352 s: Bj ENCODE: Creating CH4 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.545446 s: ENCODE: CH4: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    rundemo.sh[84]: [HOST] [IPU2 ] 12.545720 s: Bj ENCODE: Creating CH5 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    rundemo.sh[84]: [HOST] [IPU2 ] 12.578936 s: ENCODE: CH5: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01

    thank you,

    regards
    balaji.t
  • Hi Anuj,

    Is there any reply?

    regards

    balaji.t

  • Hi,

    Please press p and then check the stats of encoder

    Regards,

    Anuj

  • Hi,

    Is there any update on this issue?

    Regards,
    Anuj
  • Hi Anuj
    Upon pressing 'p', i am getting "command not found"

    and further to that, i am facing another issue.

    [HOST] [IPU2 ] 789.314127 s: Assertion @ Line: 113 in links_common/merge/mergeLink_tsk.c: numOutCh < SYSTEM_MAX_CH_PER_OUT_QUE : failed !!!

    After this i am not getting any encoded output for channels.

    regards
    balaji t
  • Hi,

    Please share your complete log while usecase creation.
    This error comes when you have multiple in queue with multiple channels and if the total no of channels goes beyond 8.

    As per your usecase you should have 6 in queue with single channel but in some inqueue you will have multiple channel which you need to figure it out.
    Print the value of pInQueInfo->numCh in mergeLink_tsk.c file inside create function.

    Regards,
    Anuj
  • Hi Anuj,

    you can find the printed value pInQueInfo->numCh in the below log,

    [HOST] [IPU2 ] 26.265723 s: CAPTURE: Create in progress !!!
    [HOST] [IPU2 ] 26.266089 s: CAPTURE: VIP1 Slice1 PortA capture mode is [ 8-bit] !!!
    [HOST] [IPU2 ] 26.275025 s: CAPTURE: Frame 0: FVID2 CH 0: Link CH 0: 0x84203000, 0x84257600, 518400 B
    [HOST] [IPU2 ] 26.283261 s: CAPTURE: Frame 1: FVID2 CH 0: Link CH 0: 0x84283000, 0x842d7600, 518400 B
    [HOST] [IPU2 ] 26.291496 s: CAPTURE: Frame 2: FVID2 CH 0: Link CH 0: 0x84303000, 0x84357600, 518400 B
    [HOST] [IPU2 ] 26.299792 s: CAPTURE: Frame 3: FVID2 CH 0: Link CH 0: 0x84383000, 0x843d7600, 518400 B
    [HOST] [IPU2 ] 26.307997 s: CAPTURE: Frame 4: FVID2 CH 0: Link CH 0: 0x84403000, 0x84457600, 518400 B
    [HOST] [IPU2 ] 26.308393 s: CAPTURE: Create Done !!!
    [HOST] [IPU2 ] 26.308851 s: in DupLink_tskMain :
    [HOST] [IPU2 ] 26.308942 s: in DupLink_drvCreate :
    [HOST] [IPU2 ] 26.309003 s: System_linkGetInfo : linkId = 150995001 !!!
    [HOST] [IPU2 ] 26.309064 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 26.309156 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 26.310345 s: in MergeLink_drvCreate
    [HOST] [IPU2 ] 26.310772 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 26.310894 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 26.310955 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 26.311047 s: in DupLink_getLinkInfo :
    [HOST] [IPU2 ] 26.311138 s: in MergeLink_drvCreate: pInQueInfo->numCh 1
    [HOST] [IPU2 ] 26.311230 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 26.311321 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 26.311382 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 26.311443 s: in DupLink_getLinkInfo :
    [HOST] [IPU2 ] 26.311535 s: in MergeLink_drvCreate: pInQueInfo->numCh 1
    [HOST] [IPU2 ] 26.311657 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 26.311748 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 26.311809 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 26.311901 s: in DupLink_getLinkInfo :
    [HOST] [IPU2 ] 26.311992 s: in MergeLink_drvCreate: pInQueInfo->numCh 1
    [HOST] [IPU2 ] 26.312084 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 26.312145 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 26.312236 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 26.312297 s: in DupLink_getLinkInfo :
    [HOST] [IPU2 ] 26.312389 s: in MergeLink_drvCreate: pInQueInfo->numCh 1
    [HOST] [IPU2 ] 26.312480 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 26.312572 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 26.312663 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 26.312724 s: in DupLink_getLinkInfo :
    [HOST] [IPU2 ] 26.312816 s: in MergeLink_drvCreate: pInQueInfo->numCh 1
    [HOST] [IPU2 ] 26.312907 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 26.312999 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 26.313060 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 26.313151 s: in DupLink_getLinkInfo :
    [HOST] [IPU2 ] 26.313212 s: in MergeLink_drvCreate: pInQueInfo->numCh 1
    [HOST] [IPU2 ] 26.313883 s: System_linkGetInfo : linkId = 150994981 !!!
    [HOST] [IPU2 ] 26.313975 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 26.314036 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 26.314188 s: No of channels for encoder 6
    [HOST] [IPU2 ] 26.314982 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->numAllocPools = 1
    [HOST] [IPU2 ] 26.324803 s: ENCODE: DEBUG EncLink_codecCreateOutObj 0 pOutObj->outBufs[0] = 94baf3f0
    [HOST] [IPU2 ] 26.334655 s: ENCODE: DEBUG EncLink_codecCreateOutObj 1 pOutObj->outBufs[1] = 94baf418
    [HOST] [IPU2 ] 26.344445 s: ENCODE: DEBUG EncLink_codecCreateOutObj 2 pOutObj->outBufs[2] = 94baf440
    [HOST] [IPU2 ] 26.354297 s: ENCODE: DEBUG EncLink_codecCreateOutObj 3 pOutObj->outBufs[3] = 94baf468
    [HOST] [IPU2 ] 26.364149 s: ENCODE: DEBUG EncLink_codecCreateOutObj 4 pOutObj->outBufs[4] = 94baf490
    [HOST] [IPU2 ] 26.374001 s: ENCODE: DEBUG EncLink_codecCreateOutObj 5 pOutObj->outBufs[5] = 94baf4b8
    [HOST] [IPU2 ] 26.383852 s: ENCODE: DEBUG EncLink_codecCreateOutObj 6 pOutObj->outBufs[6] = 94baf4e0
    [HOST] [IPU2 ] 26.393704 s: ENCODE: DEBUG EncLink_codecCreateOutObj 7 pOutObj->outBufs[7] = 94baf508
    [HOST] [IPU2 ] 26.403495 s: ENCODE: DEBUG EncLink_codecCreateOutObj 8 pOutObj->outBufs[8] = 94baf530
    [HOST] [IPU2 ] 26.413377 s: ENCODE: DEBUG EncLink_codecCreateOutObj 9 pOutObj->outBufs[9] = 94baf558
    [HOST] [IPU2 ] 26.423229 s: ENCODE: DEBUG EncLink_codecCreateOutObj 10 pOutObj->outBufs[10] = 94baf580
    [HOST] [IPU2 ] 26.433081 s: ENCODE: DEBUG EncLink_codecCreateOutObj 11 pOutObj->outBufs[11] = 94baf5a8
    [HOST] [IPU2 ] 26.442932 s: ENCODE: DEBUG EncLink_codecCreateOutObj 12 pOutObj->outBufs[12] = 94baf5d0
    [HOST] [IPU2 ] 26.452784 s: ENCODE: DEBUG EncLink_codecCreateOutObj 13 pOutObj->outBufs[13] = 94baf5f8
    [HOST] [IPU2 ] 26.462575 s: ENCODE: DEBUG EncLink_codecCreateOutObj 14 pOutObj->outBufs[14] = 94baf620
    [HOST] [IPU2 ] 26.472427 s: ENCODE: DEBUG EncLink_codecCreateOutObj 15 pOutObj->outBufs[15] = 94baf648
    [HOST] [IPU2 ] 26.482279 s: ENCODE: DEBUG EncLink_codecCreateOutObj 16 pOutObj->outBufs[16] = 94baf670
    [HOST] [IPU2 ] 26.492130 s: ENCODE: DEBUG EncLink_codecCreateOutObj 17 pOutObj->outBufs[17] = 94baf698
    [HOST] [IPU2 ] 26.501982 s: ENCODE: DEBUG EncLink_codecCreateOutObj 18 pOutObj->outBufs[18] = 94baf6c0
    [HOST] [IPU2 ] 26.511834 s: ENCODE: DEBUG EncLink_codecCreateOutObj 19 pOutObj->outBufs[19] = 94baf6e8
    [HOST] [IPU2 ] 26.521686 s: ENCODE: DEBUG EncLink_codecCreateOutObj 20 pOutObj->outBufs[20] = 94baf710
    [HOST] [IPU2 ] 26.531476 s: ENCODE: DEBUG EncLink_codecCreateOutObj 21 pOutObj->outBufs[21] = 94baf738
    [HOST] [IPU2 ] 26.541328 s: ENCODE: DEBUG EncLink_codecCreateOutObj 22 pOutObj->outBufs[22] = 94baf760
    [HOST] [IPU2 ] 26.551180 s: ENCODE: DEBUG EncLink_codecCreateOutObj 23 pOutObj->outBufs[23] = 94baf788
    [HOST] [IPU2 ] 26.552095 s: in EncLink_codecCreateReqObjDummy start
    [HOST] [IPU2 ] 26.552278 s: in EncLink_codecCreateReqObjDummy end
    [HOST] [IPU2 ] 26.552339 s: ENCODE: Creating CH0 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    [HOST] [IPU2 ] 26.585310 s: ENCODE: CH0: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 26.585646 s: ENCODE: Creating CH1 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    [HOST] [IPU2 ] 26.618709 s: ENCODE: CH1: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 26.618983 s: ENCODE: Creating CH2 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    [HOST] [IPU2 ] 26.652046 s: ENCODE: CH2: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 26.652321 s: ENCODE: Creating CH3 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    [HOST] [IPU2 ] 26.685414 s: ENCODE: CH3: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 26.685780 s: ENCODE: Creating CH4 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    [HOST] [IPU2 ] 26.718843 s: ENCODE: CH4: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 26.719117 s: ENCODE: Creating CH5 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 8388 Kbps ...
    [HOST] [IPU2 ] 26.752180 s: ENCODE: CH5: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 26.752455 s: ENCODE: All CH Create ... DONE !!!
    [HOST] [IPU2 ] 26.753827 s: ENCODE: Create ... DONE !!!

    Please conform me that all six channels are encoding properly.

    Thanks

    regards
    balaji t
  • Hi Anuj,

    can you please update on the above reply.

    regards
    balaji t
  • Hi,

    In the above log i cant find the error you mentioned in your earlier post.

    This log seems fine and the no channels is also 6 .

    Regards,

    Anuj

  • Hi,

    Is the issue resolved?

    Regards,
    Anuj
  • Hi Anuj,
    sorry for the late reply.
    Again i am getting the some error in merge link(error stated below).
    ***************************************************************************************
    Assertion @ Line: 107 in links_common/merge/mergeLink_tsk.c: numOutCh < SYSTEM_MAX_CH_PER_OUT_QUE : failed !!!
    ***************************************************************************************
    In the below mentioned line
    UTILS_assert(numOutCh < SYSTEM_MAX_CH_PER_OUT_QUE);

    if i printed the value of pInQueInfo->numCh ,
    [HOST] [IPU2 ] 32.234917 s: In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 32.234917 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 32.235008 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 32.235069 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 32.235191 s: BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 32.235283 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 32.235344 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 32.235435 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 32.235527 s: BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3
    Please give me some suggestions.

    Thank you,
    regards
    Balaji T
  • Hi Anuj,

    What might be the reason for that assertion, can you pls update this.

    Thanks

    Regards

    Balaji T

  • Hi Balaji,

    Have you changed this SYSTEM_MAX_CH_PER_OUT_QUE macro? This current value of the macro is 8 and it asserts if the number of output channels are more than 8.
    So there could be only two reasons either number output channels are more than 8 or the value of this macro is changed.
    Can you please both of these.

    Rgds,
    Brijesh
  • Hi Brijesh,

    Hope you are doing well,

    i have checked the value of macro SYSTEM_MAX_CH_PER_OUT_QUE in "./include/link_api/system_const.h" file which is '8U' .
    Now, as per your suggestion, i think number output channels are more than 8. please let me know how to resist number of channels.
    To be mentioned, in use-case i have given MAX_NUMBER_OF_CHANNELS = 3.

    regards
    Balaji T
  • Balaji,

    Are you sure the assertion at the line number 107? can you please share this file?
    Just before the assert can you print both the variable's value?

    Rgds,
    Brijesh
  • Hi Brijesh,

    Apart from the above mentioned macro, i dint changed any other macro value.
    though i am getting the same assertion at the same line as stated below, please suggest some solutions.
    ********************************************
    Assertion @ Line: 107 in links_common/merge/mergeLink_tsk.c: numOutCh < SYSTEM_MAX_CH_PER_OUT_QUE : failed !!!
    ********************************************

    Thanks
    Regards
    Balaji T
  • Hi Brijesh,

    i am sure about the assertion in the line number-107, now after printing the variables pInQueInfo->numCh and SYSTEM_MAX_CH_PER_OUT_QUE it becomes line number 109.

    and also i shared the values of those variables below.

    ************************************************************************

    [HOST] [IPU2 ] 27.769444 s: CAPTURE: Create Done !!!
    [HOST] [IPU2 ] 27.769871 s: DupLink_tskMain() ... !!!
    [HOST] [IPU2 ] 27.769962 s: System_linkGetInfo : linkId = 150995001 !!!
    [HOST] [IPU2 ] 27.770054 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 27.770115 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 27.771548 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 27.771731 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 27.771792 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 27.771914 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 27.772006 s: .In MergeLink_drvCreate pInQueInfo->numCh 0
    [HOST] [IPU2 ] 27.772097 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.772189 s: .In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 27.772250 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.772341 s: .In MergeLink_drvCreate pInQueInfo->numCh 2
    [HOST] [IPU2 ] 27.772433 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.772494 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 27.772585 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 27.772677 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 27.772799 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 27.772860 s: webcam gadget: uvc_function_bind
    In. MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 27.772951 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.773043 s: .In MergeLink_drvCreate pInQueInfo->numCh 4
    [HOST] [IPU2 ] 27.773104 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.773195 s: .In MergeLink_drvCreate pInQueInfo->numCh 5
    [HOST] [IPU2 ] 27.773287 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.773378 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 27.773439 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 27.773500 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 27.773622 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 27.773744 s: .In MergeLink_drvCreate pInQueInfo->numCh 6
    [HOST] [IPU2 ] 27.773805 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.773897 s: .In MergeLink_drvCreate pInQueInfo->numCh 7
    [HOST] [IPU2 ] 27.773988 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.774049 s: .In MergeLink_drvCreate pInQueInfo->numCh 8
    [HOST] [IPU2 ] 27.774141 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 27.774232 s: Assertion @ Line: 109 in links_common/merge/mergeLink_tsk.c: numOutCh < SYSTEM_MAX_CH_PER_OUT_QUE : failed !!!

    **********************************************************************

    TBM, i have included the file src/links_common/merge/mergeLink_tsk.c.

    /*
     *******************************************************************************
     *
     * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com/
     * ALL RIGHTS RESERVED
     *
     *******************************************************************************
     */
    
    /**
      ******************************************************************************
     * \file mergeLink_tsk.c
     *
     * \brief  This file has the implementation of MERGE Link API
     **
     *           This file implements the state machine logic for this link.
     *           A message command will cause the state machine
     *           to take some action and then move to a different state.
     *
     * \version 0.0 (Aug 2013) : [SL] First version
     *
     *******************************************************************************
     */
    
    /*******************************************************************************
     *  INCLUDE FILES
     *******************************************************************************
     */
    #include "mergeLink_priv.h"
    
    /*******************************************************************************
     *  Function declarations
     *******************************************************************************
     */
    Int32 MergeLink_drvCreate(MergeLink_Obj * pObj,
                              const MergeLink_CreateParams * pPrm);
    Int32 MergeLink_drvProcessData(MergeLink_Obj * pObj);
    Int32 MergeLink_drvDelete(MergeLink_Obj * pObj);
    Int32 MergeLink_getLinkInfo(Void * ptr, System_LinkInfo * info);
    Int32 MergeLink_getFullBuffers(Void * ptr, UInt16 queId,
                                    System_BufferList * pBufList);
    Int32 MergeLink_putEmptyBuffers(Void * ptr, UInt16 queId,
                                    System_BufferList * pBufList);
    
    
    /**
     *******************************************************************************
     * \brief Link object, stores all link related information
     *******************************************************************************
     */
    MergeLink_Obj gMergeLink_obj[MERGE_LINK_OBJ_MAX];
    
    /**
     *******************************************************************************
     * \brief MERGE Link collects incoming buffers from multiple links and merges
     *     them into single output queue. There is no driver involved in merging the
     *     buffers. To keep code across all links consistent we use the same
     *     convention as MergeLink_drvCreate. This function does the following,
     *
     *     - Copies the user passed create params into the link object create params
     *     - Prepares output queue
     *
     * \param  pObj     [IN]  MERGE link instance handle
     * \param  pPrm     [IN]  Create params for MERGE link
     *
     * \return status   SYSTEM_LINK_STATUS_SOK on success
     *
     *******************************************************************************
    */
    Int32 MergeLink_drvCreate(MergeLink_Obj * pObj,
                              const MergeLink_CreateParams * pPrm)
    {
        Int32 status;
        System_LinkQueInfo *pInQueInfo, *pOutQueInfo;
        UInt32 inQue, numOutCh, chId;
    
        memcpy(&pObj->createArgs, pPrm, sizeof(pObj->createArgs));
    
        UTILS_assert(pPrm->numInQue <= MERGE_LINK_MAX_IN_QUE);
    
        status = Utils_bufCreate(&pObj->outBufQue, FALSE, FALSE);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        pObj->lock = BspOsal_semCreate(1, (Bool)TRUE);
        UTILS_assert(pObj->lock != NULL);
    
        numOutCh = 0U;
    
        pOutQueInfo = &pObj->info.queInfo[0];
    
        for (inQue = 0U; inQue < pPrm->numInQue; inQue++)
        {
            status =
                System_linkGetInfo(pPrm->inQueParams[inQue].prevLinkId,
                                   &pObj->inTskInfo[inQue]);
            UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
            UTILS_assert(pPrm->inQueParams[inQue].prevLinkQueId < pObj->inTskInfo[inQue].numQue);
    
            pInQueInfo = &pObj->inTskInfo[inQue].queInfo
                [pPrm->inQueParams[inQue].prevLinkQueId];
    
            UTILS_assert(pInQueInfo->numCh <= SYSTEM_MAX_CH_PER_OUT_QUE);
            Vps_printf(".BJOt09 In %s  pInQueInfo->numCh %d \n", __func__, pInQueInfo->numCh);
            for (chId = 0; chId < pInQueInfo->numCh; chId++)
            {
                UTILS_assert(chId < SYSTEM_MAX_CH_PER_OUT_QUE);
                Vps_printf(" .In %s  pInQueInfo->numCh %d \n", __func__,numOutCh);
                Vps_printf(" .In %s  SYSTEM_MAX_CH_PER_OUT_QUE %d \n", __func__,SYSTEM_MAX_CH_PER_OUT_QUE);
                UTILS_assert(numOutCh < SYSTEM_MAX_CH_PER_OUT_QUE);
    
                memcpy(&pOutQueInfo->chInfo[numOutCh],
                       &pInQueInfo->chInfo[chId],
                       sizeof(pOutQueInfo->chInfo[numOutCh]));
    
                pObj->inQueChNumMap[inQue][chId] = numOutCh;
                pObj->outQueChToInQueMap[numOutCh] = inQue;
                pObj->outQueChMap[numOutCh] = chId;
    
                numOutCh++;
            }
    
            pObj->inQueMaxCh[inQue] = pInQueInfo->numCh;
        }
    
        pObj->info.numQue = 1;
        pOutQueInfo->numCh = numOutCh;
    
        return SYSTEM_LINK_STATUS_SOK;
    }
    
    /**
     *******************************************************************************
     * \brief Function to delete MERGE link. This will simply delete the output
     *    queue and the semaphore
     *
     * \param  pObj     [IN]  MERGE link instance handle
     *
     * \return SYSTEM_LINK_STATUS_SOK on success
     *******************************************************************************
    */
    Int32 MergeLink_drvDelete(MergeLink_Obj * pObj)
    {
        Int32 status;
    
        status = Utils_bufDelete(&pObj->outBufQue);
        UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
        BspOsal_semDelete(&pObj->lock);
    
        return SYSTEM_LINK_STATUS_SOK;
    }
    
    /**
     *******************************************************************************
     * \brief Function called by links connected to MERGE link to get output queue
     *    Information of MERGE link
     *
     * \param  ptr      [IN]  Handle to task
     * \param  info     [OUT] output queue information of MERGE link
     *
     * \return SYSTEM_LINK_STATUS_SOK on success
     *******************************************************************************
    */
    Int32 MergeLink_getLinkInfo(Void * ptr, System_LinkInfo * info)
    {
        Utils_TskHndl *pTsk = (Utils_TskHndl *) ptr;
        MergeLink_Obj *pObj = (MergeLink_Obj *) pTsk->appData;
    
        memcpy(info, &pObj->info, sizeof(System_LinkInfo));
    
        return SYSTEM_LINK_STATUS_SOK;
    }
    
    /**
     *******************************************************************************
     * \brief Function called by links connected to MERGE link to get data from
     *    the output queue of MERGE link
     *
     * \param  ptr      [IN]  Handle to task
     * \param  queId    [IN]  output queue Id
     * \param  pBufList [OUT] A List of buffers needed for the next link
     *
     * \return SYSTEM_LINK_STATUS_SOK on success
     *******************************************************************************
    */
    Int32 MergeLink_getFullBuffers(Void * ptr, UInt16 queId,
                                    System_BufferList * pBufList)
    {
        Int32 status;
        Utils_TskHndl *pTsk = (Utils_TskHndl *) ptr;
        MergeLink_Obj *pObj = (MergeLink_Obj *) pTsk->appData;
    
        status =  Utils_bufGetFull(&pObj->outBufQue, pBufList, BSP_OSAL_NO_WAIT);
    
        if (status == 0)
        {
            pObj->stats.forwardCount += pBufList->numBuf;
        }
        return status;
    }
    
    /**
     *******************************************************************************
     * \brief MERGE Link collects incoming buffers and sends to single output queue.
     *     This function does the following,
     *
     *     - Merge buffers and sends across it's output queue
     *     - Send SYSTEM_CMD_NEW_DATA to it's connected link
     *
     * \param  pObj     [IN]  MERGE link instance handle
     *
     * \return status   SYSTEM_LINK_STATUS_SOK on success
     *
     *******************************************************************************
    */
    Int32 MergeLink_drvProcessData(MergeLink_Obj * pObj)
    {
        MergeLink_CreateParams *pCreateArgs;
        UInt32 inQue, bufId;
        Int32 status;
        System_Buffer *pBuf;
        Bool newDataAvailable;
    
        newDataAvailable = (Bool)FALSE;
    
        pCreateArgs = &pObj->createArgs;
    
        for (inQue = 0; inQue < pCreateArgs->numInQue; inQue++)
        {
            System_getLinksFullBuffers(pCreateArgs->inQueParams[inQue].prevLinkId,
                                      pCreateArgs->inQueParams[inQue].prevLinkQueId,
                                      &pObj->inBufList);
    
            if (pObj->inBufList.numBuf)
            {
                pObj->stats.recvCount[inQue] += pObj->inBufList.numBuf;
                for (bufId = 0; bufId < pObj->inBufList.numBuf; bufId++)
                {
                    /* remap channel number */
                    pBuf = pObj->inBufList.buffers[bufId];
    
                    UTILS_assert(pBuf->chNum < pObj->inQueMaxCh[inQue]);
    
                    pBuf->chNum =
                        pObj->inQueChNumMap[inQue][pBuf->chNum];
                }
    
                status = Utils_bufPutFull(&pObj->outBufQue, &pObj->inBufList);
                UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
    
                newDataAvailable = (Bool)TRUE;
            }
        }
    
        if (((Bool)TRUE == pCreateArgs->notifyNextLink) &&
            ((Bool)TRUE == newDataAvailable))
        {
            System_sendLinkCmd(pCreateArgs->outQueParams.nextLink,
                               SYSTEM_CMD_NEW_DATA, NULL);
        }
    
        return SYSTEM_LINK_STATUS_SOK;
    }
    
    /**
     *******************************************************************************
     * \brief Function called by links connected to MERGE link to return back
     *    buffers
     *
     * \param  ptr      [IN]  Handle to task
     * \param  queId    [IN]  output queue Id
     * \param  pBufList [IN]  A List of buffers returned back to MERGE link
     *
     * \return SYSTEM_LINK_STATUS_SOK on success
     *******************************************************************************
    */
    Int32 MergeLink_putEmptyBuffers(Void * ptr, UInt16 queId,
                                    System_BufferList * pBufList)
    {
        /* MISRA.PPARAM.NEEDS.CONST
         * MISRAC_2004 Rule_16.7
         * MISRAC_WAIVER:
         * Generic function prototype.
         */
    
        UInt32 bufId, inQue;
        MergeLink_CreateParams *pCreateArgs;
        System_Buffer *pBuf;
        Utils_TskHndl *pTsk = (Utils_TskHndl *) ptr;
        MergeLink_Obj *pObj = (MergeLink_Obj *) pTsk->appData;
    
        BspOsal_semWait(pObj->lock, BSP_OSAL_WAIT_FOREVER);
    
        pCreateArgs = &pObj->createArgs;
    
        for (inQue = 0; inQue < pCreateArgs->numInQue; inQue++)
        {
            pObj->freeBufList[inQue].numBuf = 0;
        }
    
        for (bufId = 0; bufId < pBufList->numBuf; bufId++)
        {
            pBuf = pBufList->buffers[bufId];
    
            UTILS_assert(pBuf != NULL);
    
            inQue = pObj->outQueChToInQueMap[pBuf->chNum];
    
            pBuf->chNum = pObj->outQueChMap[pBuf->chNum];
    
    
            UTILS_assert(inQue < pCreateArgs->numInQue);
    
            pObj->freeBufList[inQue].buffers
                [pObj->freeBufList[inQue].numBuf] = pBuf;
    
            pObj->freeBufList[inQue].numBuf++;
            pObj->stats.releaseCount[inQue]++;
        }
    
        for (inQue = 0; inQue < pCreateArgs->numInQue; inQue++)
        {
            if (pObj->freeBufList[inQue].numBuf)
            {
                System_putLinksEmptyBuffers(pCreateArgs->inQueParams[inQue].
                                           prevLinkId,
                                           pCreateArgs->inQueParams[inQue].
                                           prevLinkQueId,
                                           &pObj->freeBufList[inQue]);
            }
        }
    
        BspOsal_semPost(pObj->lock);
    
        return SYSTEM_LINK_STATUS_SOK;
    }
    
    /**
     *******************************************************************************
     *
     * \brief This function implements the following.
     *    Accepts commands for
     *     - Creating MERGE link
     *     - Arrival of new data
     *     - Deleting MERGE link
     * \param  pTsk [IN] Task Handle
     * \param  pMsg [IN] Message Handle
     *
     *******************************************************************************
     */
    Void MergeLink_tskMain(struct Utils_TskHndl_t * pTsk, Utils_MsgHndl * pMsg)
    {
        /* MISRA.PPARAM.NEEDS.CONST
         * MISRAC_2004 Rule_16.7
         * MISRAC_WAIVER:
         * Generic function prototype.
         */
    
        UInt32 cmd = Utils_msgGetCmd(pMsg);
        Int32 status = 0;
        MergeLink_Obj *pObj = (MergeLink_Obj *) pTsk->appData;
    
        switch (cmd)
        {
            case SYSTEM_CMD_CREATE:
                if(pObj->state==SYSTEM_LINK_STATE_IDLE)
                {
                    status = MergeLink_drvCreate(pObj, Utils_msgGetPrm(pMsg));
                    if(status==SYSTEM_LINK_STATUS_SOK)
                    {
                        pObj->state = SYSTEM_LINK_STATE_RUNNING;
                    }
                }
                Utils_tskAckOrFreeMsg(pMsg, status);
                break;
            case SYSTEM_CMD_DELETE:
                if(pObj->state==SYSTEM_LINK_STATE_RUNNING)
                {
                    MergeLink_drvDelete(pObj);
                    pObj->state = SYSTEM_LINK_STATE_IDLE;
                }
                Utils_tskAckOrFreeMsg(pMsg, status);
                break;
            case SYSTEM_CMD_NEW_DATA:
                Utils_tskAckOrFreeMsg(pMsg, status);
    
                if(pObj->state==SYSTEM_LINK_STATE_RUNNING)
                {
                    MergeLink_drvProcessData(pObj);
                }
                break;
            default:
                Utils_tskAckOrFreeMsg(pMsg, status);
                break;
        }
    
        return;
    }
    
    /**
     *******************************************************************************
     *
     * \brief Init function for MERGE link. This function does the following for
     *   each MERGE link,
     *  - Creates a task for the link
     *  - Registers this link with the system
     *
     * \return  SYSTEM_LINK_STATUS_SOK
     *
     *******************************************************************************
     */
    Int32 MergeLink_init(void)
    {
        Int32 status;
        System_LinkObj linkObj;
        UInt32 mergeId;
        MergeLink_Obj *pObj;
        UInt32 procId = System_getSelfProcId();
    
        for (mergeId = 0U; mergeId < MERGE_LINK_OBJ_MAX; mergeId++)
        {
            pObj = &gMergeLink_obj[mergeId];
    
            memset(pObj, 0, sizeof(MergeLink_Obj));
    
            pObj->tskId =
                SYSTEM_MAKE_LINK_ID(procId, SYSTEM_LINK_ID_MERGE_0 + mergeId);
    
            pObj->state = SYSTEM_LINK_STATE_IDLE;
    
            linkObj.pTsk = &pObj->tsk;
            linkObj.linkGetFullBuffers  = &MergeLink_getFullBuffers;
            linkObj.linkPutEmptyBuffers = &MergeLink_putEmptyBuffers;
            linkObj.getLinkInfo         = &MergeLink_getLinkInfo;
    
            System_registerLink(pObj->tskId, &linkObj);
    
            status = MergeLink_tskCreate(mergeId);
            UTILS_assert(status == SYSTEM_LINK_STATUS_SOK);
        }
    
        return status;
    }
    
    /**
     *******************************************************************************
     *
     * \brief De-init function for MERGE link. This function de-registers this link
     *  from the system
     *
     * \return  SYSTEM_LINK_STATUS_SOK
     *
     *******************************************************************************
     */
    Int32 MergeLink_deInit(void)
    {
        UInt32 mergeId;
    
        for (mergeId = 0U; mergeId < MERGE_LINK_OBJ_MAX; mergeId++)
        {
            Utils_tskDelete(&gMergeLink_obj[mergeId].tsk);
        }
        return SYSTEM_LINK_STATUS_SOK;
    }
    

    regards

    Balaji T

     

  • Balaji,

    How many channels you are capturing from capture module?
    It seems you have 3 channels on each input queue of merge link and there seems five input queues. Since number of channels in each input queue is 3, it is giving this assertion.
    Can you first check why there are three channels in each input queue? Is it because of capture?

    Rgds,
    Brijesh
  • Hi Brijesh,
    i need to record six video files, but i am having only one camera source.so i am trying the below use-case.
    Capture -> Dup(for six times ) -> Merge(merge for six) -> (encode all six channels for merge)Encode -> IPCIn(A15) -> Null
    Earlier i achieved all six merge and encode in which Mr.Anuj conformed its fine.(as shown below)
    **************************************************************************
    [HOST] [IPU2 ] 31.983468 s: DupLink_tskMain() ... !!!
    [HOST] [IPU2 ] 31.983560 s: System_linkGetInfo : linkId = 150995001 !!!
    [HOST] [IPU2 ] 31.983651 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 31.983712 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 31.984902 s: . In MergeLink_drvCreate
    [HOST] [IPU2 ] 31.985329 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 31.985420 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 31.985512 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 31.985634 s: . In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 31.985725 s: .In MergeLink_drvCreate pInQueInfo->numCh 0
    [HOST] [IPU2 ] 31.985786 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 31.985878 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 31.985969 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 31.986030 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 31.986152 s: . In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 31.986244 s: .In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 31.986335 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 31.986427 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 31.986518 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 31.986579 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 31.986701 s: . In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 31.986793 s: .In MergeLink_drvCreate pInQueInfo->numCh 2
    [HOST] [IPU2 ] 31.986854 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 31.986945 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 31.987037 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 31.987098 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 31.987189 s: . In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 31.987311 s: .In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 31.987403 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 31.987494 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 31.987555 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 31.987616 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 31.987738 s: . In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 31.987830 s: .In MergeLink_drvCreate pInQueInfo->numCh 4
    [HOST] [IPU2 ] 31.987891 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 31.987982 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 31.988074 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 31.988135 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 31.988257 s: . In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 31.988348 s: .In MergeLink_drvCreate pInQueInfo->numCh 5
    [HOST] [IPU2 ] 31.988440 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 31.988867 s: ENCODE: Create in progress ... !!!
    [HOST] [IPU2 ] 31.988958 s: ENCODE: Create in progress ... !!!
    [HOST] [IPU2 ] 31.989080 s: System_linkGetInfo : linkId = 150994981 !!!
    [HOST] [IPU2 ] 31.989172 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 31.989233 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 31.989385 s: No of channels for encoder 6
    [HOST] [IPU2 ] 31.989507 s: ENCODE: DEBUG enclink_populate_outbuf_pool_size_info resClassChInfo.numActiveResClass = 1
    [HOST] [IPU2 ] 31.990209 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->numAllocPools = 1
    [HOST] [IPU2 ] 32.000061 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[0] = 94baf3f0
    [HOST] [IPU2 ] 32.009882 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[1] = 94baf418
    [HOST] [IPU2 ] 32.019734 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[2] = 94baf440
    [HOST] [IPU2 ] 32.029555 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[3] = 94baf468
    [HOST] [IPU2 ] 32.039376 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[4] = 94baf490
    [HOST] [IPU2 ] 32.049167 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[5] = 94baf4b8
    [HOST] [IPU2 ] 32.059019 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[6] = 94baf4e0
    [HOST] [IPU2 ] 32.068870 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[7] = 94baf508
    [HOST] [IPU2 ] 32.078692 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[8] = 94baf530
    [HOST] [IPU2 ] 32.088543 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[9] = 94baf558
    [HOST] [IPU2 ] 32.098395 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[10] = 94baf580
    [HOST] [IPU2 ] 32.108186 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[11] = 94baf5a8
    [HOST] [IPU2 ] 32.118007 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[12] = 94baf5d0
    [HOST] [IPU2 ] 32.127859 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[13] = 94baf5f8
    [HOST] [IPU2 ] 32.137680 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[14] = 94baf620
    [HOST] [IPU2 ] 32.147501 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[15] = 94baf648
    [HOST] [IPU2 ] 32.157353 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[16] = 94baf670
    [HOST] [IPU2 ] 32.167114 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[17] = 94baf698
    [HOST] [IPU2 ] 32.176965 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[18] = 94baf6c0
    [HOST] [IPU2 ] 32.186787 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[19] = 94baf6e8
    [HOST] [IPU2 ] 32.196608 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[20] = 94baf710
    [HOST] [IPU2 ] 32.206460 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[21] = 94baf738
    [HOST] [IPU2 ] 32.216220 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[22] = 94baf760
    [HOST] [IPU2 ] 32.226072 s: ENCODE: DEBUG EncLink_codecCreateOutObj pOutObj->outBufs[23] = 94baf788
    [HOST] [IPU2 ] 32.227017 s: ENCODE: Creating CH0 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 2097 Kbps ...
    [HOST] [IPU2 ] 32.259989 s: ENCODE: CH0: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 32.260324 s: ENCODE: Creating CH1 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 2097 Kbps ...
    [HOST] [IPU2 ] 32.293356 s: ENCODE: CH1: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 32.293631 s: ENCODE: Creating CH2 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 2097 Kbps ...
    [HOST] [IPU2 ] 32.326694 s: ENCODE: CH2: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 32.326968 s: ENCODE: Creating CH3 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 2097 Kbps ...
    [HOST] [IPU2 ] 32.360062 s: ENCODE: CH3: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 32.360397 s: ENCODE: Creating CH4 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 2097 Kbps ...
    [HOST] [IPU2 ] 32.393460 s: ENCODE: CH4: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 32.393735 s: ENCODE: Creating CH5 of 720 x 480, pitch = (720, 720) [1] [0], bitrate = 2097 Kbps ...
    [HOST] [IPU2 ] 32.426798 s: ENCODE: CH5: H264EncCreated:H264ENC_TI DEV.500.V.H264AVC.E.IVAHD.02.00.09.01
    [HOST] [IPU2 ] 32.427042 s: ENCODE: All CH Create ... DONE !!!
    [HOST] [IPU2 ] 32.428445 s: ENCODE: Create ... DONE !!!
    ***************************************************************************************************

    Now its creating 3 channels for each input queue of merge link, so if i am giving MAX_NUMBER_OF_CHANNELS = 3, for each input queue its
    creating 3 channels.
    But i need one channel for each input queue,for MAX_NUMBER_OF_CHANNELS = 3. so totally three encoded channels.
    please suggest me some solutions.
    Now the current log is shown below.
    [HOST] [IPU2 ] 29.527389 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 29.527481 s: .In MergeLink_drvCreate pInQueInfo->numCh 0
    [HOST] [IPU2 ] 29.527603 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.527694 s: .In MergeLink_drvCreate pInQueInfo->numCh 1
    [HOST] [IPU2 ] 29.527786 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.527877 s: .In MergeLink_drvCreate pInQueInfo->numCh 2
    [HOST] [IPU2 ] 29.527938 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.528030 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 29.528121 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] [IPU2 ] 29.528182 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 29.528304 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 29.528396 s: .In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 29.528457 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.528579 s: .In MergeLink_drvCreate pInQueInfo->numCh 4
    [HOST] [IPU2 ] 29.528640 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.528731 s: .In MergeLink_drvCreate pInQueInfo->numCh 5
    [HOST] [IPU2 ] 29.528823 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.528914 s: System_linkGetInfo : linkId = 150994968 !!!
    [HOST] [IPU2 ] 29.528975 s: System_linkGetInfo : ProcId = 9 !!!
    [HOST] aIPU2 ] 29.529067 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!
    [HOST] [IPU2 ] 29.529158 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3
    [HOST] [IPU2 ] 29.529250 s: .In MergeLink_drvCreate pInQueInfo->numCh 6
    [HOST] [IPU2 ] 29.529341 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.529433 s: .In MergeLink_drvCreate pInQueInfo->numCh 7
    [HOST] [IPU2 ] 29.529494 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.529616 s: .In MergeLink_drvCreate pInQueInfo->numCh 8
    [HOST] [IPU2 ] 29.529677 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8
    [HOST] [IPU2 ] 29.529768 s: Assertion @ Line: 110 in links_common/merge/mergeLink_tsk.c: numOutCh < SYSTEM_MAX_CH_PER_OUT_QUE : failed !!!


    Regards
    Balaji T
  • Hi Balaji,

    I could not understand second part of the above. 

    Do you want to now encoder 3 * 6 = 18 channels? 

    If you have now 3 channels per input queue, then remove not required dup and merge links from the usecase.. 

    Rgds,

    Brijesh

  • Hi Brijesh,

    since i have only one capture source but i need to record 6 recordings, so i am using dup and merge and then encode.

    i am trying to dup the camera source into six times ((pObj->DupPrm).numOutQue = 6)and merge six output from dup ((pObj->MergePrm).numInQue = 6;) and then encode.

    As shown in the first part of the above reply, i want only 1 channel per input queue of merge link.

    But now its creating 3 channels per input queue and also throwing an assertion in the encode link(shown below).

    **************************************************************************

    [HOST] [IPU2  ]     25.641798 s:  CAPTURE: Create Done !!!

    [HOST] [IPU2  ]     25.642347 s: DupLink_tskMain() ... !!!

    [HOST] [IPU2  ]     25.642438 s: System_linkGetInfo : linkId = 150995001 !!!

    [HOST] [IPU2  ]     25.642530 s: System_linkGetInfo : ProcId = 9 !!!

    [HOST] [IPU2  ]     25.642621 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!

    [HOST] [IPU2  ]     25.643780 s: .BJOt11 In MergeLink_drvCreate

    [HOST] [IPU2  ]     25.644177 s: System_linkGetInfo : linkId = 150994968 !!!

    [HOST] [IPU2  ]     25.644268 s: System_linkGetInfo : ProcId = 9 !!!

    [HOST] [IPU2  ]     25.644360 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!

    [HOST] [IPU2  ]     25.644482 s: .BJOt11 In MergeLink_drvCreate  pInQueInfo->numCh 3 (i want this value to be 1, then it works fine)

    [HOST] [IPU2  ]     25.644634 s:  .In MergeLink_drvCreate numOutCh  0

    [HOST] [IPU2  ]     25.644695 s:  .In MergeLink_drvCreate  SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2  ]     25.644787 s:  .In MergeLink_drvCreate numOutCh  1

    [HOST] [IPU2  ]     25.644848 s:  .In MergeLink_drvCreate  SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2  ]     25.644939 s:  .In MergeLink_drvCreate numOutCh  2

    [HOST] [IPU2  ]     25.645031 s:  .In MergeLink_drvCreate  SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2  ]     25.645488 s:  ENCODE: Create in progress ... !!!

    [HOST] [IPU2  ]     25.645580 s:  ENCODE: Create in progress ... !!!

    [HOST] [IPU2  ]     25.645732 s: System_linkGetInfo : linkId = 150994981 !!!

    [HOST] [IPU2  ]     25.645793 s: System_linkGetInfo : ProcId = 9 !!!

    [HOST] [IPU2  ]     25.645885 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!

    [HOST] [IPU2  ]     25.646007 s: BJOt04 No of channels for encoder 3

    [HOST] [IPU2  ]     25.646098 s:  ENCODE: DEBUG enclink_populate_outbuf_pool_size_info  resClassChInfo.numActiveResClass = 1

    [HOST] [IPU2  ]     25.646922 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->numAllocPools = 1

    [HOST] [IPU2  ]    get: Webcam Video Gadget

    25.669340 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj-outBufs[0] = 94baf3f0

    [HOST] [IPU2  ]     25.691697 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[1] = 94baf418

    [HOST] [IPU2  ]     25.713963 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[2] = 94baf440

    [HOST] [IPU2  ]     25.736198 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[3] = 94baf468

    [HOST] [IPU2  ]     25.758402 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[4] = 94baf490

    [HOST] [IPU2  ]     25.780668 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[5] = 94baf4b8

    [HOST] [IPU2  ]     25.802903 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[6] = 94baf4e0

    [HOST] [IPU2  ]     25.825108 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[7] = 94baf508

    [HOST] [IPU2  ]     25.847312 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[8] = 94baf530

    [HOST] [IPU2  ]     25.869547 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[9] = 94baf558

    [HOST] [IPU2  ]     25.891813 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[10] = 94baf580

    [HOST] [IPU2  ]     25.914018 s:  ENCODE: DEBUG EncLink_codecCreateOutObj  pOutObj->outBufs[11] = 94baf5a8

    [HOST] [IPU2  ]     25.914963 s:  ENCODE: Creating CH0 of 1280 x 288,  pitch = (2560, 0) [0] [0], bitrate = 2097 Kbps ...

    [HOST] [IPU2  ]     25.915390 s:  Assertion @ Line: 750 in links_ipu/iva/iva_enc/encLink_common.c: pChAlgCreatePrm->inputChromaFormat == XDM_YUV_420SP : failed !!!

    *******************************************************************************************

    Regards

    Balaji T

  • Balaji,

    Can you show your usecase_priv.c/h files?

    Regards,
    Brijesh

  • Hi  Brijesh,

    please find the attachment for  usecase_priv.c/h files.

    Regds

    Balaji T

  • Hi Balaji,

    This seems fine, the only change is, number of input links for merge and output links for dup are set to 1 here.
    (pObj->DupPrm).numOutQue = 1;
    (pObj->MergePrm).numInQue = 1;

    Hopefully you are changing it in your usecase file. can you also share usecase.c file?

    Rgds,
    Brijesh
  • Hi Brijesh Jadav,

    please find the usecase.c file attached .

    Rgds,
    Balaji T

     

  • Hi Balaji,

    can you please check the value of the variable chainsObj.chainsCfg->numLvdsCh? Also are you using CSI input?
    If this variable is set to more than 1, then you will have more than 1 channel in each input queue..

    Rgds,
    Brijesh
  • Brijesh,

    i have checked the value of chainsObj.chainsCfg->numLvdsCh,(listed below).
    **********************************************************
    [HOST] [HOST ] 30.550875 s: Bjot12 chains_multichannel_dvr() chainsObj.chainsCfg->numLvdsCh 0
    [HOST] [HOST ] 30.550905 s: Bjot12 chains_multichannel_dvr() chainsObj.numCsi2Ch 0

    ***********************************************************
    Now, while creating encoded channels its creating an assertion shown below.
    **********************************************************
    [HOST] [IPU2 ] 31.802507 s: ENCODE: Creating CH0 of 1280 x 288, pitch = (2560, 0) [0] [0], bitrate = 2097 Kbps ...
    [HOST] [IPU2 ] 31.802964 s: Assertion @ Line: 750 in links_ipu/iva/iva_enc/encLink_common.c: pChAlgCreatePrm->inputChromaFormat == XDM_YUV_420SP : failed !!!
    ***********************************************************

    Regds
    Balaji T
  • Balaji,

    It is failing due to pixel format. Typically encoder support YUV420 format, but it looks like you are outputting YUV422 from the capture driver. Just change capture output format to YUV420.
    Capture can output YUV420, if it is from VIP.

    Regards,
    Brijesh
  • Brijesh,

    May be the encoder assertion is because of   pixel format, but before that i want to clear this error,

    [HOST] [IPU2 ] 29.527389 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3 (i want this value to be 1 each time, so when i give 6 it creates 6 channels)

    [HOST] [IPU2 ] 29.527481 s: .In MergeLink_drvCreate pInQueInfo->numCh 0

    [HOST] [IPU2 ] 29.527603 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.527694 s: .In MergeLink_drvCreate pInQueInfo->numCh 1

    [HOST] [IPU2 ] 29.527786 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.527877 s: .In MergeLink_drvCreate pInQueInfo->numCh 2

    [HOST] [IPU2 ] 29.527938 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.528030 s: System_linkGetInfo : linkId = 150994968 !!!

    [HOST] [IPU2 ] 29.528121 s: System_linkGetInfo : ProcId = 9 !!!

    [HOST] [IPU2 ] 29.528182 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!

    [HOST] [IPU2 ] 29.528304 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3

    [HOST] [IPU2 ] 29.528396 s: .In MergeLink_drvCreate pInQueInfo->numCh 3

    [HOST] [IPU2 ] 29.528457 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.528579 s: .In MergeLink_drvCreate pInQueInfo->numCh 4

    [HOST] [IPU2 ] 29.528640 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.528731 s: .In MergeLink_drvCreate pInQueInfo->numCh 5

    [HOST] [IPU2 ] 29.528823 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.528914 s: System_linkGetInfo : linkId = 150994968 !!!

    [HOST] [IPU2 ] 29.528975 s: System_linkGetInfo : ProcId = 9 !!!

    [HOST] aIPU2 ] 29.529067 s: System_linkGetInfo : SYSTEM_PROC_MAX = 10 !!!

    [HOST] [IPU2 ] 29.529158 s: .BJOt09 In MergeLink_drvCreate pInQueInfo->numCh 3

    [HOST] [IPU2 ] 29.529250 s: .In MergeLink_drvCreate pInQueInfo->numCh 6

    [HOST] [IPU2 ] 29.529341 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.529433 s: .In MergeLink_drvCreate pInQueInfo->numCh 7

    [HOST] [IPU2 ] 29.529494 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.529616 s: .In MergeLink_drvCreate pInQueInfo->numCh 8

    [HOST] [IPU2 ] 29.529677 s: .In MergeLink_drvCreate SYSTEM_MAX_CH_PER_OUT_QUE 8

    [HOST] [IPU2 ] 29.529768 s: Assertion @ Line: 110 in links_common/merge/mergeLink_tsk.c: numOutCh < SYSTEM_MAX_CH_PER_OUT_QUE : failed !!!\

    ************************************************************************************

    please suggest me some solutions, to make In MergeLink_drvCreate pInQueInfo->numCh 3 to be 1.


    By that chance i can make my use-case success-full.

    Regds

    Balaji T

  • Hi Balaji,

    It seems some issue, we will have to go into breakpoint way.
    can you put breakpoint on DupLink_drvCreate function and check how many channels are returned by captured when System_linkGetInfo API is called from this Dup create function?
    I dont see dup link changing numCh, so this must be coming from capture in your case.
    Now if it is capture, we will have to see why capture is configured for three channel output. Most likely this is coming from app, but lets check one by one.

    Rgds,
    Brijesh