I have a Leopardboard DM365 (based on TI's DM365), on which I try play a video to the Component output.
I use RidgeRun's SDK, which is based on TI's dvsdk3.10.00.19.
I took
the decode demo from dvsdk, which run's fine on DM365EVM, stripped out
the UI, IR and keyboard parts from the code and tried to run the demo on
Leopardboard DM365.
It does not run. The control thread keeps running, but the other threads get stuck.
The display thread get stuck on dvsdk's Display_get() and I believe that this is the root of the problem.
I tried to dig into the kernel and found out that eventually it waits forever on videobuf_waiton() in the kernel (Linux kernel 2.6.32 path: linux-2.6.32/drivers/media/video/videobuf-core.c).
Here are the boot arguments (kernel cmd) I used:
setenv bootargs mem=40M davinci_enc_mngr.ch0_output=COMPONENT davinci_enc_mngr.ch0_mode=720P-60 davinci_display.cont2_bufsize=6291456 console=ttyS0,115200n8 root=/dev/nfs rw nfsroot=10.0.0.1:/home/asaf/leopard_dm365/sdk/leo365/fs/fs ip=10.0.0.2 video=davincifb:vid0=off:vid1=off:osd0=1280×720x16,14400K dm365_imp.oper_mode=0
The patch that I used to remove the EVM specific parts from the code and to add debug messages can be found in the following URL:
I used as test files the video files from TI - davincieffect.[mpeg4,264]
To run the decoder I had to modify a little bit the loadmodules.sh script. The modified script is appended to the end of this message.
./decode -v data/videos/davincieffect.264 -y3 -o -O component
I also tried
./decode -v data/videos/davincieffect.mpeg4 -y3 -o -O component
with and without the parameters after -y3
I have no idea why the display thread gets stuck in kernel code.
I have been struggling with this board for more than a month already... I would be very happy to solve this issue.
Asaf Gery
# WARNING: this file is generated automatically, and any change will be overwritten by the Makefile
# The reserved memory that is used by cmemk is cut from the end of RAM by the mem=XX param of the kernel
rmmod cmemk 2>/dev/null
rmmod irqk 2>/dev/null
rmmod edmak 2>/dev/null
rmmod dm365mmap 2>/dev/null
PHYS_START=`printf '0x%x' $((\`sed -e 's/.*mem=\(.*\)M .*/\1 * 1024 * 1024/' /proc/cmdline\` + 2147483648 \`grep -q y.cont2 /proc/cmdline && sed -e 's/.*y.cont2_bufsize=\([0-9]*\) .*/+ \1/' /proc/cmdline\` \`grep -q re.cont /proc/cmdline && sed -e 's/.*e.cont_bufsize=\([0-9]*\) .*/+ \1/' /proc/cmdline\`))`
PHYS_END=`printf '0x%x' $((\`sed -e 's/.*mem=\(.*\)M .*/\1 * 1024 * 1024/' /proc/cmdline\` + 2147483648 + 77594624))`
echo "Loading CMEM from $PHYS_START to $PHYS_END"
modprobe edmak.ko
modprobe irqk.ko
modprobe dm365mmap.ko
rm -f /dev/cmem ; mknod /dev/cmem c `awk '$2 ~ /cmem/ {print $1}' /proc/devices` 0
rm -f /dev/edma ; mknod /dev/edma c `awk '$2 ~ /edma/ {print $1}' /proc/devices` 0
rm -f /dev/irqk ; mknod /dev/irqk c `awk '$2 ~ /irqk/ {print $1}' /proc/devices` 0
rm -f /dev/dm365mmap ; mknod /dev/dm365mmap c `awk '$2 ~ /dm365mmap/ {print $1}' /proc/devices` 0
lsmod