We currently are working on a custom board we built which uses the dm368 for encoding. We have also built a custom input board. We used the Leopardboard with the TVP7002 as a development board and had no issues whatsoever. We have been using the RidgeRun Pro sdk as our actual distro.
Our plan was to use this Leopardboard + TVP7002 as a a basis for our custom part.
The actual input source on our custom board is an FPGA which sends out 4:2:2 CbCr to the VPFE. Right now we are just using a video test pattern generated in the FPGA and sending it out. It is a 720P60 pattern using the following numbers:
Visible area 1280 720
Front porch 110 5
Sync pulse 40 5
Back porch 220 20
Whole line/frame 1650 750
Unfortunately we have had no luck with the feed being caught on the other end. The VPFE seems to be getting no data.
What i used as the driver was a modified version of the tvp7002.c source. Since our FPGA is already set up to stream, I have no use for any of the I2C register writes that are done to configure the tvp7002. Hence I modified the i2c write function to always return a 0 to prevent any error returns and breaks. I also had to comment out the reading of the revision of the tvp7002 since our custom input obviously isnt a valid TVP revision.
I set the id= V4L2_STD_720P_60 and run the tvp7002_setstd() function. This eventually results in everything running correctly, registering the v4l2 subdevice with v4l2_i2c_subdev_init() and tvp7002_initialize()
The device gets registered and is found in /dev/video0.
But then when running my gstreamer pipeline of:
gst-launch -e v4l2src always-copy=false chain-ipipe=true input-src=compontent ! video/x-raw-yuv, width=1280, height=720, format=(fourcc)NV12, framerate=(fraction)60/1 ! dmaiaccel ! queue ! dmaienc_h264 encodingpreset=2 ratecontrol=4 ! mpegtsmux name=mux ! rtpmp2tpay name=pay0
it does not work. I enabled the vpfe debug messages in the kernel command line and I get the following when running the pipeline:
_input
vpfe_dev->std_info.active_pixels: 720
vpfe_dev->std_info.active_lines: 480
tvp7002_g_fmt_cap
Returning 0: tvp7002_g_fmt_cap
PixFormat: 1498831189
setting to progressive
vpfe-capture vpfe-capture: vpfe_g_input
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_queryctrl
vpfe-capture vpfe-capture: vpfe_querystd
tvp7002 1-005c: Write: retry ... 0 //Not I still attempt to write and this is why these are displayed. I always return 0 though so it continues to run without issues
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: I2C read fails...Lines per frame low
tvp7002 1-005c: I2C read fails...Lines per frame high
tvp7002 1-005c: querystd, erorxxx, val = 0, val1 = ffffff87
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
vpfe-capture vpfe-capture: vpfe_s_std
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
tvp7002 1-005c: Write: retry ... 0
vpfe_dev->std_info.active_pixels: 1280
vpfe_dev->std_info.active_lines: 720
PixFormat: 1498831189
vpfe-capture vpfe-capture: vpfe_g_input
vpfe-capture vpfe-capture: vpfe_enum_fmt_vid_cap
vpfe-capture vpfe-capture: vpfe_enum_fmt_vid_cap
vpfe-capture vpfe-capture: vpfe_enum_fmt_vid_cap
vpfe-capture vpfe-capture: vpfe_enum_framesizes
vpfe-capture vpfe-capture: vpfe_try_fmt_vid_cap
vpfe-capture vpfe-capture: width = 1, height = 1, bpp = 2
width = 1, height = 1, bpp = 2
vpfe-capture vpfe-capture: adjusted width = 16, height = 1, bpp = 2, bytesperline = 32, sizeimage = 32
adjusted width = 16, height = 1, bpp = 2, bytesperline = 32, sizeimage = 32
vpfe-capture vpfe-capture: vpfe_try_fmt_vid_cap
vpfe-capture vpfe-capture: width = 32768, height = 32768, bpp = 2
width = 32768, height = 32768, bpp = 2
vpfe-capture vpfe-capture: adjusted width = 2176, height = 2197, bpp = 2, bytesperline = 4352, sizeimage = 9561344
adjusted width = 2176, height = 2197, bpp = 2, bytesperline = 4352, sizeimage = 9561344
vpfe-capture vpfe-capture: vpfe_enum_framesizes
vpfe-capture vpfe-capture: vpfe_try_fmt_vid_cap
vpfe-capture vpfe-capture: width = 1, height = 1, bpp = 1
width = 1, height = 1, bpp = 1
vpfe-capture vpfe-capture: adjusted width = 32, height = 1, bpp = 1, bytesperline = 32, sizeimage = 48
adjusted width = 32, height = 1, bpp = 1, bytesperline = 32, sizeimage = 48
vpfe-capture vpfe-capture: vpfe_try_fmt_vid_cap
vpfe-capture vpfe-capture: width = 32768, height = 32768, bpp = 1
width = 32768, height = 32768, bpp = 1
vpfe-capture vpfe-capture: adjusted width = 2176, height = 2197, bpp = 1, bytesperline = 2176, sizeimage = 7171008
adjusted width = 2176, height = 2197, bpp = 1, bytesperline = 2176, sizeimage = 7171008
vpfe-capture vpfe-capture: vpfe_g_fmt_vid_cap
vpfe-capture vpfe-capture: vpfe_s_fmt_vid_cap
vpfe-capture vpfe-capture: width = 1280, height = 720, bpp = 1
width = 1280, height = 720, bpp = 1
vpfe-capture vpfe-capture: adjusted width = 1280, height = 720, bpp = 1, bytesperline = 1280, sizeimage = 1382400
adjusted width = 1280, height = 720, bpp = 1, bytesperline = 1280, sizeimage = 1382400
vpfe-capture vpfe-capture: vpfe_reqbufs
vpfe-capture vpfe-capture: vpfe_buffer_setup
vpfe-capture vpfe-capture: count=3, size=1382400
vpfe-capture vpfe-capture: vpfe_querybuf
vpfe-capture vpfe-capture: vpfe_mmap
vpfe-capture vpfe-capture: vpfe_querybuf
vpfe-capture vpfe-capture: vpfe_mmap
vpfe-capture vpfe-capture: vpfe_querybuf
vpfe-capture vpfe-capture: vpfe_mmap
vpfe-capture vpfe-capture: vpfe_qbuf
vpfe-capture vpfe-capture: vpfe_videobuf_prepare
vpfe-capture vpfe-capture: vpfe_qbuf
vpfe-capture vpfe-capture: vpfe_videobuf_prepare
vpfe-capture vpfe-capture: vpfe_qbuf
vpfe-capture vpfe-capture: vpfe_videobuf_prepare
vpfe-capture vpfe-capture: vpfe_streamon
tvp7002 1-005c: Write: retry ... 0
vpfe-capture vpfe-capture: vpfe_calculate_offsets
ipipe_set_resizer, resizer - A enabled
rsz_set_output_address 0
vpfe-capture vpfe-capture: vpfe_poll
And then it just sits and nothing happens. I tried doing v4l2src piped directly to a filesink and no data is outputted.
I read a lot of the vpfe registers and saw that a lot of the interrupts were not happening. here is the printout of the ISP registers for the interrupt status.
00000 0800 4C18 007F 0000 0002 0000 0200 0030
00010 0100 0B1F 0F0D 1F0A 0015 0000 0000 0000
00020 0000 0000 0000 0000 0000 0000
Which would lead me to believe that the video signal we are generating is not matching what the driver is expecting or we are getting no signal at all. But we have made our video signal match the tvp7002 signal seen on a scope in hopes of basically mimicking exactly what the TVP would output. Yet it still does not work.
Is there anything we are missing that I should look into? We have ensured that the polarity of our syncs match the polarity the vpfe is expecting and everything. I assumed that if the VPFE and the source both had the same polarities, that at least something would trigger informing us that a sync was present. Again unless it just isn't getting a signal, in which case I may need help debugging.
Is there anything anyone can think off that we may be missing? Or are there other items I can look at to help in debugging?
Is there a way to see if the vpfe is getting any data whatsoever from our source, even if it is incorrect data?
We have hooked up the FPGA to a scope and can confirm it is sending the data we expect so it isnt dead on that side. We may try to hook up a scope to the processor to see if the stream is actually travelling. The VPFE seems to just not be receiving anything but we don't know for sure if it isn't getting anything, or is getting incorrect data or is setup incorrectly.
Any help/insight whatsoever would be greatly appreciated. We have been trying to figure it out for a few days now and havent gotten far. If more data is needed I will be more than willing to provide it.