Hi,
I have Leopardboard 365 ver1.4 and LI-VI365. I have installed RR SDK. But I could not make Video Input Board work. There is no /dev/video0. So I guess there is a problem, maybe a driver problem. I need to get composite input from Video Input Board and record the video to an mp4 file, or stream the video from udp.
Is Video Input Board work with RR SDK on leopardboard 365? If yes, what are the boot args, and the gstreamer pipeline? And should I install any other driver or something other than RR SDK?
Thank you,
Kaan
Hi Kaan,
At this time RidgeRun only have support for the composite in video LI-VI365 board in our professional SDK.
You might check
arago-project.org/.../projects
and
arago-project.org/.../examples-davinci.git
as I have seen some drivers and demo apps checked in there.
Todd
Hi
I also want to record video by using LI-VI365. I did some steps to get it. I have modified board-dm365-leopard.c by adding tvp5146 chip. To capture data from tvp5146 it is also necessary to set the variable from bootargs to vpfe_capture.interface=0. This is described inleo365/kernel/linux-2.6.32/drivers/media/video/davinci/vpfe_capture.c. Now I am not sure about pin multiplexing because the tvp5146 on my board is quite hot after few minutes running. Where are the pins settings configured? Below I added board-dm365-leopard.c file.
I will be greatful for any suggestions.
/*
* DM365 Leopard Board
*
* Derived from: arch/arm/mach-davinci/board-dm365-evm.c
* RidgeRun Copyright (C) 2010.
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation version 2.
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
* kind, whether express or implied; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
/**************************************************************************
* Included Files
**************************************************************************/
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/dma-mapping.h>
#include <linux/i2c.h>
#include <linux/io.h>
#include <linux/clk.h>
#include <linux/i2c/at24.h>
#include <linux/leds.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <linux/mtd/nand.h>
#include <linux/input.h>
#include <linux/spi/spi.h>
#include <linux/spi/eeprom.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <mach/mux.h>
#include <mach/hardware.h>
#include <mach/dm365.h>
#include <mach/psc.h>
#include <mach/common.h>
#include <mach/i2c.h>
#include <mach/serial.h>
#include <mach/mmc.h>
#include <mach/nand.h>
#include <mach/keyscan.h>
#include <mach/gpio.h>
#include <linux/videodev2.h>
#include <media/tvp514x.h>
#include <media/davinci/videohd.h>
#define DM365_EVM_PHY_MASK (0x2)
#define DM365_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
/*****************************************************************************
* added by M
static struct tvp514x_platform_data tvp5146_pdata = {
.clk_polarity = 0,
.hs_polarity = 1,
.vs_polarity = 1
};
/****************************************************************************/
static struct snd_platform_data dm365_leopard_snd_data = {
.eventq_no = EVENTQ_3,
static struct i2c_board_info i2c_info[] = {
{
I2C_BOARD_INFO("tlv320aic3x", 0x18),
},
I2C_BOARD_INFO("ths7303", 0x2c),
}
static struct davinci_i2c_platform_data i2c_pdata = {
.bus_freq = 400 /* kHz */,
.bus_delay = 0 /* usec */,
/* Input available at the mt9p031 */
static struct v4l2_input mt9p031_inputs[] = {
.index = 0,
.name = "Camera",
.type = V4L2_INPUT_TYPE_CAMERA,
/* *****************************************************************
#define TVP514X_STD_ALL (V4L2_STD_NTSC | V4L2_STD_PAL)
/* Inputs available at the TVP5146 */
static struct v4l2_input tvp5146_inputs[] = {
.name = "Composite",
.std = TVP514X_STD_ALL,
.index = 1,
.name = "S-Video",
* this is the route info for connecting each input to decoder
* ouput that goes to vpfe. There is a one to one correspondence
* with tvp5146_inputs
static struct vpfe_route tvp5146_routes[] = {
.input = INPUT_CVBS_VI2B,
.output = OUTPUT_10BIT_422_EMBEDDED_SYNC,
.input = INPUT_SVIDEO_VI2C_VI1C,
/******************************************************************/
* modified by M
static struct vpfe_subdev_info vpfe_sub_devs[] = {
.module_name = "tvp5146",
.grp_id = VPFE_SUBDEV_TVP5146,
.num_inputs = ARRAY_SIZE(tvp5146_inputs),
.inputs = tvp5146_inputs,
.routes = tvp5146_routes,
.can_route = 1,
.ccdc_if_params = {
.if_type = VPFE_BT656,
.hdpol = VPFE_PINPOL_POSITIVE,
.vdpol = VPFE_PINPOL_POSITIVE,
.board_info = {
I2C_BOARD_INFO("tvp5146", 0x5d),
.platform_data = &tvp5146_pdata,
.module_name = "mt9p031",
.is_camera = 1,
.grp_id = VPFE_SUBDEV_MT9P031,
.num_inputs = ARRAY_SIZE(mt9p031_inputs),
.inputs = mt9p031_inputs,
.if_type = VPFE_RAW_BAYER,
I2C_BOARD_INFO("mt9p031", 0x48),
/* this is for PCLK rising edge */
.platform_data = (void *)1,
/* Set the input for TVP5146/MT9P031 sensors */
static int dm365leopard_setup_video_input(enum vpfe_subdev_id id)
const char *label;
switch (id) {
case VPFE_SUBDEV_TVP5146:
// resets &= ~BIT(0); /* ?????????????? */
label = "tvp5146 SD";
// dm365evm_reset_imager(0); /* ????????????????????????? */
break;
case VPFE_SUBDEV_MT9P031:
label = "HD imager-MT9P031";
default:
return 0;
pr_info("Leopard: switch to %s video input\n", label);
/*******************************************************************/
static struct vpfe_config vpfe_cfg = {
.setup_input = dm365leopard_setup_video_input,
.num_subdevs = ARRAY_SIZE(vpfe_sub_devs),
.sub_devs = vpfe_sub_devs,
.card_name = "DM365 Leopard",
.ccdc = "DM365 ISIF",
.num_clocks = 1,
.clocks = {"vpss_master"},
/*Need to review if this is necessary*/
static struct davinci_mmc_config dm365leopard_mmc_config = {
.wires = 4,
.max_freq = 50000000,
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
.version = MMC_CTLR_VERSION_2,
static void dm365leopard_emac_configure(void)
* EMAC pins are multiplexed with GPIO and UART
* Further details are available at the DM365 ARM
* Subsystem Users Guide(sprufg5.pdf) pages 125 - 127
davinci_cfg_reg(DM365_EMAC_TX_EN);
davinci_cfg_reg(DM365_EMAC_TX_CLK);
davinci_cfg_reg(DM365_EMAC_COL);
davinci_cfg_reg(DM365_EMAC_TXD3);
davinci_cfg_reg(DM365_EMAC_TXD2);
davinci_cfg_reg(DM365_EMAC_TXD1);
davinci_cfg_reg(DM365_EMAC_TXD0);
davinci_cfg_reg(DM365_EMAC_RXD3);
davinci_cfg_reg(DM365_EMAC_RXD2);
davinci_cfg_reg(DM365_EMAC_RXD1);
davinci_cfg_reg(DM365_EMAC_RXD0);
davinci_cfg_reg(DM365_EMAC_RX_CLK);
davinci_cfg_reg(DM365_EMAC_RX_DV);
davinci_cfg_reg(DM365_EMAC_RX_ER);
davinci_cfg_reg(DM365_EMAC_CRS);
davinci_cfg_reg(DM365_EMAC_MDIO);
davinci_cfg_reg(DM365_EMAC_MDCLK);
* EMAC interrupts are multiplexed with GPIO interrupts
* Details are available at the DM365 ARM
* Subsystem Users Guide(sprufg5.pdf) pages 133 - 134
davinci_cfg_reg(DM365_INT_EMAC_RXTHRESH);
davinci_cfg_reg(DM365_INT_EMAC_RXPULSE);
davinci_cfg_reg(DM365_INT_EMAC_TXPULSE);
davinci_cfg_reg(DM365_INT_EMAC_MISCPULSE);
static void dm365leopard_mmc_configure(void)
* MMC/SD pins are multiplexed with GPIO and EMIF
* Subsystem Users Guide(sprufg5.pdf) pages 118, 128 - 131
davinci_cfg_reg(DM365_SD1_CLK);
davinci_cfg_reg(DM365_SD1_CMD);
davinci_cfg_reg(DM365_SD1_DATA3);
davinci_cfg_reg(DM365_SD1_DATA2);
davinci_cfg_reg(DM365_SD1_DATA1);
davinci_cfg_reg(DM365_SD1_DATA0);
static void dm365leopard_usb_configure(void)
davinci_cfg_reg(DM365_GPIO66);
gpio_request(66, "usb");
gpio_direction_output(66, 0);
setup_usb(500, 8);
static void dm365leopard_tlv320aic3x_configure(void)
* CLKOUT1 pin is multiplexed with GPIO35 and SPI4
* Subsystem Users Guide(sprufg5.pdf) pages 118, 127 - 129
struct clk *clkout1_clk;
davinci_cfg_reg(DM365_CLKOUT1);
clkout1_clk = clk_get(NULL, "clkout1");
if (IS_ERR(clkout1_clk))
return;
clk_enable(clkout1_clk);
* Configure CLKOUT1 OBSCLK registers
/* (reg OCSEL) Setting OBSCLK source with Oscillator divider output enable */
__raw_writel(0x0,IO_ADDRESS(0x01C40C00 + 0x104));
/* (reg OSCDIV1) Setting the Oscillator divider enable with a divider ratio of 1 */
__raw_writel(0x8000,IO_ADDRESS(0x01C40C00 + 0x124));
/* (reg CKEN) Setting the OBSCLK clock enable */
__raw_writel(0x02,IO_ADDRESS(0x01C40C00 + 0x148));
static void dm365leopard_lcdout_configure(void)
* R/G/B 0 and 1 pins are multiplexed with GPIOs
davinci_cfg_reg(DM365_VOUT_B0);
davinci_cfg_reg(DM365_VOUT_B1);
davinci_cfg_reg(DM365_VOUT_B2);
davinci_cfg_reg(DM365_VOUT_R0);
davinci_cfg_reg(DM365_VOUT_R1);
davinci_cfg_reg(DM365_VOUT_R2);
davinci_cfg_reg(DM365_VOUT_G0);
davinci_cfg_reg(DM365_VOUT_G1);
davinci_cfg_reg(DM365_VOUT_COUTL_EN);
davinci_cfg_reg(DM365_VOUT_COUTH_EN);
davinci_cfg_reg(DM365_VOUT_LCD_OE);
davinci_cfg_reg(DM365_VOUT_HVSYNC);
static void __init leopard_init_i2c(void)
davinci_init_i2c(&i2c_pdata);
i2c_register_board_info(1, i2c_info, ARRAY_SIZE(i2c_info));
static struct davinci_uart_config uart_config __initdata = {
.enabled_uarts = (1 << 0),
static void __init dm365_leopard_map_io(void)
/* setup input configuration for VPFE input devices */
dm365_set_vpfe_config(&vpfe_cfg);
dm365_init();
static __init void dm365_leopard_init(void)
leopard_init_i2c();
davinci_serial_init(&uart_config);
dm365leopard_emac_configure();
dm365leopard_usb_configure();
dm365leopard_mmc_configure();
dm365leopard_lcdout_configure();
davinci_setup_mmc(0, &dm365leopard_mmc_config);
dm365_init_asp(&dm365_leopard_snd_data);
dm365_init_rtc();
dm365leopard_tlv320aic3x_configure();
static __init void dm365_leopard_irq_init(void)
davinci_irq_init();
MACHINE_START(DM365_LEOPARD, "DM365 Leopard")
.phys_io = IO_PHYS,
.io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc,
.boot_params = (0x80000100),
.map_io = dm365_leopard_map_io,
.init_irq = dm365_leopard_irq_init,
.timer = &davinci_timer,
.init_machine = dm365_leopard_init,
MACHINE_END
regards Marian
Thank you Marian.
I have checked board-dm365-leopard.c and saw that it is same as your. So I did not modify the code.
I set vpfe_capture.interface=0 as you said. But still there is no /dev/video0. could you send your gstreamer pipeline for capturing from video input board?
As I am new to leopardboard and embedded devolopment, I do know know about pin multiplexing configuration. But my tvp chip is also hot.
Thanks.
I have tried first Video capture example pipeline at www.ridgerun.com/.../LeopardBoard_365_GStreamer_Pipelines . But I got the following error: no /dev/video0
/ # ipipe_init -d
Default configuration setting in previewer successfully
Previewer Initialized
/ # gst-launch -e v4l2src always-copy=false ! video/x-raw-yuv,format=\(fourcc\)U
YVY, width=640, height=480, framerate=\(fraction\)30/1 ! dmaiperf ! dmaiaccel !
TIDmaiVideoSink sync=false accelFrameCopy=false videoOutput=composite videoStd=D
1_NTSC
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
WARNING: from element /GstPipeline:pipeline0/GstDmaiperf:dmaiperf0: Could not get/set settings from/on resource.
Additional debug info:
../../src/src/gsttidmaiperf.c(273): gst_dmaiperf_start (): /GstPipeline:pipeline0/GstDmaiperf:dmaiperf0:
Engine name not specified, not printing DSP information
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Cannot identify device '/dev/video0'.
../../../src/sys/v4l2/v4l2_calls.c(463): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
system error: No such file or directory
Setting pipeline to NULL ...
Freeing pipeline ...
I've tested LI-VI365 board with GStreamer but without any success yet. Below are results. I guess that I am missing something in configuration. I will be appreciate for any suggestions.
******************
my bootargs:
bootargs=davinci_enc_mngr.ch0_output=COMPOSITE davinci_enc_mngr.ch0_mode=ntsc da
vinci_display.cont2_bufsize=6291456 vpfe_capture.cont_bufoffset=6291456 vpfe_cap
ture.cont_bufsize=6291456 console=ttyS0,115200n8 video=davincifb:vid0=off:vid1=o
ff:osd1=off dm365_imp.oper_mode=0 davinci_capture.device_type=1 vpfe_capture.int
erface=0 mem=54M root=/dev/nfs nfsroot=192.168.0.100:/home/leo/work/leo365/fs/fs
rw ip=dhcp mtdparts=nand_davinci.0:3968k(UBOOT),128k(UBOOT_ENV),4352k(KERNEL),2
04800k(FS)
*****************
pipeline
/ # gst-launch -e gst-debug=v4l2src*5 v4l2src always-copy=false ! video/x-raw-yu
v,format=\(fourcc\)UYVY, width=640, height=480, framerate=\(fraction\)30/1 ! dma
iperf ! dmaiaccel ! TIDmaiVideoSink sync=false accelFrameCopy=false videoOutput=
composite videoStd=D1_NTSC
output
and got the output:
(gst-launch-0.10:1212): GStreamer-CRITICAL **: gst_debug_log_valist: assertion `
category != NULL' failed
vpfe-capture vpfe-capture: IPIPE Chained
tvp514x 1-005d: invalid control id 9963780
tvp514x 1-005d: invalid control id 9963781
tvp514x 1-005d: invalid control id 9963782
tvp514x 1-005d: invalid control id 9963783
tvp514x 1-005d: invalid control id 9963784
tvp514x 1-005d: invalid control id 9963785
tvp514x 1-005d: invalid control id 9963786
tvp514x 1-005d: invalid control id 9963787
tvp514x 1-005d: invalid control id 9963788
tvp514x 1-005d: invalid control id 9963789
tvp514x 1-005d: invalid control id 9963790
tvp514x 1-005d: invalid control id 9963791
tvp514x 1-005d: invalid control id 9963792
tvp514x 1-005d: invalid control id 9963793
tvp514x 1-005d: invalid control id 9963795
tvp514x 1-005d: invalid control id 9963796
tvp514x 1-005d: invalid control id 9963797
tvp514x 1-005d: invalid control id 9963798
tvp514x 1-005d: invalid control id 9963799
tvp514x 1-005d: invalid control id 9963800
tvp514x 1-005d: invalid control id 9963801
tvp514x 1-005d: invalid control id 9963802
tvp514x 1-005d: invalid control id 9963803
tvp514x 1-005d: invalid control id 9963804
tvp514x 1-005d: invalid control id 9963805
tvp514x 1-005d: invalid control id 9963806
tvp514x 1-005d: invalid control id 9963807
tvp514x 1-005d: invalid control id 9963808
tvp514x 1-005d: invalid control id 9963809
0:00:01.840125593 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:521:gst_v4l2src_fill_format_list:<v4l2src0> getting src form
at enumerations
0:00:01.841753218 1212 0x15018 LOG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:539:gst_v4l2src_fill_format_list:<v4l2src0> index: 0
0:00:01.842767635 1212 0x15018 LOG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:540:gst_v4l2src_fill_format_list:<v4l2src0> type: 1
0:00:01.843754593 1212 0x15018 LOG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:541:gst_v4l2src_fill_format_list:<v4l2src0> flags: 000
00000
0:00:01.844760926 1212 0x15018 LOG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:542:gst_v4l2src_fill_format_list:<v4l2src0> description: 'YC
bCr 4:2:2 Interleaved UYVY'
0:00:01.845786676 1212 0x15018 LOG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:544:gst_v4l2src_fill_format_list:<v4l2src0> pixelformat: UYV
Y
0:00:01.846890426 1212 0x15018 LOG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:539:gst_v4l2src_fill_format_list:<v4l2src0> index: 1
0:00:01.847885926 1212 0x15018 LOG v4l2src ../../../src/sys/v
0:00:01.849084052 1212 0x15018 LOG v4l2src ../../../src/sys/v
0:00:01.850080052 1212 0x15018 LOG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:542:gst_v4l2src_fill_format_list:<v4l2src0> description: 'Y/
CbCr 4:2:0 - Semi planar'
0:00:01.851108385 1212 0x15018 LOG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:544:gst_v4l2src_fill_format_list:<v4l2src0> pixelformat: NV1
2
0:00:01.852344885 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:553:gst_v4l2src_fill_format_list:<v4l2src0> got 2 format(s)
0:00:01.853595593 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:944:gst_v4l2src_probe_caps_for_format:<v4l2src0> Enumerating
frame sizes
0:00:01.854834052 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:1038:gst_v4l2src_probe_caps_for_format:<v4l2src0> Failed to
enumerate frame sizes for pixelformat UYVY (Invalid argument)
0:00:02.059255633 1212 0x15018 ERROR v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:589:gst_v4l2src_get_resolution: failed to query standard, Vi
deo input connected ?
0:00:02.060265258 1212 0x15018 WARN v4l2src ../../../src/sys/v
4l2/v4l2src_calls.c:697:gst_v4l2src_get_resolution: failed to detect video stand
ard
0:00:02.269279382 1212 0x15018 ERROR v4l2src ../../../src/sys/v
0:00:02.270272590 1212 0x15018 WARN v4l2src ../../../src/sys/v
0:00:02.271613673 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
0:00:02.272822798 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
enumerate frame sizes for pixelformat NV12 (Invalid argument)
0:00:02.479243048 1212 0x15018 ERROR v4l2src ../../../src/sys/v
0:00:02.480253298 1212 0x15018 WARN v4l2src ../../../src/sys/v
0:00:02.689234044 1212 0x15018 ERROR v4l2src ../../../src/sys/v
0:00:02.690235461 1212 0x15018 WARN v4l2src ../../../src/sys/v
0:00:02.691459544 1212 0x15018 INFO v4l2src ../../../src/sys/v
4l2/gstv4l2src.c:889:gst_v4l2src_get_caps:<v4l2src0> probed caps: 0xbd500
0:00:02.696428877 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
4l2/gstv4l2src.c:474:gst_v4l2src_negotiate:<v4l2src0> caps of src: 0xbd800
0:00:02.702205836 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
4l2/gstv4l2src.c:481:gst_v4l2src_negotiate:<v4l2src0> caps of peer: 0xbd7c0
0:00:02.703444586 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
4l2/gstv4l2src.c:491:gst_v4l2src_negotiate:<v4l2src0> peer: 0xbd620
0:00:02.704760461 1212 0x15018 DEBUG v4l2src ../../../src/sys/v
4l2/gstv4l2src.c:503:gst_v4l2src_negotiate:<v4l2src0> intersect: (nil)
WARNING: from element /GstPipeline:pipeline0/GstDmaiperf:dmaiperf0: Could not ge
t/set settings from/on resource.
../../src/src/gsttidmaiperf.c(273): gst_dmaiperf_start (): /GstPipeline:pipeline
0/GstDmaiperf:dmaiperf0:
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Could not negoti
ate format
../../../../src/libs/gst/base/gstbasesrc.c(2540): gst_base_src_start (): /GstPip
eline:pipeline0/GstV4l2Src:v4l2src0:
Check your filtered caps, if any
/ #
Regards Marian