Imx6 solo/dl based processor simultaniously is not working with live VGA 640x480 video capture (OV5640) and audio loop back(wm8960 codec)

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Imx6 solo/dl based processor simultaniously is not working with live VGA 640x480 video capture (OV5640) and audio loop back(wm8960 codec)

1,051 Views
venkatesh_pvsm
Contributor II

Hi ,

    ISSUE:I have faced the issue based on video capture parallel and audio loop back/simultaneous.

Both audio and videos was working parallely  with QVGA (320x240) 15 fps QCIF (176x144) 15/30 fps .\

Working both audio and video for following resolution :

QVGA (320x240) 15 fps

QCIF (176x144) 15 fps

QCIF (176x144) 30 fps

Tested Commands:

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

./mxc_v4l2_capture.out -iw 320 -ih 240 -ow 320 -oh 240  -m 1 -fr 15-d /dev/video0 -i 1 -c 1000 /v5640_320_240_30fps.yuv  &

arecord -D hw:0,0 -c 2 -f S16_LE -r 8000 -t raw | aplay -D hw:0,0 -c 2 -f S16_LE  -r 8000 -v

./mxc_v4l2_capture.out -iw 176 -ih 144 -ow 176 -oh 144  -m 7 -fr 15 -d /dev/video0 -i 1 -c 1000 /CAM/vv176_144_i1_15.yuv   &

arecord -D hw:0,0 -c 2 -f S16_LE -r 8000 -t raw | aplay -D hw:0,0 -c 2 -f S16_LE  -r 8000 -v

./mxc_v4l2_capture.out -iw 176 -ih 144 -ow 176 -oh 144  -m 7 -fr 30 -d /dev/video0 -i 1 -c 1000 /CAM/vv176_144_i1_30.yuv &

arecord -D hw:0,0 -c 2 -f S16_LE -r 8000 -t raw | aplay -D hw:0,0 -c 2 -f S16_LE  -r 8000 -v

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

Both audio and video  is not working for following resolution :

QVGA (320x240) 30 fps

QVGA (640x480) 30 fps

QVGA (640x480) 15 fps

Tested Commands:

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

./mxc_v4l2_capture.out -iw 640 -ih 480 -ow 640 -oh 480  -m 0 -fr 30 -d /dev/video0 -i 1 -c 1000 /CAM/v5640_640_480p_30fps.yuv &

arecord -D hw:0,0 -c 2 -f S16_LE -r 8000 -t raw | aplay -D hw:0,0 -c 2 -f S16_LE  -r 8000 -v

./mxc_v4l2_capture.out -iw 640 -ih 480 -ow 640 -oh 480  -m 0 -fr 10 -d /dev/video0 -i 1 -c 1000 /CAM/v5640_640_480p_10fps.yuv &

arecord -D hw:0,0 -c 2 -f S16_LE -r 8000 -t raw | aplay -D hw:0,0 -c 2 -f S16_LE  -r 8000 -v

./mxc_v4l2_capture.out -iw 320 -ih 240 -ow 320 -oh 240  -m 1 -fr 15 -d /dev/video0 -i 1 -c 1000 /v5640_320_240_15fps.yuv &

arecord -D hw:0,0 -c 2 -f S16_LE -r 8000 -t raw | aplay -D hw:0,0 -c 2 -f S16_LE  -r 8000 -v

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

Any memory related issue happening in the driver side for both camera capture and audio working time?

How to solve this issue?

Following things are the memory allocation in kernel drive(linux-3.0.35)

Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)

Memory: 256MB = 256MB total

Memory: 248016k/248016k available, 276272k reserved, 0K highmem

Virtual kernel memory layout:

    vector  : 0xffff0000 - 0xffff1000   (   4 kB)

    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)

    DMA     : 0xf4600000 - 0xffe00000   ( 184 MB)

    vmalloc : 0xa0800000 - 0xf2000000   (1304 MB)

    lowmem  : 0x80000000 - 0xa0000000   ( 512 MB)

    pkmap   : 0x7fe00000 - 0x80000000   (   2 MB)

    modules : 0x7f000000 - 0x7fe00000   (  14 MB)

      .init : 0x80008000 - 0x80032000   ( 168 kB)

      .text : 0x80032000 - 0x808f6bf0   (8979 kB)

      .data : 0x808f8000 - 0x80947240   ( 317 kB)

Audio and camera clock settings:

Audio clock settings:

MX6DL_PAD_GPIO_0__CCM_CLKO,--->Audio MCLK clock

static int wm8960_clk_enable(int enable)
{

    if (enable)
            clk_enable(clko);
    else
            clk_disable(clko);

    printk(" %s HELLO old wm8960\n\n\n",__func__);
    return 0;

}

static int mxc_wm8960_init(void)

