none
MP4 video files are not playing in Multi-monitor WEC7, iMX6 processor RRS feed

  • Question

  • Hi all,

    This issue is related to previous thread, Multi-monitor in WEC7 with displays of different resolution.

    I'm able to get two different resolution monitors working in extended mode. Primary monitor is LCD, 800x480, and secondary is 1080p HDMI.

    I want video to be played on primary monitor alone. Able to play MPEG file using video player or playwnd.exe

    If I set the HDMI (secondary monitor) to resolution lesser than 1024x768 , everything goes well and MP4 video is playing on primary monitor.

    But the below issue appears if I set higher resolutions such as 720p or 1080p for HDMI.

    When I try to play MP4 files, it shows distortions with green colour with video playing in stripes, and also shows distortions (colour changing according to colour of video playing on primary) on secondary monitor (HDMI) too.

    This issue is not observed in lower resolutions of HDMI.

    Any leads on this would be helpful for me.

    Thanks a lot.

    Saturday, September 16, 2017 10:16 AM

Answers

  • Additional info:

    (below details are related to IPU driver in NXP's iMX6 processor family)

    While debugging this issue, I came across this code patch in \WINCE700\platform\common\src\soc\COMMON_FSL_V3\IPUV3\DISPLAY\display.cpp

    if ((dwWidth * 32 * iScale) < (4 * 128))
        {
            DEBUGMSG(1, (TEXT("%s: IDMAC frame width is too small! DMFC FIFO size must be smaller than frame width * 2.\r\n"), __WFUNCTION__));
            // Use smallest setting and hope that it works.
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_4x128;
        }
        else if ((dwWidth * 32 * iScale) < (8 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_4x128;
        }
        else if ((dwWidth * 32 * iScale) < (16 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_8x128;
        }
        else if ((dwWidth * 32 * iScale) < (32 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_16x128;
        }
        else if ((dwWidth * 32 * iScale) < (64 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_32x128;
        }
        else if ((dwWidth * 32 * iScale) < (128 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_64x128;
        }
        else if (dwWidth > 1024)
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_256x128; //1
        }
        else
    #endif
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_64x128;    //2
        }

    Here, In higher resolution case, FIFOSize is set as 1. This this case, issue is observed. If I set the FIFOSize to 2 (even for >1024 case), issue is not observed. But not understanding why this is causing issue in multi-monitor scenario!

    Please let me know your ideas/suggestions on this, if any.

    Thanks.
    With regards,
    Keshava

    • Marked as answer by Keshava GN Wednesday, September 27, 2017 12:09 PM
    Friday, September 22, 2017 1:22 PM

All replies

  • Additional info: I'm seeing that, if the combined resolution of both the monitor goes beyond 1920x1080 , I'm observing this issue, even if I'm playing video on primary monitor alone (800x480). Anyone else observed this?

    Thanks!

    Monday, September 18, 2017 7:20 AM
  • Additional info:

    (below details are related to IPU driver in NXP's iMX6 processor family)

    While debugging this issue, I came across this code patch in \WINCE700\platform\common\src\soc\COMMON_FSL_V3\IPUV3\DISPLAY\display.cpp

    if ((dwWidth * 32 * iScale) < (4 * 128))
        {
            DEBUGMSG(1, (TEXT("%s: IDMAC frame width is too small! DMFC FIFO size must be smaller than frame width * 2.\r\n"), __WFUNCTION__));
            // Use smallest setting and hope that it works.
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_4x128;
        }
        else if ((dwWidth * 32 * iScale) < (8 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_4x128;
        }
        else if ((dwWidth * 32 * iScale) < (16 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_8x128;
        }
        else if ((dwWidth * 32 * iScale) < (32 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_16x128;
        }
        else if ((dwWidth * 32 * iScale) < (64 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_32x128;
        }
        else if ((dwWidth * 32 * iScale) < (128 * 128))
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_64x128;
        }
        else if (dwWidth > 1024)
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_256x128; //1
        }
        else
    #endif
        {
            dmfcData.FIFOSize = IPU_DMFC_CHAN_DMFC_FIFO_SIZE_64x128;    //2
        }

    Here, In higher resolution case, FIFOSize is set as 1. This this case, issue is observed. If I set the FIFOSize to 2 (even for >1024 case), issue is not observed. But not understanding why this is causing issue in multi-monitor scenario!

    Please let me know your ideas/suggestions on this, if any.

    Thanks.
    With regards,
    Keshava

    • Marked as answer by Keshava GN Wednesday, September 27, 2017 12:09 PM
    Friday, September 22, 2017 1:22 PM