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.

the frame rate of a decode-only-channel

We are working on DVR RDK v03.50.00.06.  We use a customized usecase original from usecases/multich_vdec_vdis.c, pls ref another post: http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/261372/919800.aspx

We found a strange thing about the "speed" of decode-only case.  The speed are under our expectation.  Furthermore, lower decode channels sometimes are slower than more ones!!  There seems be one invisible limitation.  Is there any way to break the invisible limitation and then to reach the "full speed"?

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

The frame rates of total 4 channels with some disabled ones:

4:0
93 0 0 0

4:0 1
125 125 0 0

4:0 1 2
256 256 257 0

4:0 1 2 3
211 274 274 230

4:0 3
125 0 0 125
---------------------------

The frame rates of total 12 channels with some disabled ones:

12: 0
68 0 0 | 0 0 0 | 0 0 0 | 0 0 0

12: 0 1
69 69 0 | 0 0 0 | 0 0 0 | 0 0 0

12: 0 1 2
70 70 70 | 0 0 0 | 0 0 0 | 0 0 0

12: 0 1 2 3
71 71 71 | 71 0 0 | 0 0 0 | 0 0 0

12: 0 1 2 3 4
72 72 72 | 72 72 0 | 0 0 0 | 0 0 0

12: 0 1 2 3 4 5
75 75 75 | 75 75 75 | 0 0 0 | 0 0 0

12: 0 1 2 3 4 5 6
78 78 78 | 78 78 78 | 78 0 0 | 0 0 0

12: 0 1 2 3 4 5 6 7 8 9 10 11
117 117 117 | 117 117 117 | 117 117 117 | 117 117 117

12: 0
68 0 0 | 0 0 0 | 0 0 0 | 0 0 0

12: 0 3
78 0 0 | 78 0 0 | 0 0 0 | 0 0 0

12: 0 3 6
93 0 0 | 93 0 0 | 93 0 0 | 0 0 0

