I've tweaked my gstreamer pipeline to produce an output video at a lower resolution and frame-rate.
gst-launch udpsrc multicast-group=239.255.0.1 port=1841 ! video/mpegts ! mpegtsdemux ! video/x-h264 ! TIViddec2 codecName=h264dec engineName=codecServer numOutputBufs=3 framerate=30/1 ! queue ! videorate ! videoscale method=0 ! video/x-raw-yuv,framerate=10/1,height=240,width=320 ! TIVidenc1 codecName=h264enc engineName=codecServer rateControlPreset=3 bitRate=358400 genTimeStamps=true framerate=10/1 contiguousInputFrame=false ! dmaiperf engine-name=codecServer print-arm-load=true ! rtph264pay name=pay0 ! udpsink host=239.255.0.2 port=8000
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
INFO:
gsttidmaiperf.c(302): gst_dmaiperf_start (): /GstPipeline:pipeline0/GstDmaiperf:dmaiperf0:
Printing DSP load every 1 second...
Setting pipeline to PLAYING ...
New clock: MpegTSClock
INFO:
Timestamp: 0:55:45.630676276; bps: 0; fps: 0; CPU: 0; DSP: 25; mem_seg: DDR2; base: 0x87c42e80; size: 0x20000; maxblocklen: 0xd840; used: 0x127c0; mem_seg: DDRALGHEAP; base: 0x85a00000; size: 0x2000000; maxblocklen: 0x28a710; used: 0x1d75550; mem_seg: L1DSRAM; base: 0x10f04000; size: 0x10000; maxblocklen: 0x0; used: 0x10000;
INFO:
Timestamp: 0:55:46.699462897; bps: 23856; fps: 9; CPU: 52; DSP: 86; mem_seg: DDR2; base: 0x87c42e80; size: 0x20000; maxblocklen: 0xd840; used: 0x127c0; mem_seg: DDRALGHEAP; base: 0x85a00000; size: 0x2000000; maxblocklen: 0x28a710; used: 0x1d75550; mem_seg: L1DSRAM; base: 0x10f04000; size: 0x10000; maxblocklen: 0x0; used: 0x10000;
INFO:
Timestamp: 0:55:47.772338873; bps: 18107; fps: 13; CPU: 74; DSP: 84; mem_seg: DDR2; base: 0x87c42e80; size: 0x20000; maxblocklen: 0xd840; used: 0x127c0; mem_seg: DDRALGHEAP; base: 0x85a00000; size: 0x2000000; maxblocklen: 0x28a710; used: 0x1d75550; mem_seg: L1DSRAM; base: 0x10f04000; size: 0x10000; maxblocklen: 0x0; used: 0x10000;
INFO:
Timestamp: 0:55:49.549469001; bps: 2409; fps: 1; CPU: 18; DSP: 4; mem_seg: DDR2; base: 0x87c42e80; size: 0x20000; maxblocklen: 0xd840; used: 0x127c0; mem_seg: DDRALGHEAP; base: 0x85a00000; size: 0x2000000; maxblocklen: 0x28a710; used: 0x1d75550; mem_seg: L1DSRAM; base: 0x10f04000; size: 0x10000; maxblocklen: 0x0; used: 0x10000;
INFO:
Timestamp: 0:55:50.646240240; bps: 17755; fps: 11; CPU: 81; DSP: 68; mem_seg: DDR2; base: 0x87c42e80; size: 0x20000; maxblocklen: 0xd840; used: 0x127c0; mem_seg: DDRALGHEAP; base: 0x85a00000; size: 0x2000000; maxblocklen: 0x28a710; used: 0x1d75550; mem_seg: L1DSRAM; base: 0x10f04000; size: 0x10000; maxblocklen: 0x0; used: 0x10000;
INFO:
Timestamp: 0:55:51.664520270; bps: 17668; fps: 13; CPU: 70; DSP: 79; mem_seg: DDR2; base: 0x87c42e80; size: 0x20000; maxblocklen: 0xd840; used: 0x127c0; mem_seg: DDRALGHEAP; base: 0x85a00000; size: 0x2000000; maxblocklen: 0x28a710; used: 0x1d75550; mem_seg: L1DSRAM; base: 0x10f04000; size: 0x10000; maxblocklen: 0x0; used: 0x10000;
Playback is now pretty smooth. But there are some situations where the pipeline doesn't produce any video at all.
If I start my gstreamer pipeline, and then I begin streaming video over UDP, the pipeline works fine. If I start streaming the UDP video before starting my gstreamer pipeline, no output video is produced. I've captured the output with DMAI_DEBUG=2.
@0x000117c8:[T:0x4030b000] ti.sdo.dmai - [Dmai] Dmai log level set to '2'. Note that calling CERuntime_init after this point may cause unexpected change to DMAI tracing behavior.
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
INFO:
gsttidmaiperf.c(302): gst_dmaiperf_start (): /GstPipeline:pipeline0/GstDmaiperf:dmaiperf0:
Printing DSP load every 1 second...
Setting pipeline to PLAYING ...
0:00:00.343444822 2842 0x16050 WARN bin gstbin.c:2378:gst_bin_do_latency_func:<pipeline0> failed to query latency
New clock: MpegTSClock
@0x00087626:[T:0x43fb0490] ti.sdo.dmai - [Vdec2] Video decoder instance created
@0x000878e4:[T:0x43fb0490] ti.sdo.dmai - [Vdec2] Made XDM_SETPARAMS control call
@0x000879d8:[T:0x43fb0490] ti.sdo.dmai - [Vdec2] Made XDM_GETBUFINFO control call
@0x00087bfe:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Alloc Buffer of size 3225600 at 0x40bd2000 (0x83700000 phys)
@0x00087e23:[T:0x43fb0490] ti.sdo.dmai - [BufTab] Allocating BufTab for 3 buffers
@0x00087f17:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Alloc Buffer of size 1843200 at 0x417d4000 (0x83a14000 phys)
@0x00087f91:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Alloc Buffer of size 1843200 at 0x41b51000 (0x83bd6000 phys)
@0x0008800b:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Alloc Buffer of size 1843200 at 0x43fb1000 (0x83d98000 phys)
@0x007a6516:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Set user pointer 0x40bd2000 (physical 0x83700000)
@0x007a863a:[T:0x43fb0490] ti.sdo.dmai - [Vdec2] VIDDEC2_process() ret -1 inId 0 inUse 0 consumed 113733
@0x007a86b4:[T:0x43fb0490] ti.sdo.dmai - [Vdec2] VIDDEC2_process() non-fatal error 0x1000
@0x007a8710:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Set user pointer 0x40bedc45 (physical 0x8371bc45)
@0x007acd84:[T:0x43fb0490] ti.sdo.dmai - [Vdec2] VIDDEC2_process() ret 0 inId 0 inUse 0 consumed 4966
@0x007acef2:[T:0x43fb0490] ti.sdo.dmai - [Vdec2] Made XDM_GETBUFINFO control call
@0x007acf2f:[T:0x43fb0490] ti.sdo.dmai - [BufTab] Trying to chunk BufTab with 3 buffers of size 1843200 aligned on 4096 to 4 buffers of size 691200
@0x007acf6c:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Set user pointer 0x41b51000 (physical 0x83bd6000)
@0x007acf8a:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Set user pointer 0x41bfa000 (physical 0x83c7f000)
@0x007acfa9:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Set user pointer 0x43fb1000 (physical 0x83d98000)
@0x007acfc7:[T:0x43fb0490] ti.sdo.dmai - [BufTab] New chunked BufTab has 4 buffers, still need 0 buffers
@0x007ad005:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Set user pointer 0x40beefab (physical 0x8371cfab)
@0x007b1c6e:[T:0x43fb0490] ti.sdo.dmai - [Vdec2] VIDDEC2_process() ret 0 inId 0 inUse 0 consumed 5134
@0x007b1ce8:[T:0x43fb0490] ti.sdo.dmai - [Buffer] Set user pointer 0x40bf03b9 (physical 0x8371e3b9)
The log messages from Buffer and Vdec2 repeat continuously, but there are never any logs from Venc1. I also never see the output from dmaiperf. What could cause this pipeline to fail only in some situations?
Brian