SmartMatrix 64x32 from 32x32 Teensy4.1

Hi all,
I’m using Teensy4.1 Board and SmartMatrix v4 (Old Version for Teensy3x).
Currently, I have a problem about stacking 2 panel 32x32 to 1 panel 64x32.
It’s not correct.
Below is my example (follow AnimatedGifs Example) and Image Gif.

#if (USE_SMARTMATRIX == 1)
/* SmartMatrix configuration and memory allocation */
#define COLOR_DEPTH 24 // Choose the color depth used for storing pixels in the layers: 24 or 48 (24 is good for most sketches - If the sketch uses type rgb24 directly, COLOR_DEPTH must be 24)
const uint16_t kMatrixWidth = 64; // Set to the width of your display, must be a multiple of 8
const uint16_t kMatrixHeight = 32; // Set to the height of your display
const uint8_t kRefreshDepth = 36; // Tradeoff of color quality vs refresh rate, max brightness, and RAM usage. 36 is typically good, drop down to 24 if you need to. On Teensy, multiples of 3, up to 48: 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48. On ESP32: 24, 36, 48
const uint8_t kDmaBufferRows = 4; // known working: 2-4, use 2 to save RAM, more to keep from dropping frames and automatically lowering refresh rate. (This isn’t used on ESP32, leave as default)
const uint8_t kPanelType = SM_PANELTYPE_HUB75_32ROW_MOD16SCAN; // Choose the configuration that matches your panels. See more details in MatrixCommonHub75.h and the docs: Home · pixelmatix/SmartMatrix Wiki · GitHub
const uint32_t kMatrixOptions = (SM_HUB75_OPTIONS_NONE); // see docs for options: Home · pixelmatix/SmartMatrix Wiki · GitHub
const uint8_t kBackgroundLayerOptions = (SM_BACKGROUND_OPTIONS_NONE);
const uint8_t kScrollingLayerOptions = (SM_SCROLLING_OPTIONS_NONE);

Gif File:
01_001_0

Any help trouble shooting would be much appreciated!
Thank you!

The configuration looks good. Have you tried other GIFs or sketches? It could be a GIF that’s incompatible, try re encoding it using ezgif.com

Thanks for your response quickly,
I created the gif using ezgif.com.

number2
But when I run example, It’s still not correct.


I read a lot other topic, the map of pixel can be defined like below:


const PanelMappingEntry panelMap32x16Mod2V2[] =
{
    {0, 31, -8},
    {0, 63, -8},
    {0, 95, -8},
    {0, 127, -8},
    {2, 16, 8},
    {2, 48, 8},
    {2, 80, 8},
    {2, 112, 8},
    {4, 15, -8},
    {4, 47, -8},
    {4, 79, -8},
    {4, 111, -8},
    {6, 0, 8},
    {6, 32, 8},
    {6, 64, 8},
    {6, 96, 8},
    {0, 0, 0} // last entry is all zeros
};

const PanelMappingEntry * getMultiRowRefreshPanelMap(unsigned char panelType) {
    switch(panelType) {
        case SMARTMATRIX_HUB75_64ROW_64COL_MOD16SCAN:
            return panelMap64x64Mod16;
        case SMARTMATRIX_HUB75_32ROW_64COL_MOD8SCAN:
            return panelMap64x32Mod8;
        case SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN:
            return panelMap32x16Mod2;
        case SMARTMATRIX_HUB12_16ROW_32COL_MOD4SCAN:
            return panelMapHub12_32x16Mod4;
        case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN:
            return panelMap32x16Mod4;
        case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V2:
            return panelMap32x16Mod4V2;
        case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V3:
            return panelMap32x16Mod4V3;
        case SMARTMATRIX_HUB75_16ROW_32COL_MOD4SCAN_V4:
            return panelMap32x16Mod4V4;
        case SMARTMATRIX_HUB75_16ROW_32COL_MOD2SCAN_V2:
            return panelMap32x16Mod2V2;
        default:
            return defaultPanelMap;            
    }
}

Do i need define the other map for my ledmatrix?
Thank you!