12: 0 3 6 9
125 0 0 | 125 0 0 | 125 0 0 | 125 0 0

  • the video sources are h264 with resolution 720x480

  • Pls share the log of Vsys_printDetailedStatistics.There could be many things limiting the framerate:

    1. Check notify is enabled for all ipcLinks in your usecase. (Make sure noNotifyMode is FALSE)

    2. The data read could be the bottleneck.Check the timing on the thread on A8 that is feeding data to ipcBitOutLink HLOS.

    3. Input / Output buffers for the decode channel may be the bottleneck. Check at what rate buffers are being freed back to ipcFramesIn link on HLOS.

        Try setting DecLink_CreateParams.chCreateParams.enableFrameSkipDue2AccumuInNextLink = TRUE in your usecase and check if there is improvement in FPS. If set to TRUE decoder link will drop the frame if output buffer is not available so if output buffer was the bottleneck you should see improvement in fps.

    4. If you give the frame for display then you will be limited by the display./SwMs rate.

     

  • the log of Vsys_printDetailedStatistics

     [m3vpss ]  
     [m3vpss ]  *** [SWMS0] Mosaic Statistics ***
     [m3vpss ]  
     [m3vpss ]  Elasped Time: 29 secs
     [m3vpss ]  
     [m3vpss ]  Output Request FPS   : 62 fps (1800 frames)
     [m3vpss ]  Output Actual  FPS   : 62 fps (1800 frames)
     [m3vpss ]  Output Drop    FPS   : 0 fps (0 frames)
     [m3vpss ]  Output Reject  FPS   : 0 fps (0 frames)
     [m3vpss ]  Scaling Internal     : 16 ms
     [m3vpss ]  Scaling Internal min : 15 ms
     [m3vpss ]  Scaling Internal max : 17 ms
     [m3vpss ]  
     [m3vpss ]  Win | Window Repeat Drop Recv Que  FID Invlid Acc Event          Invalid   Que Reject Reject Latency   OutBufCopy InBufCopy
     [m3vpss ]  Num | FPS    FPS    FPS  FPS  FPS  FPS        Count (Max/Min)    CH Frames Frames     Frames Min / Max FPS        FPS      
     [m3vpss ]  ---------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |      0     62    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         62         0
     [m3vpss ]    1 |      0     62    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         62         0
     [m3vpss ]    2 |      0     62    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         62         0
     [m3vpss ]    3 |      0     62    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         62         0
     [m3vpss ]    4 |      0     62    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         62         0
     [m3vpss ]    5 |      0     62    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         62         0
     [m3vpss ]    6 |      0     62    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         62         0
     [m3vpss ]    7 |      0     62    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         62         0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS0] Mosaic Parameters ***
     [m3vpss ]  
     [m3vpss ]  Output FPS: 60
     [m3vpss ]  
     [m3vpss ]  Win | Ch  | Input      | Input          | Input         | Input       | Output     |  Output         | Output        | Output      | Low Cost | SWMS | Data  | Blank |
     [m3vpss ]  Num | Num | Start X, Y | Width x Height | Pitch Y / C   | Memory Type | Start X, Y |  Width x Height | Pitch Y / C   | Memory Type | ON / OFF | Inst | Format| Frame |
     [m3vpss ]  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |   0 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |    0,    0 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    1 |   1 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |  768,    0 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    2 |   2 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |    0,  540 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    3 |   3 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |  768,  540 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    4 |   4 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,    0 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    5 |   5 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  270 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    6 |   6 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  540 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    7 |   7 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  810 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS1] Mosaic Statistics ***
     [m3vpss ]  
     [m3vpss ]  Elasped Time: 29 secs
     [m3vpss ]  
     [m3vpss ]  Output Request FPS   : 31 fps (900 frames)
     [m3vpss ]  Output Actual  FPS   : 31 fps (900 frames)
     [m3vpss ]  Output Drop    FPS   : 0 fps (0 frames)
     [m3vpss ]  Output Reject  FPS   : 0 fps (0 frames)
     [m3vpss ]  Scaling Internal     : 33 ms
     [m3vpss ]  Scaling Internal min : 33 ms
     [m3vpss ]  Scaling Internal max : 34 ms
     [m3vpss ]  
     [m3vpss ]  Win | Window Repeat Drop Recv Que  FID Invlid Acc Event          Invalid   Que Reject Reject Latency   OutBufCopy InBufCopy
     [m3vpss ]  Num | FPS    FPS    FPS  FPS  FPS  FPS        Count (Max/Min)    CH Frames Frames     Frames Min / Max FPS        FPS      
     [m3vpss ]  ---------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |      0     31    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         31         0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS1] Mosaic Parameters ***
     [m3vpss ]  
     [m3vpss ]  Output FPS: 30
     [m3vpss ]  
     [m3vpss ]  Win | Ch  | Input      | Input          | Input         | Input       | Output     |  Output         | Output        | Output      | Low Cost | SWMS | Data  | Blank |
     [m3vpss ]  Num | Num | Start X, Y | Width x Height | Pitch Y / C   | Memory Type | Start X, Y |  Width x Height | Pitch Y / C   | Memory Type | ON / OFF | Inst | Format| Frame |
     [m3vpss ]  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |   0 |    0,    0 |   720 x    480 |   896 /   896 | NON-TILED   |    0,    0 |  1920 x   1080 |  3840 /      0 | NON-TILED   |      OFF |    0 |  420SP |    ON |
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  4130423: DISPLAY: HDDAC(BP0) : 59 fps, Latency (Min / Max) = ( 65 / 68 ), Callback Interval (Min / Max) = ( 16 / 17 ) DropCount:0 DispLatency (Min / Max) = ( 45 / 49 ) !!!
     [m3vpss ]  4130423: DISPLAY: UNDERFLOW COUNT: HDMI(BP0) 1800, HDDAC(BP0) 1800, DVO2(BP1) 1800, SDDAC(SEC1) 1800
     [m3vpss ]  4130423: SYSTEM  : FREE SPACE : System Heap      = 67280 B, Mbx = 10239 msgs)
     [m3vpss ]  4130423: SYSTEM  : FREE SPACE : SR0 Heap         = 9270528 B (8 MB)
     [m3vpss ]  4130423: SYSTEM  : FREE SPACE : Frame Buffer     = 75164544 B (71 MB)
     [m3vpss ]  4130424: SYSTEM  : FREE SPACE : Bitstream Buffer = 321146752 B (306 MB)
     [m3vpss ]  4130424: SYSTEM  : FREE SPACE : Tiler Buffer     = 256 B (0 MB)  - TILER OFF
     [m3vpss ]  4130424: DISPLAY: DVO2(BP1)  : 59 fps, Latency (Min / Max) = ( 83 / 86 ), Callback Interval (Min / Max) = ( 16 / 17 ) DropCount:0 DispLatency (Min / Max) = ( 57 / 66 ) !!!
     [m3video]     4134425: HDVICP-ID:0
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :1 %
     [m3video]          totalWait2Isr :76 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :76 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :82 %
     [m3video]          totalAcq2acqDelay :17 %
     [m3video]          totalElapsedTime in msec :   59833
     [m3video]          numAccessCnt:   23737
     [m3video]         IVA-FPS :     402
     [m3video]         Average time spent per frame in microsec:    1915
     [m3video]     4134425: HDVICP-ID:1
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :2 %
     [m3video]          totalWait2Isr :77 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :77 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :82 %
     [m3video]          totalAcq2acqDelay :17 %
     [m3video]          totalElapsedTime in msec :   59821
     [m3video]          numAccessCnt:   23689
     [m3video]         IVA-FPS :     401
     [m3video]         Average time spent per frame in microsec:    1944
     [m3video]     4134426: HDVICP-ID:2
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :1 %
     [m3video]          totalWait2Isr :76 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :76 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :82 %
     [m3video]          totalAcq2acqDelay :17 %
     [m3video]          totalElapsedTime in msec :   59827
     [m3video]          numAccessCnt:   23734
     [m3video]         IVA-FPS :     402
     [m3video]         Average time spent per frame in microsec:    1915
     [m3video]  
     [m3video]  *** DECODE Statistics ***
     [m3video]  
     [m3video]  Elasped Time           : 29 secs
     [m3video]  
     [m3video]  
     [m3video]  CH  | In Recv In User  Out
     [m3video]  Num | FPS     Skip FPS FPS
     [m3video]  -----------------------------------
     [m3video]    0 |      83        0  83
     [m3video]    1 |      83        0  83
     [m3video]    2 |      83        0  83
     [m3video]    3 |      83        0  83
     [m3video]    4 |      83        0  83
     [m3video]    5 |      83        0  83
     [m3video]    6 |      83        0  83
     [m3video]    7 |      83        0  83
     [m3video]    8 |      83        0  83
     [m3video]    9 |      83        0  83
     [m3video]   10 |      83        0  83
     [m3video]   11 |      83        0  83
     [m3video]  
     [m3video] Multi Channel Decode Average Submit Batch Size
     [m3video] Max Submit Batch Size : 24
     [m3video] IVAHD_0 Average Batch Size : 3
     [m3video] IVAHD_0 Max achieved Batch Size : 4
     [m3video] IVAHD_1 Average Batch Size : 3
     [m3video] IVAHD_1 Max achieved Batch Size : 4
     [m3video] IVAHD_2 Average Batch Size : 3
     [m3video] IVAHD_2 Max achieved Batch Size : 4
     [m3video]  
     [m3video] Multi Channel Decode Batch break Stats
     [m3video] Total Number of Batches created: 2418
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 1 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 98 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video] Total Number of Batches created: 2434
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 0 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 99 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video] Total Number of Batches created: 2424
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 0 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 99 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video]  
     [m3vpss ]  
     [m3vpss ]  *** [MP_SCLR0 ] Statistics ***
     [m3vpss ]  
     [m3vpss ]  Total Frames Received  : 0
     [m3vpss ]  Total Frames Forwarded : 0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  CH  | In Recv In Reject Processed  Latency(DRV) Processed  Rejected
     [m3vpss ]  Num | FPS     FPS       FPS        Min / Max    Frames     Frames  
     [m3vpss ]  -------------------------------------------------------------------
     [m3vpss ]  
     [m3vpss ]  4136431: LOAD: CPU: 8.3% HWI: 2.7%, SWI:1.9%
     [m3vpss ]  
     [m3vpss ]  4136431: LOAD: TSK: IPC_FRAMES_IN0      : 0.3%
     [m3vpss ]  4136431: LOAD: TSK: DISPLAY0            : 0.5%
     [m3vpss ]  4136431: LOAD: TSK: DISPLAY1            : 0.3%
     [m3vpss ]  4136431: LOAD: TSK: SWMS0               : 1.7%
     [m3vpss ]  4136431: LOAD: TSK: SWMS1               : 0.4%
     [m3vpss ]  4136431: LOAD: TSK: MISC                : 0.5%
     [m3vpss ]  
     [m3video]  
     [m3video]  4136932: LOAD: CPU: 28.0% HWI: 1.0%, SWI:1.3%
     [m3video]  
     [m3video]  4136932: LOAD: TSK: IPC_FRAMES_OUT0     : 4.5%
     [m3video]  4136932: LOAD: TSK: IPC_BITS_IN0        : 1.1%
     [m3video]  4136932: LOAD: TSK: DEC0                : 4.5%
     [m3video]  4136932: LOAD: TSK: DEC_PROCESS_TSK_0   : 4.8%
     [m3video]  4136932: LOAD: TSK: DEC_PROCESS_TSK_1   : 5.2%
     [m3video]  4136932: LOAD: TSK: DEC_PROCESS_TSK_2   : 5.1%
     [m3video]  4136932: LOAD: TSK: MISC                : 0.5%
     [m3video]  
     [c6xdsp ]  
     [c6xdsp ]  4134845: LOAD: CPU: 0.1% HWI: 0.0%, SWI:0.0%
     [c6xdsp ]  
     [c6xdsp ]  4134845: LOAD: TSK: MISC                : 0.1%
     [c6xdsp ]  

  •  [m3video]  CH  | In Recv In User  Out
     [m3video]  Num | FPS     Skip FPS FPS
     [m3video]  -----------------------------------
     [m3video]    0 |      83        0  83

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

    The function Vsys_printDetailedStatistics

    Instead of 83 fps (that is slowed down by the function Vsys_printDetailedStatistics), the original frame rate is 117 fps.

  •  totalAcq2acqDelay :17 % - This indicates HDVICP is idle for 17% of time which means input /output buffers are not available for decoding. Pls check the other points I mentioned to determine why input/output buffers are not available

  • > 1. Check notify is enabled for all ipcLinks in your usecase. (Make sure noNotifyMode is FALSE)

    Already tried, and no improvement.

    > 2. The data read could be the bottleneck.Check the timing on the thread on A8 that is feeding data to ipcBitOutLink HLOS.

    The function IpcFramesInLink_getFullVideoFrames is called every 1 millisecond.

    > 3a. Check at what rate buffers are being freed back to ipcFramesIn link on HLOS.

    The function IpcFramesInLink_putEmptyVideoFrames is called every 1 millisecond.

    > 3b. Try setting DecLink_CreateParams.chCreateParams.enableFrameSkipDue2AccumuInNextLink = TRUE in your usecase and check if there is improvement in FPS.

    No improvement.

    > 4. If you give the frame for display then you will be limited by the display./SwMs rate.

    No displaying.

    Anyway, thanks for your help!

  • How do I set the members: noNotifyMode, nofityNextLink, and notifyPrevLink?  Set noNotifyMode at somewhere will make the chain blocked.

    The attached file is my usecase.

    /*******************************************************************************
     *                                                                             *
     * Copyright (c) 2009 Texas Instruments Incorporated - http://www.ti.com/      *
     *                        ALL RIGHTS RESERVED                                  *
     *                                                                             *
     ******************************************************************************/
    /*  ========================= TI_816X_BUILD case ==============================
                              |
                            IPC_BITS_OUT_A8 (BitStream)
                              |
                            IPC_BITS_IN (Video)
                              |
                            DEC (YUV420SP)
                              |
                            IPC_OUT (Video)
                              |
                            IPC_IN (Vpss)
                              |   (32 D1 + 10 720P + 6 1080P)
                            MP_SCLR (Vpss)
                              |
                             DUP
                   (48CH)    | |    (48CH)
             +---------------+ +-------------+
             |                               |
             |                               |
          SW Mosaic                       SW Mosaic
         (SC5 SC1 YUV422I)                (SC4 SC2 YUV422I)
            |  |                             |  |
            |  |                             |  |
           (DDR)(422I)                      (DDR)(422I)
              |                               |
      GRPX0   |                      GRPX1    |
         |    |                          |    |
         On-Chip HDMI                    Off-Chip HDMI
           1080p60                        1080p60
    */
    
    /* ========================= TI_814X_BUILD case ==============================
                              |
                            IPC_BITS_OUT_A8 (BitStream)
                              |
                            IPC_BITS_IN (Video)
                              |
                            DEC (YUV420SP)
                              |
                            IPC_OUT (Video)
                              |
                            IPC_IN (Vpss)
                              |   (16 channels)
                            MP_SCLR (Vpss)
                              |
                             DUP
                   (16CH)    | |    (16CH)
             +---------------+ +-------------+
             |                               |
             |                               |
          SW Mosaic                       SW Mosaic
         (SC5 YUV422I)                (SC5 YUV422I)
            |  |                             |  |
            |  |                             |  |
           (DDR)(422I)                      (DDR)(422I)
              |                               |
      GRPX0   |----Tied---|                   |
         |    |           |                   |
         On-Chip HDMI  Off-Chip HDMI         SDTV
           1080p60       1080p60
    */
    
    #include "multich_common.h"
    #include "multich_ipcbits.h"
    #include "mcfw/interfaces/link_api/system_tiler.h"
    #include "mcfw/interfaces/link_api/avsync_hlos.h"
    
    /* =============================================================================
     * Externs
     * =============================================================================
     */
    
    
    /* =============================================================================
     * Use case code
     * =============================================================================
     */
    
    
    
    #define MAX_DEC_OUT_FRAMES_PER_CH                           (5)
    #define MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_NUM_CHANNELS       (16)
    #define MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_WIDTH        (720)
    #define MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_HEIGHT       (480)
    #define MULTICH_NUM_SWMS_MAX_BUFFERS                        (7)
    
    #define ENABLE_STATIC_CHANNELS_IN_TILED_MODE                (FALSE)
    #define ENABLE_VIDEO_FRAME_IMPORT                           (TRUE)
    
    
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
    static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
    {
        .isPopulated = 1,
        .ivaMap[0] =
        {
            .EncNumCh  = 0,
            .EncChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0},
    
            .DecNumCh  = 16,
            .DecChList = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
        },
    };
    #define NUM_STATIC_CHANNELS   (6)
    #else
    /*
    Max channels per IVA-HD MUST be < 16,
    i.e total number of channels for decode can be 48.
    
    Example CH allocation for SD+HD,
    
    32CH SD    :  0 to 31
     6CH 1080P : 32 to 38
    10CH 720P  : 39 to 48
    
    */
    static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
    {
        .isPopulated = 1,
        .ivaMap[0] =
        {
            .EncNumCh  = 0,
            .EncChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0},
    
            .DecNumCh  = 17,
            .DecChList = {   0,  3,  6,  9, 12, 15, 18, 21,
                            24, 27, 30, 33, 36, 39, 42, 45,
                            48
                         },
        },
        .ivaMap[1] =
        {
            .EncNumCh  = 0,
            .EncChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0},
    
            .DecNumCh  = 17,
            .DecChList = {   1,  4,  7, 10, 13, 16, 19, 22,
                            25, 28, 31, 34, 37, 40, 43, 46,
                            49
                         },
        },
        .ivaMap[2] =
        {
            .EncNumCh  = 0,
            .EncChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0},
    
            .DecNumCh  = 16,
            .DecChList = {   2,  5,  8, 11, 14, 17, 20, 23,
                            26, 29, 32, 35, 38, 41, 44, 47
                         },
        },
    };
    #define NUM_STATIC_CHANNELS   (8)
    #endif
    
    typedef struct {
    
        UInt32 ipcFramesOutVideoToHostId;
        UInt32 ipcFramesInHostFromVideoId;
        Bool   enableVideoFrameImport;
    
        UInt32 dupId;
        UInt32 ipcOutVideoId;
        UInt32 ipcInVpssId;
        UInt32 mergeId;
        Bool   enableVideoFrameExport;
        AvsyncLink_LinkSynchConfigParams   avsyncCfg[VDIS_DEV_MAX];
        UInt32 mpSclrId;
    
    } MultiCh_VdecVdisObj;
    
    MultiCh_VdecVdisObj gMultiCh_VdecVdisObj;
    
    static Void MultiCh_setIpcFramesOutInQueInfo(System_LinkQueInfo *inQueInfo)
    {
        Int i;
    
        inQueInfo->numCh = MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_NUM_CHANNELS;
        for (i = 0; i < inQueInfo->numCh; i++)
        {
            inQueInfo->chInfo[i].bufType = SYSTEM_BUF_TYPE_VIDFRAME;
            inQueInfo->chInfo[i].dataFormat = SYSTEM_DF_YUV422I_YUYV;
            inQueInfo->chInfo[i].memType    = SYSTEM_MT_NONTILEDMEM;
            inQueInfo->chInfo[i].scanFormat = SYSTEM_SF_PROGRESSIVE;
            inQueInfo->chInfo[i].startX     = 0;
            inQueInfo->chInfo[i].startY     = 0;
            inQueInfo->chInfo[i].width      =
                       MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_WIDTH;
            inQueInfo->chInfo[i].height     =
                       MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_HEIGHT;
            inQueInfo->chInfo[i].pitch[0]   =
                       MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_WIDTH * 2;
            inQueInfo->chInfo[i].pitch[1]   = 0;
            inQueInfo->chInfo[i].pitch[2]   = 0;
        }
    }
    
    static Void MultiCh_copyIpcFramesOutInQueInfo(System_LinkQueInfo *dstInQueInfo, System_LinkQueInfo *srcInQueInfo)
    {
        Int i, j;
    
        dstInQueInfo->numCh = srcInQueInfo->numCh;
        for (i = 0; i < dstInQueInfo->numCh; i++)
        {
            dstInQueInfo->chInfo[i].bufType    = srcInQueInfo->chInfo[i].bufType;
            dstInQueInfo->chInfo[i].dataFormat = srcInQueInfo->chInfo[i].dataFormat;
            dstInQueInfo->chInfo[i].memType    = srcInQueInfo->chInfo[i].memType;
            dstInQueInfo->chInfo[i].scanFormat = srcInQueInfo->chInfo[i].scanFormat;
            dstInQueInfo->chInfo[i].startX     = srcInQueInfo->chInfo[i].startX;
            dstInQueInfo->chInfo[i].startY     = srcInQueInfo->chInfo[i].startY;
            dstInQueInfo->chInfo[i].width      = srcInQueInfo->chInfo[i].width;
            dstInQueInfo->chInfo[i].height     = srcInQueInfo->chInfo[i].height;
            for (j = 0; j < SYSTEM_MAX_PLANES; j++)
            {
                dstInQueInfo->chInfo[i].pitch[j]   = srcInQueInfo->chInfo[i].pitch[j];
            }
        }
    }
    
    static
    Void mulich_vdec_vdis_set_avsync_vidque_prm(Avsync_SynchConfigParams *queCfg,
                                                Int chnum,
                                                UInt32 avsStartChNum,
                                                UInt32 avsEndChNum,
                                                VDIS_DEV vdDevId)
    {
        queCfg->chNum = chnum;
        queCfg->audioPresent = FALSE;
        if ((queCfg->chNum >= avsStartChNum)
            &&
            (queCfg->chNum <= avsEndChNum)
            &&
            (gVsysModuleContext.vsysConfig.enableAVsync))
        {
            queCfg->avsyncEnable = TRUE;
        }
        else
        {
            queCfg->avsyncEnable = FALSE;
        }
        queCfg->clkAdjustPolicy.refClkType = AVSYNC_REFCLKADJUST_NONE;
        queCfg->clkAdjustPolicy.clkAdjustLead = AVSYNC_VIDEO_TIMEBASESHIFT_MAX_LEAD_MS;
        queCfg->clkAdjustPolicy.clkAdjustLag  = AVSYNC_VIDEO_TIMEBASESHIFT_MAX_LAG_MS;
        queCfg->vidSynchPolicy.maxReplayLead  = AVSYNC_VIDEO_FUTURE_FRAME_DROP_THRESHOLD_MS;
        queCfg->vidSynchPolicy.playMaxLag  = 180;
        queCfg->vidSynchPolicy.playMaxLead = 0;
        queCfg->vidSynchPolicy.doMarginScaling = FALSE;
        queCfg->playTimerStartTimeout = 0;
        queCfg->playStartMode = AVSYNC_PLAYBACK_START_MODE_WAITSYNCH;
        queCfg->ptsInitMode   = AVSYNC_PTS_INIT_MODE_APP;
    }
    
    static
    Void mulich_vdec_vdis_set_avsync_prm(AvsyncLink_LinkSynchConfigParams *avsyncPrm,
                                         UInt32 swMsIdx,
                                         VDIS_DEV vdDevId)
    {
        Int i;
        Int32 status;
    
        Vdis_getAvsyncConfig(vdDevId,avsyncPrm);
        avsyncPrm->displayLinkID        = Vdis_getDisplayId(vdDevId);
        avsyncPrm->videoSynchLinkID = gVdisModuleContext.swMsId[swMsIdx];
        avsyncPrm->numCh            = gVdecModuleContext.vdecConfig.numChn;
        avsyncPrm->syncMasterChnum =  AVSYNC_INVALID_CHNUM;
        for (i = 0; i < avsyncPrm->numCh;i++)
        {
            mulich_vdec_vdis_set_avsync_vidque_prm(&avsyncPrm->queCfg[i],
                                                   i,
                                                   0,
                                                   (0 + gVdecModuleContext.vdecConfig.numChn),
                                                   vdDevId);
        }
        if (0 == swMsIdx)
        {
            Vdis_setAvsyncConfig(VDIS_DEV_HDMI,avsyncPrm);
        }
        else
        {
            Vdis_setAvsyncConfig(VDIS_DEV_SD,avsyncPrm);
        }
    
        status = Avsync_configSyncConfigInfo(avsyncPrm);
        OSA_assert(status == 0);
    }
    
    Void MultiCh_createVdecVdis()
    {
        IpcBitsOutLinkHLOS_CreateParams   ipcBitsOutHostPrm;
        IpcBitsInLinkRTOS_CreateParams    ipcBitsInVideoPrm;
        DecLink_CreateParams        decPrm;
        IpcLink_CreateParams        ipcOutVideoPrm;
        IpcLink_CreateParams        ipcInVpssPrm;
        DupLink_CreateParams        dupPrm;
        static SwMsLink_CreateParams       swMsPrm[VDIS_DEV_MAX];
        DisplayLink_CreateParams    displayPrm[VDIS_DEV_MAX];
        IpcFramesOutLinkRTOS_CreateParams  ipcFramesOutVideoToHostPrm;
        IpcFramesInLinkHLOS_CreateParams   ipcFramesInHostFromVideoPrm;
        IpcFramesOutLinkHLOS_CreateParams  ipcFramesOutHostPrm;
        IpcFramesInLinkRTOS_CreateParams   ipcFramesInVpssFromHostPrm;
        MergeLink_CreateParams             mergePrm;
        MpSclrLink_CreateParams            mpSclrPrm;
    
        UInt32 i;
        UInt32 enableGrpx;
        Bool tilerEnable;
        Bool enableVideoFrameImport;
        Bool enableVideoFrameExport;
    
        MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcInVpssPrm);
        MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcOutVideoPrm);
        MULTICH_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,ipcBitsOutHostPrm);
        MULTICH_INIT_STRUCT(IpcBitsInLinkRTOS_CreateParams,ipcBitsInVideoPrm);
        MULTICH_INIT_STRUCT(DecLink_CreateParams, decPrm);
        MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams ,ipcFramesOutVideoToHostPrm);
        MULTICH_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams  ,ipcFramesInHostFromVideoPrm);
        MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams ,ipcFramesOutHostPrm);
        MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams  ,ipcFramesInVpssFromHostPrm);
        for (i = 0; i < VDIS_DEV_MAX;i++)
        {
            MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);
            MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swMsPrm[i]);
        }
    
        MULTICH_INIT_STRUCT(MpSclrLink_CreateParams, mpSclrPrm);
    
        MultiCh_detectBoard();
    
        System_linkControl(
            SYSTEM_LINK_ID_M3VPSS,
            SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES,
            NULL,
            0,
            TRUE
            );
    
        System_linkControl(
            SYSTEM_LINK_ID_M3VIDEO,
            SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
            &systemVid_encDecIvaChMapTbl,
            sizeof(SystemVideo_Ivahd2ChMap_Tbl),
            TRUE
        );
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
        enableGrpx   = FALSE;
    #else
        enableGrpx   = TRUE;
    #endif
    
    #if ENABLE_STATIC_CHANNELS_IN_TILED_MODE
        tilerEnable  = TRUE;
    #else
        tilerEnable  = FALSE;
    #endif
    
        if (tilerEnable == FALSE)
        {
            /* Disable tiler allocator for this usecase
             * for that tiler memory can be reused for
             * non-tiled allocation
             */
            SystemTiler_disableAllocator();
        }
    
    #if !ENABLE_VIDEO_FRAME_IMPORT
        enableVideoFrameImport = FALSE;
        enableVideoFrameExport = FALSE;
    #else
        enableVideoFrameImport = TRUE;
        enableVideoFrameExport = TRUE;
    #endif
    
        gVdecModuleContext.ipcBitsOutHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0;
        gVdecModuleContext.ipcBitsInRTOSId  = SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0;
        gVdecModuleContext.decId            = SYSTEM_LINK_ID_VDEC_0;
    
        if (!enableVideoFrameImport)
        {
            gMultiCh_VdecVdisObj.ipcOutVideoId  = SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0;
            gMultiCh_VdecVdisObj.ipcInVpssId    = SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0;
        }
        else
        {
            gMultiCh_VdecVdisObj.ipcOutVideoId  = SYSTEM_LINK_ID_INVALID;
            gMultiCh_VdecVdisObj.ipcInVpssId    = SYSTEM_LINK_ID_INVALID;
        }
        gMultiCh_VdecVdisObj.dupId          = SYSTEM_VPSS_LINK_ID_DUP_0;
        gMultiCh_VdecVdisObj.mpSclrId       = SYSTEM_LINK_ID_MP_SCLR_INST_0;
        gVdisModuleContext.mpSclrId         = SYSTEM_LINK_ID_MP_SCLR_INST_0;
        gVdisModuleContext.swMsId[0]        = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    
        gVdisModuleContext.displayId[0]     = SYSTEM_LINK_ID_DISPLAY_0; // ON AND OFF CHIP HDMI
    
        if (gVsysModuleContext.vsysConfig.numDisplays > 1)
        {
            gVdisModuleContext.swMsId[1]        = SYSTEM_LINK_ID_SW_MS_MULTI_INST_1;
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
            gVdisModuleContext.displayId[1]     = SYSTEM_LINK_ID_DISPLAY_2; // SDTV
    #else
            gVdisModuleContext.displayId[1]     = SYSTEM_LINK_ID_DISPLAY_1; // OFF CHIP HDMI
    #endif
        }
    
        if (enableVideoFrameImport)
        {
            gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId  = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_OUT_0;
            gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;
        }
    
        if (enableVideoFrameExport)
        {
            if (!enableVideoFrameImport)
            {
                gMultiCh_VdecVdisObj.mergeId                 = SYSTEM_VPSS_LINK_ID_MERGE_0;
            }
            else
            {
                gMultiCh_VdecVdisObj.mergeId                 = SYSTEM_LINK_ID_INVALID;
            }
            gVdisModuleContext.ipcFramesOutHostId        = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
            gVdisModuleContext.ipcFramesInVpssFromHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0;
        }
    
        if(enableGrpx)
        {
            // GRPX is enabled in Vdis_start() based on the link ID set here
            gVdisModuleContext.grpxId[0]    = SYSTEM_LINK_ID_GRPX_0;
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
            gVdisModuleContext.grpxId[1]    = SYSTEM_LINK_ID_INVALID;
    #else
            gVdisModuleContext.grpxId[1]    = SYSTEM_LINK_ID_GRPX_1;
    #endif
        }
    
    
        ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink= gVdecModuleContext.ipcBitsInRTOSId;
        ipcBitsOutHostPrm.baseCreateParams.notifyNextLink       = FALSE;
        ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink       = FALSE;
        ipcBitsOutHostPrm.baseCreateParams.noNotifyMode         = FALSE;
        ipcBitsOutHostPrm.baseCreateParams.numOutQue            = 1;
        ipcBitsOutHostPrm.inQueInfo.numCh                       = gVdecModuleContext.vdecConfig.numChn;
        ipcBitsOutHostPrm.bufPoolPerCh                          = TRUE;
    
        for (i=0; i<ipcBitsOutHostPrm.inQueInfo.numCh; i++)
        {
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].width =
                gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoWidth;
    
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].height =
                gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoHeight;
    
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =
                SYSTEM_SF_PROGRESSIVE;
    
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].bufType        = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].codingformat   = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].dataFormat     = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].memType        = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].startX         = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].startY         = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[0]       = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[1]       = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[2]       = 0; // NOT USED
            ipcBitsOutHostPrm.numBufPerCh[i] = 6;
        }
    
        ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId    = gVdecModuleContext.ipcBitsOutHLOSId;
        ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink  = gVdecModuleContext.decId;
        ipcBitsInVideoPrm.baseCreateParams.noNotifyMode              = TRUE;
        ipcBitsInVideoPrm.baseCreateParams.notifyNextLink            = TRUE;
        ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink            = FALSE;
        ipcBitsInVideoPrm.baseCreateParams.numOutQue                 = 1;
    
        for (i=0; i<ipcBitsOutHostPrm.inQueInfo.numCh; i++)
        {
            if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_H264)
                decPrm.chCreateParams[i].format                 = IVIDEO_H264HP;
            else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MPEG4)
                decPrm.chCreateParams[i].format                 = IVIDEO_MPEG4ASP;
            else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MJPEG)
                decPrm.chCreateParams[i].format                 = IVIDEO_MJPEG;
    
            decPrm.chCreateParams[i].numBufPerCh
                             = gVdecModuleContext.vdecConfig.decChannelParams[i].numBufPerCh;
            decPrm.chCreateParams[i].profile                = IH264VDEC_PROFILE_ANY;
            decPrm.chCreateParams[i].displayDelay
                             = gVdecModuleContext.vdecConfig.decChannelParams[i].displayDelay;
            decPrm.chCreateParams[i].dpbBufSizeInFrames = IH264VDEC_DPB_NUMFRAMES_AUTO;
            decPrm.chCreateParams[i].processCallLevel   = VDEC_FRAMELEVELPROCESSCALL;
            //decPrm.chCreateParams[i].processCallLevel   = VDEC_FIELDLEVELPROCESSCALL;
    
            decPrm.chCreateParams[i].targetMaxWidth  =
                ipcBitsOutHostPrm.inQueInfo.chInfo[i].width;
    
            decPrm.chCreateParams[i].targetMaxHeight =
                ipcBitsOutHostPrm.inQueInfo.chInfo[i].height;
    
            decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate =
                gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.frameRate;
    
            decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate =
                gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.targetBitRate;
            decPrm.chCreateParams[i].tilerEnable = tilerEnable;
    
    #if ENABLE_STATIC_CHANNELS_IN_TILED_MODE
            if (i >= NUM_STATIC_CHANNELS)
                decPrm.chCreateParams[i].tilerEnable = FALSE;
    #endif
        }
    
        decPrm.inQueParams.prevLinkId       = gVdecModuleContext.ipcBitsInRTOSId;
        decPrm.inQueParams.prevLinkQueId    = 0;
    
        if (enableVideoFrameImport)
        {
            decPrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId;
    
            ipcFramesOutVideoToHostPrm.baseCreateParams.noNotifyMode = TRUE;
            ipcFramesOutVideoToHostPrm.baseCreateParams.notifyNextLink = FALSE;
            ipcFramesOutVideoToHostPrm.baseCreateParams.notifyPrevLink = TRUE;
            ipcFramesOutVideoToHostPrm.baseCreateParams.inQueParams.prevLinkId = gVdecModuleContext.decId;
            ipcFramesOutVideoToHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
            ipcFramesOutVideoToHostPrm.baseCreateParams.numOutQue = 1;
            ipcFramesOutVideoToHostPrm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId;
    
            ipcFramesInHostFromVideoPrm.baseCreateParams.noNotifyMode = TRUE;
            ipcFramesInHostFromVideoPrm.baseCreateParams.notifyNextLink = FALSE;
            ipcFramesInHostFromVideoPrm.baseCreateParams.notifyPrevLink = FALSE;
            ipcFramesInHostFromVideoPrm.baseCreateParams.inQueParams.prevLinkId = gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId;
            ipcFramesInHostFromVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
            ipcFramesInHostFromVideoPrm.baseCreateParams.numOutQue = 1;
            ipcFramesInHostFromVideoPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
            ipcFramesInHostFromVideoPrm.exportOnlyPhyAddr = TRUE;
        }
        else
        {
            decPrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.ipcOutVideoId;
    
            ipcOutVideoPrm.inQueParams.prevLinkId    = gVdecModuleContext.decId;
            ipcOutVideoPrm.inQueParams.prevLinkQueId = 0;
            ipcOutVideoPrm.outQueParams[0].nextLink     = gMultiCh_VdecVdisObj.ipcInVpssId;
            ipcOutVideoPrm.notifyNextLink            = TRUE;
            ipcOutVideoPrm.notifyPrevLink            = TRUE;
            ipcOutVideoPrm.numOutQue                 = 1;
    
            ipcInVpssPrm.inQueParams.prevLinkId    = gMultiCh_VdecVdisObj.ipcOutVideoId;
            ipcInVpssPrm.inQueParams.prevLinkQueId = 0;
            ipcInVpssPrm.notifyNextLink            = TRUE;
            ipcInVpssPrm.notifyPrevLink            = TRUE;
            ipcInVpssPrm.numOutQue                 = 1;
        }
    
        if (enableVideoFrameExport)
        {
            ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = FALSE;
            ipcFramesOutHostPrm.baseCreateParams.notifyNextLink = FALSE;
            ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = FALSE;
            ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID;
            ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
            ipcFramesOutHostPrm.baseCreateParams.numOutQue = 1;
            ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gVdisModuleContext.ipcFramesInVpssFromHostId;
            if (!enableVideoFrameImport)
            {
                MultiCh_setIpcFramesOutInQueInfo(&ipcFramesOutHostPrm.inQueInfo);
            }
    
            ipcFramesInVpssFromHostPrm.baseCreateParams.noNotifyMode = FALSE;
            ipcFramesInVpssFromHostPrm.baseCreateParams.notifyNextLink = TRUE;
            ipcFramesInVpssFromHostPrm.baseCreateParams.notifyPrevLink = FALSE;
            ipcFramesInVpssFromHostPrm.baseCreateParams.inQueParams.prevLinkId = gVdisModuleContext.ipcFramesOutHostId;
            ipcFramesInVpssFromHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
            ipcFramesInVpssFromHostPrm.baseCreateParams.numOutQue = 1;
            if (!enableVideoFrameImport)
            {
                ipcFramesInVpssFromHostPrm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.mergeId;
    
    
                ipcInVpssPrm.outQueParams[0].nextLink     = gMultiCh_VdecVdisObj.mergeId;
    
                mergePrm.numInQue                     = 2;
                mergePrm.inQueParams[0].prevLinkId    = gMultiCh_VdecVdisObj.ipcInVpssId;
                mergePrm.inQueParams[0].prevLinkQueId = 0;
                mergePrm.inQueParams[1].prevLinkId    = gVdisModuleContext.ipcFramesInVpssFromHostId;
                mergePrm.inQueParams[1].prevLinkQueId = 0;
    
                mergePrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.mpSclrId;
                mergePrm.notifyNextLink               = TRUE;
                mpSclrPrm.inQueParams.prevLinkId      = gMultiCh_VdecVdisObj.mergeId;
            }
            else
            {
                ipcFramesInVpssFromHostPrm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.mpSclrId;
                mpSclrPrm.inQueParams.prevLinkId      = gVdisModuleContext.ipcFramesInVpssFromHostId;
            }
        }
        else
        {
            mpSclrPrm.inQueParams.prevLinkId        = gMultiCh_VdecVdisObj.ipcInVpssId;
            ipcInVpssPrm.outQueParams[0].nextLink   = gMultiCh_VdecVdisObj.mpSclrId;
    
        }
    
        mpSclrPrm.pathId = MP_SCLR_LINK_SC5;
        mpSclrPrm.numCh = 4;
        mpSclrPrm.enableLineSkip = FALSE;
    
        mpSclrPrm.outQueParams.nextLink       = gMultiCh_VdecVdisObj.dupId;
        dupPrm.inQueParams.prevLinkId         = gMultiCh_VdecVdisObj.mpSclrId;
    
        dupPrm.inQueParams.prevLinkQueId      = 0;
        dupPrm.numOutQue                      = gVsysModuleContext.vsysConfig.numDisplays;
        dupPrm.outQueParams[0].nextLink       = gVdisModuleContext.swMsId[0];
        dupPrm.outQueParams[1].nextLink       = gVdisModuleContext.swMsId[1];
        dupPrm.notifyNextLink                 = TRUE;
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
    
        swMsPrm[0].numSwMsInst = 1;
        swMsPrm[0].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI;
    
        swMsPrm[0].swMsInstStartWin[0]  = 0;
        swMsPrm[0].swMsInstStartWin[1]  = 10;
    
        swMsPrm[1].numSwMsInst = 1;
        swMsPrm[1].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;
    
        swMsPrm[1].swMsInstStartWin[0]  = 0;
        swMsPrm[1].swMsInstStartWin[1]  = 10;
    
        swMsPrm[0].enableProcessTieWithDisplay = TRUE;
        swMsPrm[1].enableProcessTieWithDisplay = FALSE;
    
    #else
        swMsPrm[0].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_VIP1_SC;
        swMsPrm[0].swMsInstId[1]        = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;
    
        swMsPrm[1].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI;
        swMsPrm[1].swMsInstId[1]        = SYSTEM_SW_MS_SC_INST_SC5;
    
        swMsPrm[0].numSwMsInst          = 2;
    
        swMsPrm[0].swMsInstStartWin[0]  = 0;
        swMsPrm[0].swMsInstStartWin[1]  = 4;
    
        swMsPrm[1].numSwMsInst          = swMsPrm[0].numSwMsInst;
        swMsPrm[1].swMsInstStartWin[0]  = swMsPrm[0].swMsInstStartWin[0];
        swMsPrm[1].swMsInstStartWin[1]  = swMsPrm[0].swMsInstStartWin[1];
    
        swMsPrm[0].enableProcessTieWithDisplay = TRUE;
        swMsPrm[1].enableProcessTieWithDisplay = TRUE;
    
    #endif
        for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
        {
            VDIS_DEV vdDevId = VDIS_DEV_HDMI;
    
            swMsPrm[i].inQueParams.prevLinkId     = gMultiCh_VdecVdisObj.dupId;
            swMsPrm[i].inQueParams.prevLinkQueId  = i;
            swMsPrm[i].outQueParams.nextLink      = gVdisModuleContext.displayId[i];
            swMsPrm[i].numOutBuf                 = MULTICH_NUM_SWMS_MAX_BUFFERS;
    
            /* Disable inQue drop at SwMs as input may arrive very fast in VDEC->VDIS use case */
            swMsPrm[i].maxInputQueLen             = SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN;
            if (i == 0)
            {
                vdDevId = VDIS_DEV_HDMI;
                swMsPrm[i].maxOutRes              = VSYS_STD_1080P_60;
                swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
            }
            else if (i == 1)
            {
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
                vdDevId = VDIS_DEV_SD;
                swMsPrm[i].maxOutRes              = VSYS_STD_PAL;
                swMsPrm[i].outQueParams.nextLink  = SYSTEM_LINK_ID_DISPLAY_2;
                swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    
    #else
                vdDevId = VDIS_DEV_DVO2;
                swMsPrm[i].maxOutRes              = VSYS_STD_1080P_60;
                swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;
    #endif
            }
            /* low cost line skip mode of scaling can be used, when tiler is off */
            if(tilerEnable)
                swMsPrm[i].lineSkipMode           = FALSE;
            else
                swMsPrm[i].lineSkipMode           = TRUE;
    
            swMsPrm[i].enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;
    
            MultiCh_swMsGetDefaultLayoutPrm(vdDevId, &swMsPrm[i], FALSE);    /* both from 0-16 chnl */
    
            displayPrm[i].inQueParams[0].prevLinkId    = gVdisModuleContext.swMsId[i];
            displayPrm[i].inQueParams[0].prevLinkQueId = 0;
            displayPrm[i].displayRes                = swMsPrm[i].initOutRes;
            if (i == 1)
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
                            displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    #else
                            displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;
    #endif
            mulich_vdec_vdis_set_avsync_prm(&gMultiCh_VdecVdisObj.avsyncCfg[i],i,vdDevId);
        }
    
    
        System_linkCreate(gVdecModuleContext.ipcBitsOutHLOSId,&ipcBitsOutHostPrm,sizeof(ipcBitsOutHostPrm));
        System_linkCreate(gVdecModuleContext.ipcBitsInRTOSId,&ipcBitsInVideoPrm,sizeof(ipcBitsInVideoPrm));
        System_linkCreate(gVdecModuleContext.decId, &decPrm, sizeof(decPrm));
    
        if (enableVideoFrameImport)
        {
            System_linkCreate(gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId,  &ipcFramesOutVideoToHostPrm,  sizeof(ipcFramesOutVideoToHostPrm));
            System_linkCreate(gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId, &ipcFramesInHostFromVideoPrm, sizeof(ipcFramesInHostFromVideoPrm));
        }
        else
        {
            System_linkCreate(gMultiCh_VdecVdisObj.ipcOutVideoId, &ipcOutVideoPrm, sizeof(ipcOutVideoPrm));
            System_linkCreate(gMultiCh_VdecVdisObj.ipcInVpssId  , &ipcInVpssPrm, sizeof(ipcInVpssPrm));
        }
    
        if (enableVideoFrameExport)
        {
            if (enableVideoFrameImport)
            {
                System_LinkInfo linkInfo;
                System_linkGetInfo(gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId, &linkInfo);
                MultiCh_copyIpcFramesOutInQueInfo(&ipcFramesOutHostPrm.inQueInfo, &linkInfo.queInfo[0]);
            }
            System_linkCreate(gVdisModuleContext.ipcFramesOutHostId     , &ipcFramesOutHostPrm    , sizeof(ipcFramesOutHostPrm));
            System_linkCreate(gVdisModuleContext.ipcFramesInVpssFromHostId     , &ipcFramesInVpssFromHostPrm    , sizeof(ipcFramesInVpssFromHostPrm));
            if (!enableVideoFrameImport)
            {
                System_linkCreate(gMultiCh_VdecVdisObj.mergeId,&mergePrm,sizeof(mergePrm));
            }
        }
    
        System_linkCreate(gMultiCh_VdecVdisObj.mpSclrId, &mpSclrPrm, sizeof(mpSclrPrm));
        System_linkCreate(gMultiCh_VdecVdisObj.dupId     , &dupPrm    , sizeof(dupPrm));
    
        for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
            System_linkCreate(gVdisModuleContext.swMsId[i]  , &swMsPrm[i], sizeof(swMsPrm[i]));
    
        for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
            System_linkCreate(gVdisModuleContext.displayId[i], &displayPrm[i], sizeof(displayPrm[i]));
    
        MultiCh_memPrintHeapStatus();
        gMultiCh_VdecVdisObj.enableVideoFrameImport = enableVideoFrameImport;
        gMultiCh_VdecVdisObj.enableVideoFrameExport = enableVideoFrameExport;
        {
            MultiCh_setDec2DispMap(VDIS_DEV_HDMI,gVdecModuleContext.vdecConfig.numChn,0,0);
            #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
            MultiCh_setDec2DispMap(VDIS_DEV_SD,gVdecModuleContext.vdecConfig.numChn,0,0);
            #else
            MultiCh_setDec2DispMap(VDIS_DEV_HDCOMP,gVdecModuleContext.vdecConfig.numChn,0,0);
            #endif
       }
    
    }
    
    Void MultiCh_deleteVdecVdis()
    {
        Bool tilerEnable;
    
    #if ENABLE_STATIC_CHANNELS_IN_TILED_MODE
        tilerEnable  = TRUE;
    #else
        tilerEnable  = FALSE;
    #endif
    
        /* delete can be done in any order */
        Vdec_delete();
        Vdis_delete();
    
        if (gMultiCh_VdecVdisObj.enableVideoFrameImport)
        {
            System_linkDelete(gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId);
            System_linkDelete(gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId);
        }
    
        if (gMultiCh_VdecVdisObj.enableVideoFrameExport)
        {
            if (!gMultiCh_VdecVdisObj.enableVideoFrameImport)
            {
                System_linkDelete(gMultiCh_VdecVdisObj.mergeId);
            }
        }
    
        System_linkDelete(gMultiCh_VdecVdisObj.mpSclrId);
        System_linkDelete(gMultiCh_VdecVdisObj.dupId);
        if (!gMultiCh_VdecVdisObj.enableVideoFrameImport)
        {
            System_linkDelete(gMultiCh_VdecVdisObj.ipcOutVideoId );
            System_linkDelete(gMultiCh_VdecVdisObj.ipcInVpssId );
        }
    
        /* Print the HWI, SWI and all tasks load */
        /* Reset the accumulated timer ticks */
        MultiCh_prfLoadCalcEnable(FALSE, TRUE, FALSE);
    
    
        if (tilerEnable == FALSE)
        {
            /* Disable tiler allocator for this usecase
             * for that tiler memory can be reused for
             * non-tiled allocation
             */
            SystemTiler_enableAllocator();
        }
    }
    

  • Attached is the file with correct setting of noNotifyMode. The code still has issues with MultiCh_setIpcFramesOutInQueInfo which is not doing System_linkGetInfo.Thsi can cause problems if your decoder channel resolution changes.

     

    /*******************************************************************************
     *                                                                             *
     * Copyright (c) 2009 Texas Instruments Incorporated - http://www.ti.com/      *
     *                        ALL RIGHTS RESERVED                                  *
     *                                                                             *
     ******************************************************************************/
    /*  ========================= TI_816X_BUILD case ==============================
                              |
                            IPC_BITS_OUT_A8 (BitStream)
                              |
                            IPC_BITS_IN (Video)
                              |
                            DEC (YUV420SP)
                              |
                            IPC_OUT (Video)
                              |
                            IPC_IN (Vpss)
                              |   (32 D1 + 10 720P + 6 1080P)
                            MP_SCLR (Vpss)
                              |
                             DUP
                   (48CH)    | |    (48CH)
             +---------------+ +-------------+
             |                               |
             |                               |
          SW Mosaic                       SW Mosaic
         (SC5 SC1 YUV422I)                (SC4 SC2 YUV422I)
            |  |                             |  |
            |  |                             |  |
           (DDR)(422I)                      (DDR)(422I)
              |                               |
      GRPX0   |                      GRPX1    |
         |    |                          |    |
         On-Chip HDMI                    Off-Chip HDMI
           1080p60                        1080p60
    */
    
    /* ========================= TI_814X_BUILD case ==============================
                              |
                            IPC_BITS_OUT_A8 (BitStream)
                              |
                            IPC_BITS_IN (Video)
                              |
                            DEC (YUV420SP)
                              |
                            IPC_OUT (Video)
                              |
                            IPC_IN (Vpss)
                              |   (16 channels)
                            MP_SCLR (Vpss)
                              |
                             DUP
                   (16CH)    | |    (16CH)
             +---------------+ +-------------+
             |                               |
             |                               |
          SW Mosaic                       SW Mosaic
         (SC5 YUV422I)                (SC5 YUV422I)
            |  |                             |  |
            |  |                             |  |
           (DDR)(422I)                      (DDR)(422I)
              |                               |
      GRPX0   |----Tied---|                   |
         |    |           |                   |
         On-Chip HDMI  Off-Chip HDMI         SDTV
           1080p60       1080p60
    */
    
    #include "multich_common.h"
    #include "multich_ipcbits.h"
    #include "mcfw/interfaces/link_api/system_tiler.h"
    #include "mcfw/interfaces/link_api/avsync_hlos.h"
    
    /* =============================================================================
     * Externs
     * =============================================================================
     */
    
    
    /* =============================================================================
     * Use case code
     * =============================================================================
     */
    
    
    
    #define MAX_DEC_OUT_FRAMES_PER_CH                           (5)
    #define MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_NUM_CHANNELS       (16)
    #define MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_WIDTH        (720)
    #define MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_HEIGHT       (480)
    #define MULTICH_NUM_SWMS_MAX_BUFFERS                        (7)
    
    #define ENABLE_STATIC_CHANNELS_IN_TILED_MODE                (FALSE)
    #define ENABLE_VIDEO_FRAME_IMPORT                           (TRUE)
    
    
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
    static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
    {
        .isPopulated = 1,
        .ivaMap[0] =
        {
            .EncNumCh  = 0,
            .EncChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0},
    
            .DecNumCh  = 16,
            .DecChList = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},
        },
    };
    #define NUM_STATIC_CHANNELS   (6)
    #else
    /*
    Max channels per IVA-HD MUST be < 16,
    i.e total number of channels for decode can be 48.
    
    Example CH allocation for SD+HD,
    
    32CH SD    :  0 to 31
     6CH 1080P : 32 to 38
    10CH 720P  : 39 to 48
    
    */
    static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
    {
        .isPopulated = 1,
        .ivaMap[0] =
        {
            .EncNumCh  = 0,
            .EncChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0},
    
            .DecNumCh  = 17,
            .DecChList = {   0,  3,  6,  9, 12, 15, 18, 21,
                            24, 27, 30, 33, 36, 39, 42, 45,
                            48
                         },
        },
        .ivaMap[1] =
        {
            .EncNumCh  = 0,
            .EncChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0},
    
            .DecNumCh  = 17,
            .DecChList = {   1,  4,  7, 10, 13, 16, 19, 22,
                            25, 28, 31, 34, 37, 40, 43, 46,
                            49
                         },
        },
        .ivaMap[2] =
        {
            .EncNumCh  = 0,
            .EncChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0},
    
            .DecNumCh  = 16,
            .DecChList = {   2,  5,  8, 11, 14, 17, 20, 23,
                            26, 29, 32, 35, 38, 41, 44, 47
                         },
        },
    };
    #define NUM_STATIC_CHANNELS   (8)
    #endif
    
    typedef struct {
    
        UInt32 ipcFramesOutVideoToHostId;
        UInt32 ipcFramesInHostFromVideoId;
        Bool   enableVideoFrameImport;
    
        UInt32 dupId;
        UInt32 ipcOutVideoId;
        UInt32 ipcInVpssId;
        UInt32 mergeId;
        Bool   enableVideoFrameExport;
        AvsyncLink_LinkSynchConfigParams   avsyncCfg[VDIS_DEV_MAX];
        UInt32 mpSclrId;
    
    } MultiCh_VdecVdisObj;
    
    MultiCh_VdecVdisObj gMultiCh_VdecVdisObj;
    
    static Void MultiCh_setIpcFramesOutInQueInfo(System_LinkQueInfo *inQueInfo)
    {
        Int i;
    
        inQueInfo->numCh = MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_NUM_CHANNELS;
        for (i = 0; i < inQueInfo->numCh; i++)
        {
            inQueInfo->chInfo[i].bufType = SYSTEM_BUF_TYPE_VIDFRAME;
            inQueInfo->chInfo[i].dataFormat = SYSTEM_DF_YUV422I_YUYV;
            inQueInfo->chInfo[i].memType    = SYSTEM_MT_NONTILEDMEM;
            inQueInfo->chInfo[i].scanFormat = SYSTEM_SF_PROGRESSIVE;
            inQueInfo->chInfo[i].startX     = 0;
            inQueInfo->chInfo[i].startY     = 0;
            inQueInfo->chInfo[i].width      =
                       MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_WIDTH;
            inQueInfo->chInfo[i].height     =
                       MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_HEIGHT;
            inQueInfo->chInfo[i].pitch[0]   =
                       MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_WIDTH * 2;
            inQueInfo->chInfo[i].pitch[1]   = 0;
            inQueInfo->chInfo[i].pitch[2]   = 0;
        }
    }
    
    static Void MultiCh_copyIpcFramesOutInQueInfo(System_LinkQueInfo *dstInQueInfo, System_LinkQueInfo *srcInQueInfo)
    {
        Int i, j;
    
        dstInQueInfo->numCh = srcInQueInfo->numCh;
        for (i = 0; i < dstInQueInfo->numCh; i++)
        {
            dstInQueInfo->chInfo[i].bufType    = srcInQueInfo->chInfo[i].bufType;
            dstInQueInfo->chInfo[i].dataFormat = srcInQueInfo->chInfo[i].dataFormat;
            dstInQueInfo->chInfo[i].memType    = srcInQueInfo->chInfo[i].memType;
            dstInQueInfo->chInfo[i].scanFormat = srcInQueInfo->chInfo[i].scanFormat;
            dstInQueInfo->chInfo[i].startX     = srcInQueInfo->chInfo[i].startX;
            dstInQueInfo->chInfo[i].startY     = srcInQueInfo->chInfo[i].startY;
            dstInQueInfo->chInfo[i].width      = srcInQueInfo->chInfo[i].width;
            dstInQueInfo->chInfo[i].height     = srcInQueInfo->chInfo[i].height;
            for (j = 0; j < SYSTEM_MAX_PLANES; j++)
            {
                dstInQueInfo->chInfo[i].pitch[j]   = srcInQueInfo->chInfo[i].pitch[j];
            }
        }
    }
    
    static
    Void mulich_vdec_vdis_set_avsync_vidque_prm(Avsync_SynchConfigParams *queCfg,
                                                Int chnum,
                                                UInt32 avsStartChNum,
                                                UInt32 avsEndChNum,
                                                VDIS_DEV vdDevId)
    {
        queCfg->chNum = chnum;
        queCfg->audioPresent = FALSE;
        if ((queCfg->chNum >= avsStartChNum)
            &&
            (queCfg->chNum <= avsEndChNum)
            &&
            (gVsysModuleContext.vsysConfig.enableAVsync))
        {
            queCfg->avsyncEnable = TRUE;
        }
        else
        {
            queCfg->avsyncEnable = FALSE;
        }
        queCfg->clkAdjustPolicy.refClkType = AVSYNC_REFCLKADJUST_NONE;
        queCfg->clkAdjustPolicy.clkAdjustLead = AVSYNC_VIDEO_TIMEBASESHIFT_MAX_LEAD_MS;
        queCfg->clkAdjustPolicy.clkAdjustLag  = AVSYNC_VIDEO_TIMEBASESHIFT_MAX_LAG_MS;
        queCfg->vidSynchPolicy.maxReplayLead  = AVSYNC_VIDEO_FUTURE_FRAME_DROP_THRESHOLD_MS;
        queCfg->vidSynchPolicy.playMaxLag  = 180;
        queCfg->vidSynchPolicy.playMaxLead = 0;
        queCfg->vidSynchPolicy.doMarginScaling = FALSE;
        queCfg->playTimerStartTimeout = 0;
        queCfg->playStartMode = AVSYNC_PLAYBACK_START_MODE_WAITSYNCH;
        queCfg->ptsInitMode   = AVSYNC_PTS_INIT_MODE_APP;
    }
    
    static
    Void mulich_vdec_vdis_set_avsync_prm(AvsyncLink_LinkSynchConfigParams *avsyncPrm,
                                         UInt32 swMsIdx,
                                         VDIS_DEV vdDevId)
    {
        Int i;
        Int32 status;
    
        Vdis_getAvsyncConfig(vdDevId,avsyncPrm);
        avsyncPrm->displayLinkID        = Vdis_getDisplayId(vdDevId);
        avsyncPrm->videoSynchLinkID = gVdisModuleContext.swMsId[swMsIdx];
        avsyncPrm->numCh            = gVdecModuleContext.vdecConfig.numChn;
        avsyncPrm->syncMasterChnum =  AVSYNC_INVALID_CHNUM;
        for (i = 0; i < avsyncPrm->numCh;i++)
        {
            mulich_vdec_vdis_set_avsync_vidque_prm(&avsyncPrm->queCfg[i],
                                                   i,
                                                   0,
                                                   (0 + gVdecModuleContext.vdecConfig.numChn),
                                                   vdDevId);
        }
        if (0 == swMsIdx)
        {
            Vdis_setAvsyncConfig(VDIS_DEV_HDMI,avsyncPrm);
        }
        else
        {
            Vdis_setAvsyncConfig(VDIS_DEV_SD,avsyncPrm);
        }
    
        status = Avsync_configSyncConfigInfo(avsyncPrm);
        OSA_assert(status == 0);
    }
    
    Void MultiCh_createVdecVdis()
    {
        IpcBitsOutLinkHLOS_CreateParams   ipcBitsOutHostPrm;
        IpcBitsInLinkRTOS_CreateParams    ipcBitsInVideoPrm;
        DecLink_CreateParams        decPrm;
        IpcLink_CreateParams        ipcOutVideoPrm;
        IpcLink_CreateParams        ipcInVpssPrm;
        DupLink_CreateParams        dupPrm;
        static SwMsLink_CreateParams       swMsPrm[VDIS_DEV_MAX];
        DisplayLink_CreateParams    displayPrm[VDIS_DEV_MAX];
        IpcFramesOutLinkRTOS_CreateParams  ipcFramesOutVideoToHostPrm;
        IpcFramesInLinkHLOS_CreateParams   ipcFramesInHostFromVideoPrm;
        IpcFramesOutLinkHLOS_CreateParams  ipcFramesOutHostPrm;
        IpcFramesInLinkRTOS_CreateParams   ipcFramesInVpssFromHostPrm;
        MergeLink_CreateParams             mergePrm;
        MpSclrLink_CreateParams            mpSclrPrm;
    
        UInt32 i;
        UInt32 enableGrpx;
        Bool tilerEnable;
        Bool enableVideoFrameImport;
        Bool enableVideoFrameExport;
    
        MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcInVpssPrm);
        MULTICH_INIT_STRUCT(IpcLink_CreateParams,ipcOutVideoPrm);
        MULTICH_INIT_STRUCT(IpcBitsOutLinkHLOS_CreateParams,ipcBitsOutHostPrm);
        MULTICH_INIT_STRUCT(IpcBitsInLinkRTOS_CreateParams,ipcBitsInVideoPrm);
        MULTICH_INIT_STRUCT(DecLink_CreateParams, decPrm);
        MULTICH_INIT_STRUCT(IpcFramesOutLinkRTOS_CreateParams ,ipcFramesOutVideoToHostPrm);
        MULTICH_INIT_STRUCT(IpcFramesInLinkHLOS_CreateParams  ,ipcFramesInHostFromVideoPrm);
        MULTICH_INIT_STRUCT(IpcFramesOutLinkHLOS_CreateParams ,ipcFramesOutHostPrm);
        MULTICH_INIT_STRUCT(IpcFramesInLinkRTOS_CreateParams  ,ipcFramesInVpssFromHostPrm);
        for (i = 0; i < VDIS_DEV_MAX;i++)
        {
            MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);
            MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swMsPrm[i]);
        }
    
        MULTICH_INIT_STRUCT(MpSclrLink_CreateParams, mpSclrPrm);
    
        MultiCh_detectBoard();
    
        System_linkControl(
            SYSTEM_LINK_ID_M3VPSS,
            SYSTEM_M3VPSS_CMD_RESET_VIDEO_DEVICES,
            NULL,
            0,
            TRUE
            );
    
        System_linkControl(
            SYSTEM_LINK_ID_M3VIDEO,
            SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
            &systemVid_encDecIvaChMapTbl,
            sizeof(SystemVideo_Ivahd2ChMap_Tbl),
            TRUE
        );
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
        enableGrpx   = FALSE;
    #else
        enableGrpx   = TRUE;
    #endif
    
    #if ENABLE_STATIC_CHANNELS_IN_TILED_MODE
        tilerEnable  = TRUE;
    #else
        tilerEnable  = FALSE;
    #endif
    
        if (tilerEnable == FALSE)
        {
            /* Disable tiler allocator for this usecase
             * for that tiler memory can be reused for
             * non-tiled allocation
             */
            SystemTiler_disableAllocator();
        }
    
    #if !ENABLE_VIDEO_FRAME_IMPORT
        enableVideoFrameImport = FALSE;
        enableVideoFrameExport = FALSE;
    #else
        enableVideoFrameImport = TRUE;
        enableVideoFrameExport = TRUE;
    #endif
    
        gVdecModuleContext.ipcBitsOutHLOSId = SYSTEM_HOST_LINK_ID_IPC_BITS_OUT_0;
        gVdecModuleContext.ipcBitsInRTOSId  = SYSTEM_VIDEO_LINK_ID_IPC_BITS_IN_0;
        gVdecModuleContext.decId            = SYSTEM_LINK_ID_VDEC_0;
    
        if (!enableVideoFrameImport)
        {
            gMultiCh_VdecVdisObj.ipcOutVideoId  = SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0;
            gMultiCh_VdecVdisObj.ipcInVpssId    = SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0;
        }
        else
        {
            gMultiCh_VdecVdisObj.ipcOutVideoId  = SYSTEM_LINK_ID_INVALID;
            gMultiCh_VdecVdisObj.ipcInVpssId    = SYSTEM_LINK_ID_INVALID;
        }
        gMultiCh_VdecVdisObj.dupId          = SYSTEM_VPSS_LINK_ID_DUP_0;
        gMultiCh_VdecVdisObj.mpSclrId       = SYSTEM_LINK_ID_MP_SCLR_INST_0;
        gVdisModuleContext.mpSclrId         = SYSTEM_LINK_ID_MP_SCLR_INST_0;
        gVdisModuleContext.swMsId[0]        = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    
        gVdisModuleContext.displayId[0]     = SYSTEM_LINK_ID_DISPLAY_0; // ON AND OFF CHIP HDMI
    
        if (gVsysModuleContext.vsysConfig.numDisplays > 1)
        {
            gVdisModuleContext.swMsId[1]        = SYSTEM_LINK_ID_SW_MS_MULTI_INST_1;
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
            gVdisModuleContext.displayId[1]     = SYSTEM_LINK_ID_DISPLAY_2; // SDTV
    #else
            gVdisModuleContext.displayId[1]     = SYSTEM_LINK_ID_DISPLAY_1; // OFF CHIP HDMI
    #endif
        }
    
        if (enableVideoFrameImport)
        {
            gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId  = SYSTEM_VIDEO_LINK_ID_IPC_FRAMES_OUT_0;
            gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId = SYSTEM_HOST_LINK_ID_IPC_FRAMES_IN_0;
        }
    
        if (enableVideoFrameExport)
        {
            if (!enableVideoFrameImport)
            {
                gMultiCh_VdecVdisObj.mergeId                 = SYSTEM_VPSS_LINK_ID_MERGE_0;
            }
            else
            {
                gMultiCh_VdecVdisObj.mergeId                 = SYSTEM_LINK_ID_INVALID;
            }
            gVdisModuleContext.ipcFramesOutHostId        = SYSTEM_HOST_LINK_ID_IPC_FRAMES_OUT_0;
            gVdisModuleContext.ipcFramesInVpssFromHostId = SYSTEM_VPSS_LINK_ID_IPC_FRAMES_IN_0;
        }
    
        if(enableGrpx)
        {
            // GRPX is enabled in Vdis_start() based on the link ID set here
            gVdisModuleContext.grpxId[0]    = SYSTEM_LINK_ID_GRPX_0;
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
            gVdisModuleContext.grpxId[1]    = SYSTEM_LINK_ID_INVALID;
    #else
            gVdisModuleContext.grpxId[1]    = SYSTEM_LINK_ID_GRPX_1;
    #endif
        }
    
    
        ipcBitsOutHostPrm.baseCreateParams.outQueParams[0].nextLink= gVdecModuleContext.ipcBitsInRTOSId;
        ipcBitsOutHostPrm.baseCreateParams.notifyNextLink       = TRUE;
        ipcBitsOutHostPrm.baseCreateParams.notifyPrevLink       = FALSE;
        ipcBitsOutHostPrm.baseCreateParams.noNotifyMode         = FALSE;
        ipcBitsOutHostPrm.baseCreateParams.numOutQue            = 1;
        ipcBitsOutHostPrm.inQueInfo.numCh                       = gVdecModuleContext.vdecConfig.numChn;
        ipcBitsOutHostPrm.bufPoolPerCh                          = TRUE;
    
        for (i=0; i<ipcBitsOutHostPrm.inQueInfo.numCh; i++)
        {
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].width =
                gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoWidth;
    
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].height =
                gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoHeight;
    
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =
                SYSTEM_SF_PROGRESSIVE;
    
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].bufType        = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].codingformat   = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].dataFormat     = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].memType        = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].startX         = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].startY         = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[0]       = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[1]       = 0; // NOT USED
            ipcBitsOutHostPrm.inQueInfo.chInfo[i].pitch[2]       = 0; // NOT USED
            ipcBitsOutHostPrm.numBufPerCh[i] = 6;
        }
    
        ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkId    = gVdecModuleContext.ipcBitsOutHLOSId;
        ipcBitsInVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
        ipcBitsInVideoPrm.baseCreateParams.outQueParams[0].nextLink  = gVdecModuleContext.decId;
        ipcBitsInVideoPrm.baseCreateParams.noNotifyMode              = FALSE;
        ipcBitsInVideoPrm.baseCreateParams.notifyNextLink            = TRUE;
        ipcBitsInVideoPrm.baseCreateParams.notifyPrevLink            = TRUE;
        ipcBitsInVideoPrm.baseCreateParams.numOutQue                 = 1;
    
        for (i=0; i<ipcBitsOutHostPrm.inQueInfo.numCh; i++)
        {
            if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_H264)
                decPrm.chCreateParams[i].format                 = IVIDEO_H264HP;
            else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MPEG4)
                decPrm.chCreateParams[i].format                 = IVIDEO_MPEG4ASP;
            else if(gVdecModuleContext.vdecConfig.decChannelParams[i].isCodec == VDEC_CHN_MJPEG)
                decPrm.chCreateParams[i].format                 = IVIDEO_MJPEG;
    
            decPrm.chCreateParams[i].numBufPerCh
                             = gVdecModuleContext.vdecConfig.decChannelParams[i].numBufPerCh;
            decPrm.chCreateParams[i].profile                = IH264VDEC_PROFILE_ANY;
            decPrm.chCreateParams[i].displayDelay
                             = gVdecModuleContext.vdecConfig.decChannelParams[i].displayDelay;
            decPrm.chCreateParams[i].dpbBufSizeInFrames = IH264VDEC_DPB_NUMFRAMES_AUTO;
            decPrm.chCreateParams[i].processCallLevel   = VDEC_FRAMELEVELPROCESSCALL;
            //decPrm.chCreateParams[i].processCallLevel   = VDEC_FIELDLEVELPROCESSCALL;
    
            decPrm.chCreateParams[i].targetMaxWidth  =
                ipcBitsOutHostPrm.inQueInfo.chInfo[i].width;
    
            decPrm.chCreateParams[i].targetMaxHeight =
                ipcBitsOutHostPrm.inQueInfo.chInfo[i].height;
    
            decPrm.chCreateParams[i].defaultDynamicParams.targetFrameRate =
                gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.frameRate;
    
            decPrm.chCreateParams[i].defaultDynamicParams.targetBitRate =
                gVdecModuleContext.vdecConfig.decChannelParams[i].dynamicParam.targetBitRate;
            decPrm.chCreateParams[i].tilerEnable = tilerEnable;
    
    #if ENABLE_STATIC_CHANNELS_IN_TILED_MODE
            if (i >= NUM_STATIC_CHANNELS)
                decPrm.chCreateParams[i].tilerEnable = FALSE;
    #endif
        }
    
        decPrm.inQueParams.prevLinkId       = gVdecModuleContext.ipcBitsInRTOSId;
        decPrm.inQueParams.prevLinkQueId    = 0;
    
        if (enableVideoFrameImport)
        {
            decPrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId;
    
            ipcFramesOutVideoToHostPrm.baseCreateParams.noNotifyMode = FALSE;
            ipcFramesOutVideoToHostPrm.baseCreateParams.notifyNextLink = TRUE;
            ipcFramesOutVideoToHostPrm.baseCreateParams.notifyPrevLink = TRUE;
            ipcFramesOutVideoToHostPrm.baseCreateParams.inQueParams.prevLinkId = gVdecModuleContext.decId;
            ipcFramesOutVideoToHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
            ipcFramesOutVideoToHostPrm.baseCreateParams.numOutQue = 1;
            ipcFramesOutVideoToHostPrm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId;
    
            ipcFramesInHostFromVideoPrm.baseCreateParams.noNotifyMode = FALSE;
            ipcFramesInHostFromVideoPrm.baseCreateParams.notifyNextLink = FALSE;
            ipcFramesInHostFromVideoPrm.baseCreateParams.notifyPrevLink = TRUE;
            ipcFramesInHostFromVideoPrm.baseCreateParams.inQueParams.prevLinkId = gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId;
            ipcFramesInHostFromVideoPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
            ipcFramesInHostFromVideoPrm.baseCreateParams.numOutQue = 1;
            ipcFramesInHostFromVideoPrm.baseCreateParams.outQueParams[0].nextLink = SYSTEM_LINK_ID_INVALID;
            ipcFramesInHostFromVideoPrm.exportOnlyPhyAddr = TRUE;
        }
        else
        {
            decPrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.ipcOutVideoId;
    
            ipcOutVideoPrm.inQueParams.prevLinkId    = gVdecModuleContext.decId;
            ipcOutVideoPrm.inQueParams.prevLinkQueId = 0;
            ipcOutVideoPrm.outQueParams[0].nextLink     = gMultiCh_VdecVdisObj.ipcInVpssId;
            ipcOutVideoPrm.notifyNextLink            = TRUE;
            ipcOutVideoPrm.notifyPrevLink            = TRUE;
            ipcOutVideoPrm.numOutQue                 = 1;
    
            ipcInVpssPrm.inQueParams.prevLinkId    = gMultiCh_VdecVdisObj.ipcOutVideoId;
            ipcInVpssPrm.inQueParams.prevLinkQueId = 0;
            ipcInVpssPrm.notifyNextLink            = TRUE;
            ipcInVpssPrm.notifyPrevLink            = TRUE;
            ipcInVpssPrm.numOutQue                 = 1;
        }
    
        if (enableVideoFrameExport)
        {
            ipcFramesOutHostPrm.baseCreateParams.noNotifyMode = FALSE;
            ipcFramesOutHostPrm.baseCreateParams.notifyNextLink = TRUE;
            ipcFramesOutHostPrm.baseCreateParams.notifyPrevLink = FALSE;
            ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkId = SYSTEM_LINK_ID_INVALID;
            ipcFramesOutHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
            ipcFramesOutHostPrm.baseCreateParams.numOutQue = 1;
            ipcFramesOutHostPrm.baseCreateParams.outQueParams[0].nextLink = gVdisModuleContext.ipcFramesInVpssFromHostId;
            if (!enableVideoFrameImport)
            {
                MultiCh_setIpcFramesOutInQueInfo(&ipcFramesOutHostPrm.inQueInfo);
            }
    
            ipcFramesInVpssFromHostPrm.baseCreateParams.noNotifyMode = FALSE;
            ipcFramesInVpssFromHostPrm.baseCreateParams.notifyNextLink = TRUE;
            ipcFramesInVpssFromHostPrm.baseCreateParams.notifyPrevLink = TRUE;
            ipcFramesInVpssFromHostPrm.baseCreateParams.inQueParams.prevLinkId = gVdisModuleContext.ipcFramesOutHostId;
            ipcFramesInVpssFromHostPrm.baseCreateParams.inQueParams.prevLinkQueId = 0;
            ipcFramesInVpssFromHostPrm.baseCreateParams.numOutQue = 1;
            if (!enableVideoFrameImport)
            {
                ipcFramesInVpssFromHostPrm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.mergeId;
    
    
                ipcInVpssPrm.outQueParams[0].nextLink     = gMultiCh_VdecVdisObj.mergeId;
    
                mergePrm.numInQue                     = 2;
                mergePrm.inQueParams[0].prevLinkId    = gMultiCh_VdecVdisObj.ipcInVpssId;
                mergePrm.inQueParams[0].prevLinkQueId = 0;
                mergePrm.inQueParams[1].prevLinkId    = gVdisModuleContext.ipcFramesInVpssFromHostId;
                mergePrm.inQueParams[1].prevLinkQueId = 0;
    
                mergePrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.mpSclrId;
                mergePrm.notifyNextLink               = TRUE;
                mpSclrPrm.inQueParams.prevLinkId      = gMultiCh_VdecVdisObj.mergeId;
            }
            else
            {
                ipcFramesInVpssFromHostPrm.baseCreateParams.outQueParams[0].nextLink = gMultiCh_VdecVdisObj.mpSclrId;
                mpSclrPrm.inQueParams.prevLinkId      = gVdisModuleContext.ipcFramesInVpssFromHostId;
            }
        }
        else
        {
            mpSclrPrm.inQueParams.prevLinkId        = gMultiCh_VdecVdisObj.ipcInVpssId;
            ipcInVpssPrm.outQueParams[0].nextLink   = gMultiCh_VdecVdisObj.mpSclrId;
    
        }
    
        mpSclrPrm.pathId = MP_SCLR_LINK_SC5;
        mpSclrPrm.numCh = 4;
        mpSclrPrm.enableLineSkip = FALSE;
    
        mpSclrPrm.outQueParams.nextLink       = gMultiCh_VdecVdisObj.dupId;
        dupPrm.inQueParams.prevLinkId         = gMultiCh_VdecVdisObj.mpSclrId;
    
        dupPrm.inQueParams.prevLinkQueId      = 0;
        dupPrm.numOutQue                      = gVsysModuleContext.vsysConfig.numDisplays;
        dupPrm.outQueParams[0].nextLink       = gVdisModuleContext.swMsId[0];
        dupPrm.outQueParams[1].nextLink       = gVdisModuleContext.swMsId[1];
        dupPrm.notifyNextLink                 = TRUE;
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
    
        swMsPrm[0].numSwMsInst = 1;
        swMsPrm[0].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI;
    
        swMsPrm[0].swMsInstStartWin[0]  = 0;
        swMsPrm[0].swMsInstStartWin[1]  = 10;
    
        swMsPrm[1].numSwMsInst = 1;
        swMsPrm[1].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;
    
        swMsPrm[1].swMsInstStartWin[0]  = 0;
        swMsPrm[1].swMsInstStartWin[1]  = 10;
    
        swMsPrm[0].enableProcessTieWithDisplay = TRUE;
        swMsPrm[1].enableProcessTieWithDisplay = FALSE;
    
    #else
        swMsPrm[0].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_VIP1_SC;
        swMsPrm[0].swMsInstId[1]        = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;
    
        swMsPrm[1].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI;
        swMsPrm[1].swMsInstId[1]        = SYSTEM_SW_MS_SC_INST_SC5;
    
        swMsPrm[0].numSwMsInst          = 2;
    
        swMsPrm[0].swMsInstStartWin[0]  = 0;
        swMsPrm[0].swMsInstStartWin[1]  = 4;
    
        swMsPrm[1].numSwMsInst          = swMsPrm[0].numSwMsInst;
        swMsPrm[1].swMsInstStartWin[0]  = swMsPrm[0].swMsInstStartWin[0];
        swMsPrm[1].swMsInstStartWin[1]  = swMsPrm[0].swMsInstStartWin[1];
    
        swMsPrm[0].enableProcessTieWithDisplay = TRUE;
        swMsPrm[1].enableProcessTieWithDisplay = TRUE;
    
    #endif
        for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
        {
            VDIS_DEV vdDevId = VDIS_DEV_HDMI;
    
            swMsPrm[i].inQueParams.prevLinkId     = gMultiCh_VdecVdisObj.dupId;
            swMsPrm[i].inQueParams.prevLinkQueId  = i;
            swMsPrm[i].outQueParams.nextLink      = gVdisModuleContext.displayId[i];
            swMsPrm[i].numOutBuf                 = MULTICH_NUM_SWMS_MAX_BUFFERS;
    
            /* Disable inQue drop at SwMs as input may arrive very fast in VDEC->VDIS use case */
            swMsPrm[i].maxInputQueLen             = SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN;
            if (i == 0)
            {
                vdDevId = VDIS_DEV_HDMI;
                swMsPrm[i].maxOutRes              = VSYS_STD_1080P_60;
                swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
            }
            else if (i == 1)
            {
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
                vdDevId = VDIS_DEV_SD;
                swMsPrm[i].maxOutRes              = VSYS_STD_PAL;
                swMsPrm[i].outQueParams.nextLink  = SYSTEM_LINK_ID_DISPLAY_2;
                swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    
    #else
                vdDevId = VDIS_DEV_DVO2;
                swMsPrm[i].maxOutRes              = VSYS_STD_1080P_60;
                swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;
    #endif
            }
            /* low cost line skip mode of scaling can be used, when tiler is off */
            if(tilerEnable)
                swMsPrm[i].lineSkipMode           = FALSE;
            else
                swMsPrm[i].lineSkipMode           = TRUE;
    
            swMsPrm[i].enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;
    
            MultiCh_swMsGetDefaultLayoutPrm(vdDevId, &swMsPrm[i], FALSE);    /* both from 0-16 chnl */
    
            displayPrm[i].inQueParams[0].prevLinkId    = gVdisModuleContext.swMsId[i];
            displayPrm[i].inQueParams[0].prevLinkQueId = 0;
            displayPrm[i].displayRes                = swMsPrm[i].initOutRes;
            if (i == 1)
    #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
                            displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    #else
                            displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;
    #endif
            mulich_vdec_vdis_set_avsync_prm(&gMultiCh_VdecVdisObj.avsyncCfg[i],i,vdDevId);
        }
    
    
        System_linkCreate(gVdecModuleContext.ipcBitsOutHLOSId,&ipcBitsOutHostPrm,sizeof(ipcBitsOutHostPrm));
        System_linkCreate(gVdecModuleContext.ipcBitsInRTOSId,&ipcBitsInVideoPrm,sizeof(ipcBitsInVideoPrm));
        System_linkCreate(gVdecModuleContext.decId, &decPrm, sizeof(decPrm));
    
        if (enableVideoFrameImport)
        {
            System_linkCreate(gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId,  &ipcFramesOutVideoToHostPrm,  sizeof(ipcFramesOutVideoToHostPrm));
            System_linkCreate(gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId, &ipcFramesInHostFromVideoPrm, sizeof(ipcFramesInHostFromVideoPrm));
        }
        else
        {
            System_linkCreate(gMultiCh_VdecVdisObj.ipcOutVideoId, &ipcOutVideoPrm, sizeof(ipcOutVideoPrm));
            System_linkCreate(gMultiCh_VdecVdisObj.ipcInVpssId  , &ipcInVpssPrm, sizeof(ipcInVpssPrm));
        }
    
        if (enableVideoFrameExport)
        {
            if (enableVideoFrameImport)
            {
                System_LinkInfo linkInfo;
                System_linkGetInfo(gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId, &linkInfo);
                MultiCh_copyIpcFramesOutInQueInfo(&ipcFramesOutHostPrm.inQueInfo, &linkInfo.queInfo[0]);
            }
            System_linkCreate(gVdisModuleContext.ipcFramesOutHostId     , &ipcFramesOutHostPrm    , sizeof(ipcFramesOutHostPrm));
            System_linkCreate(gVdisModuleContext.ipcFramesInVpssFromHostId     , &ipcFramesInVpssFromHostPrm    , sizeof(ipcFramesInVpssFromHostPrm));
            if (!enableVideoFrameImport)
            {
                System_linkCreate(gMultiCh_VdecVdisObj.mergeId,&mergePrm,sizeof(mergePrm));
            }
        }
    
        System_linkCreate(gMultiCh_VdecVdisObj.mpSclrId, &mpSclrPrm, sizeof(mpSclrPrm));
        System_linkCreate(gMultiCh_VdecVdisObj.dupId     , &dupPrm    , sizeof(dupPrm));
    
        for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
            System_linkCreate(gVdisModuleContext.swMsId[i]  , &swMsPrm[i], sizeof(swMsPrm[i]));
    
        for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
            System_linkCreate(gVdisModuleContext.displayId[i], &displayPrm[i], sizeof(displayPrm[i]));
    
        MultiCh_memPrintHeapStatus();
        gMultiCh_VdecVdisObj.enableVideoFrameImport = enableVideoFrameImport;
        gMultiCh_VdecVdisObj.enableVideoFrameExport = enableVideoFrameExport;
        {
            MultiCh_setDec2DispMap(VDIS_DEV_HDMI,gVdecModuleContext.vdecConfig.numChn,0,0);
            #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
            MultiCh_setDec2DispMap(VDIS_DEV_SD,gVdecModuleContext.vdecConfig.numChn,0,0);
            #else
            MultiCh_setDec2DispMap(VDIS_DEV_HDCOMP,gVdecModuleContext.vdecConfig.numChn,0,0);
            #endif
       }
    
    }
    
    Void MultiCh_deleteVdecVdis()
    {
        Bool tilerEnable;
    
    #if ENABLE_STATIC_CHANNELS_IN_TILED_MODE
        tilerEnable  = TRUE;
    #else
        tilerEnable  = FALSE;
    #endif
    
        /* delete can be done in any order */
        Vdec_delete();
        Vdis_delete();
    
        if (gMultiCh_VdecVdisObj.enableVideoFrameImport)
        {
            System_linkDelete(gMultiCh_VdecVdisObj.ipcFramesOutVideoToHostId);
            System_linkDelete(gMultiCh_VdecVdisObj.ipcFramesInHostFromVideoId);
        }
    
        if (gMultiCh_VdecVdisObj.enableVideoFrameExport)
        {
            if (!gMultiCh_VdecVdisObj.enableVideoFrameImport)
            {
                System_linkDelete(gMultiCh_VdecVdisObj.mergeId);
            }
        }
    
        System_linkDelete(gMultiCh_VdecVdisObj.mpSclrId);
        System_linkDelete(gMultiCh_VdecVdisObj.dupId);
        if (!gMultiCh_VdecVdisObj.enableVideoFrameImport)
        {
            System_linkDelete(gMultiCh_VdecVdisObj.ipcOutVideoId );
            System_linkDelete(gMultiCh_VdecVdisObj.ipcInVpssId );
        }
    
        /* Print the HWI, SWI and all tasks load */
        /* Reset the accumulated timer ticks */
        MultiCh_prfLoadCalcEnable(FALSE, TRUE, FALSE);
    
    
        if (tilerEnable == FALSE)
        {
            /* Disable tiler allocator for this usecase
             * for that tiler memory can be reused for
             * non-tiled allocation
             */
            SystemTiler_enableAllocator();
        }
    }
    

  • The frame rates are the same.

     [m3vpss ]  
     [m3vpss ]  *** [SWMS0] Mosaic Statistics ***
     [m3vpss ]  
     [m3vpss ]  Elasped Time: 33 secs
     [m3vpss ]  
     [m3vpss ]  Output Request FPS   : 60 fps (1991 frames)
     [m3vpss ]  Output Actual  FPS   : 60 fps (1991 frames)
     [m3vpss ]  Output Drop    FPS   : 0 fps (0 frames)
     [m3vpss ]  Output Reject  FPS   : 0 fps (0 frames)
     [m3vpss ]  Scaling Internal     : 16 ms
     [m3vpss ]  Scaling Internal min : 13 ms
     [m3vpss ]  Scaling Internal max : 20 ms
     [m3vpss ]  
     [m3vpss ]  Win | Window Repeat Drop Recv Que  FID Invlid Acc Event          Invalid   Que Reject Reject Latency   OutBufCopy InBufCopy
     [m3vpss ]  Num | FPS    FPS    FPS  FPS  FPS  FPS        Count (Max/Min)    CH Frames Frames     Frames Min / Max FPS        FPS      
     [m3vpss ]  ---------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    1 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    2 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    3 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    4 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    5 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    6 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    7 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS0] Mosaic Parameters ***
     [m3vpss ]  
     [m3vpss ]  Output FPS: 60
     [m3vpss ]  
     [m3vpss ]  Win | Ch  | Input      | Input          | Input         | Input       | Output     |  Output         | Output        | Output      | Low Cost | SWMS | Data  | Blank |
     [m3vpss ]  Num | Num | Start X, Y | Width x Height | Pitch Y / C   | Memory Type | Start X, Y |  Width x Height | Pitch Y / C   | Memory Type | ON / OFF | Inst | Format| Frame |
     [m3vpss ]  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |   0 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |    0,    0 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    1 |   1 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |  768,    0 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    2 |   2 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |    0,  540 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    3 |   3 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |  768,  540 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    4 |   4 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,    0 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    5 |   5 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  270 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    6 |   6 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  540 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    7 |   7 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  810 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS1] Mosaic Statistics ***
     [m3vpss ]  
     [m3vpss ]  Elasped Time: 33 secs
     [m3vpss ]  
     [m3vpss ]  Output Request FPS   : 30 fps (995 frames)
     [m3vpss ]  Output Actual  FPS   : 30 fps (995 frames)
     [m3vpss ]  Output Drop    FPS   : 0 fps (0 frames)
     [m3vpss ]  Output Reject  FPS   : 0 fps (0 frames)
     [m3vpss ]  Scaling Internal     : 33 ms
     [m3vpss ]  Scaling Internal min : 33 ms
     [m3vpss ]  Scaling Internal max : 34 ms
     [m3vpss ]  
     [m3vpss ]  Win | Window Repeat Drop Recv Que  FID Invlid Acc Event          Invalid   Que Reject Reject Latency   OutBufCopy InBufCopy
     [m3vpss ]  Num | FPS    FPS    FPS  FPS  FPS  FPS        Count (Max/Min)    CH Frames Frames     Frames Min / Max FPS        FPS      
     [m3vpss ]  ---------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |      0     30    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         30         0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS1] Mosaic Parameters ***
     [m3vpss ]  
     [m3vpss ]  Output FPS: 30
     [m3vpss ]  
     [m3vpss ]  Win | Ch  | Input      | Input          | Input         | Input       | Output     |  Output         | Output        | Output      | Low Cost | SWMS | Data  | Blank |
     [m3vpss ]  Num | Num | Start X, Y | Width x Height | Pitch Y / C   | Memory Type | Start X, Y |  Width x Height | Pitch Y / C   | Memory Type | ON / OFF | Inst | Format| Frame |
     [m3vpss ]  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |   0 |    0,    0 |   720 x    480 |   896 /   896 | NON-TILED   |    0,    0 |  1920 x   1080 |  3840 /      0 | NON-TILED   |      OFF |    0 |  420SP |    ON |
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  21065432: DISPLAY: HDDAC(BP0) : 59 fps, Latency (Min / Max) = ( 63 / 70 ), Callback Interval (Min / Max) = ( 16 / 17 ) DropCount:0 DispLatency (Min / Max) = ( 45 / 49 ) !!!
     [m3vpss ]  21065432: DISPLAY: UNDERFLOW COUNT: HDMI(BP0) 1997, HDDAC(BP0) 1999, DVO2(BP1) 1999, SDDAC(SEC1) 1999
     [m3vpss ]  21065432: SYSTEM  : FREE SPACE : System Heap      = 67280 B, Mbx = 10239 msgs)
     [m3vpss ]  21065432: SYSTEM  : FREE SPACE : SR0 Heap         = 9257856 B (8 MB)
     [m3vpss ]  21065432: SYSTEM  : FREE SPACE : Frame Buffer     = 75164544 B (71 MB)
     [m3vpss ]  21065433: SYSTEM  : FREE SPACE : Bitstream Buffer = 321146752 B (306 MB)
     [m3vpss ]  21065433: SYSTEM  : FREE SPACE : Tiler Buffer     = 256 B (0 MB)  - TILER OFF
     [m3vpss ]  21065433: DISPLAY: DVO2(BP1)  : 59 fps, Latency (Min / Max) = ( 83 / 88 ), Callback Interval (Min / Max) = ( 16 / 17 ) DropCount:0 DispLatency (Min / Max) = ( 62 / 66 ) !!!
     [m3video]     21069433: HDVICP-ID:0
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :2 %
     [m3video]          totalWait2Isr :89 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :90 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :98 %
     [m3video]          totalAcq2acqDelay :1 %
     [m3video]          totalElapsedTime in msec :   29549
     [m3video]          numAccessCnt:   13860
     [m3video]         IVA-FPS :     477
     [m3video]         Average time spent per frame in microsec:    1896
     [m3video]     21069434: HDVICP-ID:1
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :2 %
     [m3video]          totalWait2Isr :91 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :91 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :97 %
     [m3video]          totalAcq2acqDelay :2 %
     [m3video]          totalElapsedTime in msec :   29536
     [m3video]          numAccessCnt:   13852
     [m3video]         IVA-FPS :     477
     [m3video]         Average time spent per frame in microsec:    1940
     [m3video]     21069435: HDVICP-ID:2
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :2 %
     [m3video]          totalWait2Isr :90 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :91 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :97 %
     [m3video]          totalAcq2acqDelay :2 %
     [m3video]          totalElapsedTime in msec :   29542
     [m3video]          numAccessCnt:   13856
     [m3video]         IVA-FPS :     477
     [m3video]         Average time spent per frame in microsec:    1918
     [m3video]  
     [m3video]  *** DECODE Statistics ***
     [m3video]  
     [m3video]  Elasped Time           : 35 secs
     [m3video]  
     [m3video]  
     [m3video]  CH  | In Recv In User  Out
     [m3video]  Num | FPS     Skip FPS FPS
     [m3video]  -----------------------------------
     [m3video]    0 |      98        0  99
     [m3video]    1 |      98        0  98
     [m3video]    2 |      98        0  98
     [m3video]    3 |      98        0  98
     [m3video]    4 |      98        0  98
     [m3video]    5 |      98        0  98
     [m3video]    6 |      98        0  99
     [m3video]    7 |      98        0  98
     [m3video]    8 |      98        0  98
     [m3video]    9 |      98        0  99
     [m3video]   10 |      98        0  98
     [m3video]   11 |      98        0  98
     [m3video]  
     [m3video] Multi Channel Decode Average Submit Batch Size
     [m3video] Max Submit Batch Size : 24
     [m3video] IVAHD_0 Average Batch Size : 4
     [m3video] IVAHD_0 Max achieved Batch Size : 4
     [m3video] IVAHD_1 Average Batch Size : 3
     [m3video] IVAHD_1 Max achieved Batch Size : 4
     [m3video] IVAHD_2 Average Batch Size : 3
     [m3video] IVAHD_2 Max achieved Batch Size : 4
     [m3video]  
     [m3video] Multi Channel Decode Batch break Stats
     [m3video] Total Number of Batches created: 3464
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 0 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 99 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video] Total Number of Batches created: 3470
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 0 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 99 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video] Total Number of Batches created: 3463
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 0 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 99 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video]  
     [m3vpss ]  
     [m3vpss ]  *** [MP_SCLR0 ] Statistics ***
     [m3vpss ]  
     [m3vpss ]  Total Frames Received  : 0
     [m3vpss ]  Total Frames Forwarded : 0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  CH  | In Recv In Reject Processed  Latency(DRV) Processed  Rejected
     [m3vpss ]  Num | FPS     FPS       FPS        Min / Max    Frames     Frames  
     [m3vpss ]  -------------------------------------------------------------------
     [m3vpss ]  
     [m3vpss ]  21071440: LOAD: CPU: 8.1% HWI: 2.7%, SWI:1.8%
     [m3vpss ]  
     [m3vpss ]  21071440: LOAD: TSK: DISPLAY0            : 0.6%
     [m3vpss ]  21071440: LOAD: TSK: DISPLAY1            : 0.3%
     [m3vpss ]  21071440: LOAD: TSK: SWMS0               : 1.9%
     [m3vpss ]  21071440: LOAD: TSK: SWMS1               : 0.5%
     [m3vpss ]  21071440: LOAD: TSK: MISC                : 0.3%
     [m3vpss ]  
     [m3video]  
     [m3video]  21071941: LOAD: CPU: 32.6% HWI: 1.6%, SWI:1.2%
     [m3video]  
     [m3video]  21071941: LOAD: TSK: IPC_FRAMES_OUT0     : 4.9%
     [m3video]  21071941: LOAD: TSK: IPC_BITS_IN0        : 1.3%
     [m3video]  21071941: LOAD: TSK: DEC0                : 6.5%
     [m3video]  21071941: LOAD: TSK: DEC_PROCESS_TSK_0   : 8.8%
     [m3video]  21071941: LOAD: TSK: DEC_PROCESS_TSK_1   : 9.7%
     [m3video]  21071941: LOAD: TSK: DEC_PROCESS_TSK_2   : 9.4%
     [m3video]  21071941: LOAD: TSK: MISC                : -10.-8%
     [m3video]  
     [c6xdsp ]  
     [c6xdsp ]  21069846: LOAD: CPU: 0.1% HWI: 0.0%, SWI:0.0%
     [c6xdsp ]  
     [c6xdsp ]  21069846: LOAD: TSK: MISC                : 0.1%
     [c6xdsp ]  

  • I use MultiCh_copyIpcFramesOutInQueInfo to replace MultiCh_setIpcFramesOutInQueInfo.

  •  totalAcq2acqDelay :2 % - This means HDVICP is utilized to maximum. Further improvement in FPS will require enabling Tiler to reduce DDR b/w .FPS has also improved from 83 to 97 per channel and HDVICP total FPS has improved from 401 - 477. Where are you measuring the FPS ?

  • I count the frames before calling the function Vdec_putBitstreamBuffer.  It is strange that the more decoding channels the better performance on decoding, not only on the total fps, but also on the individual fps.  There may be something wrong!  It is important for us to decode less channels with full decoding power.


    12: 0
    68 0 0 | 0 0 0 | 0 0 0 | 0 0 0

    12: 0 3
    78 0 0 | 78 0 0 | 0 0 0 | 0 0 0

    12: 0 3 6
    93 0 0 | 93 0 0 | 93 0 0 | 0 0 0

    12: 0 3 6 9
    125 0 0 | 125 0 0 | 125 0 0 | 125 0 0


    12: 0
    68 0 0 | 0 0 0 | 0 0 0 | 0 0 0

    12: 0 1
    69 69 0 | 0 0 0 | 0 0 0 | 0 0 0

    12: 0 1 2
    70 70 70 | 0 0 0 | 0 0 0 | 0 0 0

    12: 0 1 2 3
    71 71 71 | 71 0 0 | 0 0 0 | 0 0 0

    12: 0 1 2 3 4
    72 72 72 | 72 72 0 | 0 0 0 | 0 0 0

    12: 0 1 2 3 4 5
    75 75 75 | 75 75 75 | 0 0 0 | 0 0 0

    12: 0 1 2 3 4 5 6
    77 77 77 | 77 77 77 | 77 0 0 | 0 0 0

    12: 0 1 2 3 4 5 6 7
    83 83 83 | 83 83 83 | 83 83 0 | 0 0 0

    12: 0 1 2 3 4 5 6 7 8
    93 93 93 | 93 93 93 | 93 93 93 | 0 0 0

    12: 0 1 2 3 4 5 6 7 8 9
    120 150 150 | 120 150 150 | 120 150 150 | 120 0 0

    12: 0 1 2 3 4 5 6 7 8 9 10
    117 117 155 | 117 117 155 | 117 117 155 | 117 117 0

    12: 0 1 2 3 4 5 6 7 8 9 10 11
    117 117 117 | 117 117 117 | 117 117 117 | 117 117 117


  • This looks like issue with demo thread that is feeding data to mcfw. You can confirm by printing Vsys_printDetailedStatistics and checking the acquire2acquireDelay. If it is large number it means HDVICP is idle because no input buffers are present.

    You should also migrate to RDK 4.0 where RingIO is implemented for IpcBitsOut bistream buffers.This enables queuing upto 50 frames per channels so even if application thread has issues you should be able to queue maximum input buffers

  • The totalAcq2acqDelay: 2%.

    12: 0
    68 0 0 | 0 0 0 | 0 0 0 | 0 0 0

    12: 0 3
    78 0 0 | 78 0 0 | 0 0 0 | 0 0 0

    12: 0 3 6
    93 0 0 | 93 0 0 | 93 0 0 | 0 0 0

    12: 0 3 6 9
    125 0 0 | 125 0 0 | 125 0 0 | 125 0 0

    If the decoding power of 4 channels on 1 m3video can up to 125x4 fps, why the decoding power of 1 channel on 1 m3video can not up to 125x1 fps.  There seems be a invisible limitation on the m3video decoding.

  • Pls share the full Vsys_printDetailedStatics log when running 1 channel. Also try modifying

    /dvr_rdk/mcfw/src_bios6/links_m3video/iva_dec/decLink_priv.h

    #define DEC_LINK_PROCESS_DONE_PERIOD_MS      (4)

    to

    #define DEC_LINK_PROCESS_DONE_PERIOD_MS      (1)

     

    and check if there is improvement in FPS.

  • 1. Thanks for your help!!  The performance was improved.

    2. It was improved after applying the patch about notify mode yesterday, but I was not aware of it.  And It was much more better after modify DEC_LINK_PROCESS_DONE_PERIOD_MS.

    3. There is a side effect about the patch of notify mode: there is a segmentation fault while deleting IpcFrameInHost.  If the noNotifyMode of IpcFrameInHost is TRUE, there are no segmentation fault but the performance is down to half of that.

    IpcFrameInHostPrm.baseCreateParams.noNotifyMode = TRUE --> 286 fps:

    IpcFrameInHostPrm.baseCreateParams.noNotifyMode = FALSE --> segmentation fault but 515 fps:

    the log about segmentation fault: (red color: diff)

     [m3video]  98255: DECODE: Stop in progress !!!
     [m3vpss ]  98256: SWMS: Stop in Progress !!!
     [m3video]  98255: DECODE: Stop Done !!!
     [m3vpss ]  98257: SWMS: Stop Done !!!
     [m3vpss ]  98257: SWMS: Stop in Progress !!!
     [m3vpss ]  98257: SWMS: Stop Done !!!
     [m3vpss ]  98257: DISPLAY: Stop in progress !!!
     [m3vpss ]  98302: DISPLAY: Stop Done !!!
     [m3vpss ]  98302: DISPLAY: Stop in progress !!!
     [m3vpss ]  98360: DISPLAY: Stop Done !!!
     [m3video]  99027: DECODE: Stop in progress !!!
     [m3video]  99027: DECODE: Stop Done !!!
     [m3video]  99027: DECODE: Delete in progress !!!
     [m3video] MemoryLeak:STAGE:0    HEAPNUM:0    ALLOC=4264    FREED=2368


     [host]  55524: IPC_BITS_OUT   : Delete in progress !!!


     [host]
    55524: IPCBITSOUT:Link[30000018]:

     [host] RECV:22452    FREE:22451,DROPPED:396187,AVGLATENCY:25858

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:0,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:1,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:2,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:3,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:4,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:5,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:6,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:7,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:8,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:9,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:10,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:11,Size:0x1FA400

     [host]  55545: IPC_BITS_OUT   : Delete Done !!!
     [m3video]  
     [m3video] 99034:ERR::linkID:10000022::channelID:-1::errorCode:-10::FileName:links_m3video/iva_dec/decLink_common.c::linuNum:155::errorCondition:(Utils_queIsFull(&pObj->dupObj.dupQue) == TRUE)
     [m3video]  99034: DECODE: Delete Done !!!


     [host]  55545: IPC_FRAMES_OUT   : Delete in progress !!!


     [host]
    55545: IPCFRAMESOUT:Link[30000013]:

     [host] RECV:0,DROPPED:0,FREED:0,AVGLATENCY:0

     [host]  55546: IPC_FRAMES_OUT   : Delete Done !!!


     [host]
    55552: IPCFRAMESIN:Link[30000016]:

     [host] RECV:22451    FREE:22446,DROPPED:0,AVGLATENCY:2

     [host]  55552: IPC_FRAMES_IN   : Delete in progress !!!
     [m3video] 99034:DECLINK::links_m3video/iva_dec/decLink_tsk.c:[33]::INTERNAL ERROR:-8
     [m3video] 99034: IPCBITSIN:Link[1000001a]:
     [m3video] RECV:22452    FREE:22451,DROPPED:0,AVGLATENCY:11
     [m3video]  99035: IPC_BITS_IN   : Delete in progress !!!
     [m3vpss ] 99056: IPCFRAMESIN:Link[20000016]:
     [m3vpss ] RECV:0    FREE:0,DROPPED:0,AVGLATENCY:0
     [m3vpss ]  99056: IPC_FRAMES_IN   : Delete in progress !!!
     [m3video]  99035: IPC_BITS_IN   : Delete Done !!!
     [m3vpss ]  99057: IPC_FRAMES_IN   : Delete Done !!!
     [m3video] Link create should be first cmd.Received Cmd:24576
     [m3video]  99062: IPC_FRAMES_OUT   : Delete in progress !!!
     [m3vpss ]  99057: SWMS: Frames = 8 (fps = 0) !!!
     [m3vpss ]  99057: SWMS: Delete in progress !!!
     [m3video] 99062: IPCFRAMESOUT:Link[10000013]:
     [m3video] RECV:22451    FORWARD:0,DROPPED:0,AVGLATENCY:0
     [m3video]  99063: PRF : IPC_FRAMES_OUT0 : t: 750 ms, c: 22451, f: 22451, fps: 29934, fpc: 1
     [m3vpss ]  UTILS: DMA: Free'ed CH (TCC) = 58 (58)
     [m3vpss ]  99059: SWMS: Delete Done !!!
     [m3video]  99063: IPC_FRAMES_OUT   : Delete Done !!!
     [m3vpss ]  99060: DISPLAY: Frames = 3192 (fps = 59) !!!
     [m3vpss ]  99060: DISPLAY: Delete in progress !!!
     [m3vpss ]  99060: DISPLAY: Delete Done !!!
     [m3vpss ]  99060: SWMS: Frames = 1 (fps = 0) !!!
     [m3vpss ]  99060: SWMS: Delete in progress !!!
     [m3vpss ]  UTILS: DMA: Free'ed CH (TCC) = 59 (59)
     [m3vpss ]  99062: SWMS: Delete Done !!!
     [m3vpss ]  99062: DISPLAY: Frames = 1597 (fps = 29) !!!
     [m3vpss ]  99062: DISPLAY: Delete in progress !!!
     [m3vpss ]  99062: DISPLAY: Delete Done !!!
    Segmentation fault

    the log of "normal" deleting process: (green color: diff)

     [m3video]  67766: DECODE: Stop in progress !!!
     [m3vpss ]  67768: SWMS: Stop in Progress !!!
     [m3video]  67766: DECODE: Stop Done !!!
     [m3vpss ]  67768: SWMS: Stop Done !!!
     [m3vpss ]  67768: SWMS: Stop in Progress !!!
     [m3vpss ]  67768: SWMS: Stop Done !!!
     [m3vpss ]  67768: DISPLAY: Stop in progress !!!
     [m3vpss ]  67831: DISPLAY: Stop Done !!!
     [m3vpss ]  67831: DISPLAY: Stop in progress !!!
     [m3vpss ]  67891: DISPLAY: Stop Done !!!


     [host]  43523: IPC_BITS_OUT   : Delete in progress !!!


     [host]
    43523: IPCBITSOUT:Link[30000018]:

     [host] RECV:9117    FREE:9112,DROPPED:297880,AVGLATENCY:17682

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:0,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:1,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:2,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:3,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:4,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:5,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:6,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:7,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:8,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:9,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:10,Size:0x1FA400

     [host] IPC_BITSOUT:BitBuffer Free.PoolID:11,Size:0x1FA400

     [host]  43544: IPC_BITS_OUT   : Delete Done !!!
     [m3video]  68057: DECODE: Stop in progress !!!
     [m3video]  68057: DECODE: Stop Done !!!
     [m3video]  68057: DECODE: Delete in progress !!!
     [m3video] MemoryLeak:STAGE:0    HEAPNUM:0    ALLOC=4264    FREED=2368
     [m3video]  
     [m3video] 68065:ERR::linkID:10000022::channelID:-1::errorCode:-10::FileName:links_m3video/iva_dec/decLink_common.c::linuNum:155::errorCondition:(Utils_queIsFull(&pObj->dupObj.dupQue) == TRUE)
     [m3video]  68065: DECODE: Delete Done !!!


     [host]  43545: IPC_FRAMES_OUT   : Delete in progress !!!


     [host]
    43545: IPCFRAMESOUT:Link[30000013]:

     [host] RECV:0,DROPPED:0,FREED:0,AVGLATENCY:0

     [host]  43545: IPC_FRAMES_OUT   : Delete Done !!!


     [host]
    43551: IPCFRAMESIN:Link[30000016]:

     [host] RECV:9112    FREE:9109,DROPPED:0,AVGLATENCY:4

     [host]  43551: IPC_FRAMES_IN   : Delete in progress !!!


     [host]
    43552: IPCFRAMESIN:Link[30000016]:

     [host] Map of Frame buffers...Count = 0,Size = 0

     [host]
    43552: IPCFRAMESIN:Link[30000016]:

     [host] UnMap of Frame buffers...Count = 0,Size = 0

     [host]  43552: IPC_FRAMES_IN   : Delete Done !!!
     [c6xdsp ]  
     [m3video] 68065: IPCBITSIN:Link[1000001a]:
     [m3video] RECV:9117    FREE:9112,DROPPED:0,AVGLATENCY:24
     [m3video]  68065: IPC_BITS_IN   : Delete in progress !!!
     [c6xdsp ]  65505: LOAD: CPU: 0.1% HWI: 0.0%, SWI:0.0%
     [m3video]  68065: IPC_BITS_IN   : Delete Done !!!
     [m3vpss ] 68087: IPCFRAMESIN:Link[20000016]:
     [m3vpss ] RECV:0    FREE:0,DROPPED:0,AVGLATENCY:0
     [m3vpss ]  68087: IPC_FRAMES_IN   : Delete in progress !!!
     [c6xdsp ]  
     [m3video]  68093: IPC_FRAMES_OUT   : Delete in progress !!!
     [m3vpss ]  68087: IPC_FRAMES_IN   : Delete Done !!!
     [m3vpss ]  68088: SWMS: Frames = 8 (fps = 0) !!!
     [m3video] 68093: IPCFRAMESOUT:Link[10000013]:
     [m3video] RECV:9112    FORWARD:0,DROPPED:0,AVGLATENCY:0
     [m3video]  68093: PRF : IPC_FRAMES_OUT0 : t: 282 ms, c: 9112, f: 9112, fps: 32312, fpc: 1
     [m3vpss ]  68088: SWMS: Delete in progress !!!
     [m3vpss ]  UTILS: DMA: Free'ed CH (TCC) = 58 (58)
     [m3video]  68094: IPC_FRAMES_OUT   : Delete Done !!!
     [m3vpss ]  68090: SWMS: Delete Done !!!
     [m3video]  
     [m3vpss ]  68090: DISPLAY: Frames = 2501 (fps = 59) !!!
     [m3video]  68096: LOAD: CPU: 9.9% HWI: 0.9%, SWI:1.2%
     [m3vpss ]  68091: DISPLAY: Delete in progress !!!
     [m3video]  
     [m3vpss ]  68091: DISPLAY: Delete Done !!!
     [m3vpss ]  68091: SWMS: Frames = 1 (fps = 0) !!!
     [m3vpss ]  68091: SWMS: Delete in progress !!!
     [m3vpss ]  UTILS: DMA: Free'ed CH (TCC) = 59 (59)
     [m3vpss ]  68092: SWMS: Delete Done !!!
     [m3vpss ]  68093: DISPLAY: Frames = 1251 (fps = 29) !!!
     [m3vpss ]  68093: DISPLAY: Delete in progress !!!
     [m3vpss ]  68093: DISPLAY: Delete Done !!!
     [m3vpss ]  68095: MP_SCLR: Delete in progress !!!
     [m3vpss ]  68095: MP_SCLR: Scaling task deleted !!!
     [m3vpss ]  68095: MP_SCLR: deleting linkBufQ !!!
     [m3vpss ]  68095: MP_SCLR: Delete Done !!!
     [m3vpss ]  68095: DUP   : Delete Done !!!
     [m3vpss ]  
     [m3vpss ]  68096: LOAD: CPU: 5.6% HWI: 1.8%, SWI:1.1%
     [m3vpss ]  
     43556: SYSTEM: System Common De-Init in progress !!!


     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress...

     [host] OSA_tskDelete:In progress... 43560: SYSTEM: IPC de-init in progress !!!
     [m3vpss ]  68098: DISPLAY: UNDERFLOW COUNT: HDMI(BP0) 620, HDDAC(BP0) 620, DVO2(BP1) 620, SDDAC(SEC1) 621
     43588: SYSTEM: IPC de-init DONE !!!
     43588: SYSTEM: System Common De-Init Done !!!

    4. Vsys_printDetailedStatistics log:

     [m3vpss ]  
     [m3vpss ]  *** [SWMS0] Mosaic Statistics ***
     [m3vpss ]  
     [m3vpss ]  Elasped Time: 31 secs
     [m3vpss ]  
     [m3vpss ]  Output Request FPS   : 60 fps (1885 frames)
     [m3vpss ]  Output Actual  FPS   : 60 fps (1885 frames)
     [m3vpss ]  Output Drop    FPS   : 0 fps (0 frames)
     [m3vpss ]  Output Reject  FPS   : 0 fps (0 frames)
     [m3vpss ]  Scaling Internal     : 16 ms
     [m3vpss ]  Scaling Internal min : 16 ms
     [m3vpss ]  Scaling Internal max : 17 ms
     [m3vpss ]  
     [m3vpss ]  Win | Window Repeat Drop Recv Que  FID Invlid Acc Event          Invalid   Que Reject Reject Latency   OutBufCopy InBufCopy
     [m3vpss ]  Num | FPS    FPS    FPS  FPS  FPS  FPS        Count (Max/Min)    CH Frames Frames     Frames Min / Max FPS        FPS      
     [m3vpss ]  ---------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    1 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    2 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    3 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    4 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    5 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    6 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]    7 |      0     60    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         60         0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS0] Mosaic Parameters ***
     [m3vpss ]  
     [m3vpss ]  Output FPS: 60
     [m3vpss ]  
     [m3vpss ]  Win | Ch  | Input      | Input          | Input         | Input       | Output     |  Output         | Output        | Output      | Low Cost | SWMS | Data  | Blank |
     [m3vpss ]  Num | Num | Start X, Y | Width x Height | Pitch Y / C   | Memory Type | Start X, Y |  Width x Height | Pitch Y / C   | Memory Type | ON / OFF | Inst | Format| Frame |
     [m3vpss ]  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |   0 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |    0,    0 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    1 |   1 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |  768,    0 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    2 |   2 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |    0,  540 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    3 |   3 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   |  768,  540 |   768 x    540 |  3840 /      0 | NON-TILED   |       ON |    0 |  420SP |    ON |
     [m3vpss ]    4 |   4 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,    0 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    5 |   5 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  270 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    6 |   6 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  540 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]    7 |   7 |    0,    0 |   720 x    240 |  1792 /  1792 | NON-TILED   | 1536,  810 |   384 x    270 |  3840 /      0 | NON-TILED   |       ON |    1 |  420SP |    ON |
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS1] Mosaic Statistics ***
     [m3vpss ]  
     [m3vpss ]  Elasped Time: 31 secs
     [m3vpss ]  
     [m3vpss ]  Output Request FPS   : 30 fps (942 frames)
     [m3vpss ]  Output Actual  FPS   : 30 fps (942 frames)
     [m3vpss ]  Output Drop    FPS   : 0 fps (0 frames)
     [m3vpss ]  Output Reject  FPS   : 0 fps (0 frames)
     [m3vpss ]  Scaling Internal     : 33 ms
     [m3vpss ]  Scaling Internal min : 33 ms
     [m3vpss ]  Scaling Internal max : 37 ms
     [m3vpss ]  
     [m3vpss ]  Win | Window Repeat Drop Recv Que  FID Invlid Acc Event          Invalid   Que Reject Reject Latency   OutBufCopy InBufCopy
     [m3vpss ]  Num | FPS    FPS    FPS  FPS  FPS  FPS        Count (Max/Min)    CH Frames Frames     Frames Min / Max FPS        FPS      
     [m3vpss ]  ---------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |      0     30    0    0    0          0        0 (  0/255)         0          0      0 65535 /   0         30         0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  *** [SWMS1] Mosaic Parameters ***
     [m3vpss ]  
     [m3vpss ]  Output FPS: 30
     [m3vpss ]  
     [m3vpss ]  Win | Ch  | Input      | Input          | Input         | Input       | Output     |  Output         | Output        | Output      | Low Cost | SWMS | Data  | Blank |
     [m3vpss ]  Num | Num | Start X, Y | Width x Height | Pitch Y / C   | Memory Type | Start X, Y |  Width x Height | Pitch Y / C   | Memory Type | ON / OFF | Inst | Format| Frame |
     [m3vpss ]  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
     [m3vpss ]    0 |   0 |    0,    0 |   720 x    480 |   896 /   896 | NON-TILED   |    0,    0 |  1920 x   1080 |  3840 /      0 | NON-TILED   |      OFF |    0 |  420SP |    ON |
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  76451: DISPLAY: HDDAC(BP0) : 59 fps, Latency (Min / Max) = ( 66 / 67 ), Callback Interval (Min / Max) = ( 16 / 17 ) DropCount:0 DispLatency (Min / Max) = ( 49 / 49 ) !!!
     [m3vpss ]  76451: DISPLAY: UNDERFLOW COUNT: HDMI(BP0) 1890, HDDAC(BP0) 1892, DVO2(BP1) 1891, SDDAC(SEC1) 1893
     [m3vpss ]  76451: SYSTEM  : FREE SPACE : System Heap      = 67280 B, Mbx = 10239 msgs)
     [m3vpss ]  76451: SYSTEM  : FREE SPACE : SR0 Heap         = 9270528 B (8 MB)
     [m3vpss ]  76451: SYSTEM  : FREE SPACE : Frame Buffer     = 75164544 B (71 MB)
     [m3vpss ]  76451: SYSTEM  : FREE SPACE : Bitstream Buffer = 321146752 B (306 MB)
     [m3vpss ]  76452: SYSTEM  : FREE SPACE : Tiler Buffer     = 256 B (0 MB)  - TILER OFF
     [m3vpss ]  76452: DISPLAY: DVO2(BP1)  : 59 fps, Latency (Min / Max) = ( 83 / 84 ), Callback Interval (Min / Max) = ( 16 / 17 ) DropCount:0 DispLatency (Min / Max) = ( 66 / 66 ) !!!
     [m3video]     80453: HDVICP-ID:0
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :2 %
     [m3video]          totalWait2Isr :88 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :89 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :96 %
     [m3video]          totalAcq2acqDelay :3 %
     [m3video]          totalElapsedTime in msec :   29402
     [m3video]          numAccessCnt:   15454
     [m3video]         IVA-FPS :     532
     [m3video]         Average time spent per frame in microsec:    1673
     [m3video]     80453: HDVICP-ID:1
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :0 %
     [m3video]          totalWait2Isr :0 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :0 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :0 %
     [m3video]          totalAcq2acqDelay :0 %
     [m3video]          totalElapsedTime in msec :       0
     [m3video]          numAccessCnt:       0
     [m3video]         IVA-FPS :       0
     [m3video]         Average time spent per frame in microsec:       0
     [m3video]     80454: HDVICP-ID:2
     [m3video] All percentage figures are based off totalElapsedTime
     [m3video]          totalAcquire2wait :0 %
     [m3video]          totalWait2Isr :0 %
     [m3video]          totalIsr2Done :0 %
     [m3video]          totalWait2Done :0 %
     [m3video]          totalDone2Release :0 %
     [m3video]          totalAcquire2Release :0 %
     [m3video]          totalAcq2acqDelay :0 %
     [m3video]          totalElapsedTime in msec :       0
     [m3video]          numAccessCnt:       0
     [m3video]         IVA-FPS :       0
     [m3video]         Average time spent per frame in microsec:       0
     [m3video]  
     [m3video]  *** DECODE Statistics ***
     [m3video]  
     [m3video]  Elasped Time           : 35 secs
     [m3video]  
     [m3video]  
     [m3video]  CH  | In Recv In User  Out
     [m3video]  Num | FPS     Skip FPS FPS
     [m3video]  -----------------------------------
     [m3video]    0 |     441        0 441
     [m3video]    1 |       0        0   0
     [m3video]    2 |       0        0   0
     [m3video]    3 |       0        0   0
     [m3video]    4 |       0        0   0
     [m3video]    5 |       0        0   0
     [m3video]    6 |       0        0   0
     [m3video]    7 |       0        0   0
     [m3video]    8 |       0        0   0
     [m3video]    9 |       0        0   0
     [m3video]   10 |       0        0   0
     [m3video]   11 |       0        0   0
     [m3video]  
     [m3video] Multi Channel Decode Average Submit Batch Size
     [m3video] Max Submit Batch Size : 24
     [m3video] IVAHD_0 Average Batch Size : 1
     [m3video] IVAHD_0 Max achieved Batch Size : 1
     [m3video] IVAHD_1 Average Batch Size : 0
     [m3video] IVAHD_1 Max achieved Batch Size : 0
     [m3video] IVAHD_2 Average Batch Size : 0
     [m3video] IVAHD_2 Max achieved Batch Size : 0
     [m3video]  
     [m3video] Multi Channel Decode Batch break Stats
     [m3video] Total Number of Batches created: 15451
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 0 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 99 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video] Total Number of Batches created: 0
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 0 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 0 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video] Total Number of Batches created: 0
     [m3video] All numbers are based off total number of Batches created
     [m3video]      Batch breaks due to batch sizeexceeding limit: 0 %
     [m3video]      Batch breaks due to ReqObj Que being empty: 0 %
     [m3video]      Batch breaks due to changed resolution class: 0 %
     [m3video]      Batch breaks due to interlace and progressivecontent mix: 0 %
     [m3video]      Batch breaks due to channel repeat: 0 %
     [m3video]      Batch breaks due to different codec: 0 %
     [m3video]  
     [m3vpss ]  
     [m3vpss ]  *** [MP_SCLR0 ] Statistics ***
     [m3vpss ]  
     [m3vpss ]  Total Frames Received  : 0
     [m3vpss ]  Total Frames Forwarded : 0
     [m3vpss ]  
     [m3vpss ]  
     [m3vpss ]  CH  | In Recv In Reject Processed  Latency(DRV) Processed  Rejected
     [m3vpss ]  Num | FPS     FPS       FPS        Min / Max    Frames     Frames  
     [m3vpss ]  -------------------------------------------------------------------
     [m3vpss ]  
     [m3vpss ]  82459: LOAD: CPU: 7.9% HWI: 2.4%, SWI:1.6%
     [m3vpss ]  
     [m3vpss ]  82459: LOAD: TSK: DISPLAY0            : 0.5%
     [m3vpss ]  82459: LOAD: TSK: DISPLAY1            : 0.2%
     [m3vpss ]  82459: LOAD: TSK: SWMS0               : 1.9%
     [m3vpss ]  82459: LOAD: TSK: SWMS1               : 0.8%
     [m3vpss ]  82459: LOAD: TSK: MISC                : 0.5%
     [m3vpss ]  
     [m3video]  
     [m3video]  82960: LOAD: CPU: 27.9% HWI: 2.7%, SWI:1.7%
     [m3video]  
     [m3video]  82960: LOAD: TSK: IPC_FRAMES_OUT0     : 5.3%
     [m3video]  82960: LOAD: TSK: IPC_BITS_IN0        : 1.5%
     [m3video]  82960: LOAD: TSK: DEC0                : 8.3%
     [m3video]  82960: LOAD: TSK: DEC_PROCESS_TSK_0   : 8.1%
     [m3video]  82960: LOAD: TSK: MISC                : 0.3%
     [m3video]  
     [c6xdsp ]  
     [c6xdsp ]  80870: LOAD: CPU: 0.1% HWI: 0.0%, SWI:0.0%
     [c6xdsp ]  
     [c6xdsp ]  80870: LOAD: TSK: MISC                : 0.1%
     [c6xdsp ]  

  • The segmentation fault is due to bug in ipcFramesInLink which is fixed in RDK 4.0.

    The errors:

     [m3video] 99034:DECLINK::links_m3video/iva_dec/decLink_tsk.c:[33]::INTERNAL ERROR:-8

     [m3video] Link create should be first cmd.Received Cmd:24576

    are because a GET_PROCESSED_DATA msg is received after the decLink is deleted.

    I don't know why this is happening but it is okay to ignore the error for now.

  • Thanks for your help!!