{

    int rate;
printk(" %s HELLO old wm8960\n\n\n",__func__);
    clko = clk_get(NULL, "clko_clk");
    if (IS_ERR(clko)) {
            pr_err("can't get CLKO clock.\n");
            return PTR_ERR(clko);
    }
    /* both audio codec and comera use CLKO clk*/
    rate = clk_round_rate(clko, 24000000);
rate = clk_round_rate(clko, 12000000);
    clk_set_rate(clko, rate);

    wm8960_data.sysclk = rate;

    printk(" %s End rate=%d\n\n\n",__func__,rate);
    return 0;

}

static int __init imx6q_init_audio(void)
{

                platform_device_register(&sabresd_vwm8960_reg_devices);
                mxc_register_device(&mx6_sabresd_audio_wm8960_device,
                                    &wm8960_data);
                imx6q_add_imx_ssi(1, &mx6_sabresd_ssi_pdata);
                mxc_wm8960_init();
                printk("HELLO old wm8960\n\n\n");
        return 0;
}

static struct mxc_audio_platform_data wm8960_data = {
        .ssi_num = 1,
        .src_port = 2,
        .ext_port = 3,
        .hp_active_low = 1,
        .mic_active_low = 1,
        .init = mxc_wm8960_init,
        .clock_enable = wm8960_clk_enable,
};

Camera clock settings:

MX6DL_PAD_GPIO_6__CCM_CCM_OUT_0 -->GPIO_6 CAmera clock

static struct imx_ipuv3_platform_data ipu_data[] = {
        {
        .rev = 4,
        .csi_clk[0] = "clko2_clk",
        .bypass_reset = false,
        },
#ifndef OV9712_CAM_CONFIG
#if 1
        {
        .rev = 4,
        .csi_clk[0] = "clko2_clk",
        .bypass_reset = false,
#endif
#endif
};


static struct fsl_mxc_capture_platform_data capture_data[] = {
        {
                .csi = 0,
                .ipu = 0,
                .mclk_source = 0,
                .is_mipi = 0,
        },
#if 1
        {
                .csi = 1,
                .ipu = 0,
                .mclk_source = 0,
                .is_mipi = 1,
        },

static struct mipi_csi2_platform_data mipi_csi2_pdata = {
        .ipu_id  = 0,
        .csi_id = 0,
        .csi_id = 1,
        .lanes = 2,
        .dphy_clk = "mipi_pllref_clk",
        .pixel_clk = "emi_clk",
};

---------  
mx6_sabresd_board_init(void)()

        clko2 = clk_get(NULL, "clko2_clk");
        if (IS_ERR(clko2))
        {
                pr_err("can't get CLKO2 clock.\n");
        printk(" %s clko2  error  \n\n\n",__func__);
        }
        new_parent = clk_get(NULL, "osc_clk");
        if (!IS_ERR(new_parent)) {
                clk_set_parent(clko2, new_parent);
                clk_put(new_parent);
        printk(" %s clko2 parent  error  \n\n\n",__func__);
        }
        rate = clk_round_rate(clko2, 24000000);
        clk_set_rate(clko2, rate);
        clk_enable(clko2);
        printk(" %s 2 clko2 set  rate=%d\n\n\n",__func__,rate);
}
----------

          Please let me know whats happening inside the kernel while accessing the caera capture above QVGA resolution with audio,

Without camera capture audio playback and capture working properly,if once camera capture enabled that time audio is not working .

Audio using CLKO(GPIO_0) and video using the clk CLKO2(GPIO_6).

How to solve this simultaneous memory related issue in inx6 solo/dl processor.

Thanks by,

Venkat



Labels (6)
3 Replies

599 Views
igorpadykov
NXP Employee
NXP Employee

Hi Venkatesh

I am not sure that this is memory issue.

Issue may be related to performance issues, that is internal bandwidth

limitation.

For further checking I would suggest to test this on Freescale reference board

with Freescale Demo images

L3.10.17_1.0.0_IMX6QDLS_BUNDLE : Source Code

http://ci.ossystems.com.br/public/fsl-community-bsp/master/

http://download.ossystems.com.br/images/freescale/current/

Best regards

chip

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

Note: If this post answers your question, please click the Correct Answer button. Thank you!

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

0 Kudos

599 Views
venkatesh_pvsm
Contributor II

Hi,

      Right now we don't have IMX6 free scale reference board ,any body tested this both audio(Playback and capture) and video (capture) application with Freecale board.

   

Also any Internal Bandwidth limitation  are their  between IMX6S/DL and IMX6Q based processor.

Thanks by,

Venkat

0 Kudos

599 Views
igorpadykov
NXP Employee
NXP Employee

Hi Venkatesh

internal bandwidth limitations is difficult to predict

or calculate. Usually this is just experimentation.

For example check that you used Freescale optimized

codecs.

L3.0.35_4.1.0_MM_CODECS

and installed all latest patches, check patches tab below

http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=i.MX6Q&nodeId=018rH3ZrDRB24A&fpsp=1&t...

Very useful would be test this use case without OS, just with bare-metal

SDK (to exclude OS overheads)

i.MX 6Series Platform SDK

Best regards

chip

0 Kudos