Custom camera, Incomplete frame

Hello,

I’m trying to build a fake gigeV camera in Python to help me understand the standard a bit better.
Ultimately I want to implement it in C++.
So far I have implemented a basic version of the gvcp ( without packet resend) and a basic version of gvsp.

For the gvsp I’m getting

[12:27:15.440] 🅸 stream-thread> [GvStream::check_frame_completion] Incomplete frame 69

I have validated the packets send with Wireshark, and they are identical to a real cam (AV Mako G-319C) except for the payload of course. Only difference being the dont-fragment bit in the IPv4 header
edit: also tried with correct DF flag, no luck.
Normally the packet resend is triggered on the control channel but according to Wireshark no such packet is sent.

Here is the log of arv-device-test -d device,stream --auto

Looking for the first available camera
[12:24:29.068] 🅸 device> [GvDevice::new] Interface address = 192.168.0.177
[12:24:29.068] 🅸 device> [GvDevice::new] Device address = 192.168.0.108
[12:24:29.069] 🅸 device> [GvDevice::load_genicam] xml url = 'local:test.zip;1C400;A000' at 0x200
[12:24:29.069] 🅸 device> [GvDevice::load_genicam] Xml address = 0x1c400 - size = 0xa000 - test.zip
[12:24:29.116] 🅸 device> [GvDevice::load_genicam] Zipped xml data
[12:24:29.125] 🅸 device> [GvDevice::new] Device endianness = big
[12:24:29.125] 🅸 device> [GvDevice::new] Packet resend     = no
[12:24:29.125] 🅸 device> [GvDevice::new] Write memory      = yes
[12:24:29.125] 🅸 device> [GvDevice::new] Legacy endianness handling = yes
vendor        = test
model         =  test                    
device id     = 123456789
sensor width  = 0
sensor height = 0
image width   = 20 (max:640)
image height  = 20 (max:480)
horizontal binning  = 1 (min:1 - max:4)
vertical binning    = 1 (min:1 - max:4)
exposure            = 14989 (min:29 - max:8.58993e+07)
exposure auto mode  = Off
gain                = 0 (min:0 - max:400)
gain auto mode      = Off
trigger selector    = FrameStart
reverse x           = FALSE
[12:24:29.134] 🅸 device> [GvDevice::create_stream] Number of stream channels = 1
[12:24:29.134] 🅸 device> [GvDevice::auto_packet_size] No GevSCPSFireTestPacket feature found
[12:24:29.135] 🅸 device> [GvStream::stream_new] Packet size = 8228 byte(s)
[12:24:29.138] 🅸 stream> [GvStream::stream_new] Destination stream port = 42942
[12:24:29.138] 🅸 stream> [GvStream::stream_new] Source stream port = 10010
[12:24:29.138] 🅸 stream> [GvStream::loop] Standard socket method
payload size  = 796704 (0xc2820)
stream port = 42942 (42942)
Frame rate = 28 Hz
Frame rate = 30 Hz
^Cstream port = 42942 (42942)
Processed buffers = 0
Failures          = 61
Underruns         = 3
[12:24:31.296] 🅸 stream>     bins    ;frame_retent; packet_time;inter_packet
                                    0;           0;         186;         124
                                 2000;           0;           0;           0
                                 4000;           0;           0;           0
                                 6000;           0;           0;           0
                                 8000;           0;           0;           0
                                10000;           0;           0;           0
                                12000;           0;           0;           0
                                14000;           0;           0;           0
                                16000;           0;           0;           0
                                18000;           0;           0;           0
                                20000;           0;           0;           0
                                22000;           0;           0;           0
                                24000;           0;           0;           0
                                26000;           0;           0;           0
                                28000;           0;           0;           0
                                30000;           2;           0;           0
                                32000;          24;           0;           0
                                34000;          32;           0;           0
                                36000;           3;           0;           0
                                38000;           1;           0;           0
                         -------------
                         >=     40000;           0;           0;           0
                         <          0;           0;           0;           0
                         min         :       31110;           0;           0
                         max         :       38186;           0;           0
                         last max at :          58;           0;           0
                         counter     :          62:         186:         124
[12:24:31.296] 🅸 stream> [GvStream::finalize] n_completed_buffers    = 0
[12:24:31.296] 🅸 stream> [GvStream::finalize] n_failures             = 61
[12:24:31.296] 🅸 stream> [GvStream::finalize] n_underruns            = 3
[12:24:31.296] 🅸 stream> [GvStream::finalize] n_timeouts             = 0
[12:24:31.296] 🅸 stream> [GvStream::finalize] n_aborteds             = 1
[12:24:31.296] 🅸 stream> [GvStream::finalize] n_missing_frames       = 1
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_size_mismatch_errors = 0
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_received_packets     = 189
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_missing_packets      = 5917
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_error_packets        = 0
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_ignored_packets      = 3
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_resend_requests      = 0
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_resent_packets       = 0
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_resend_ratio_reached = 0
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_resend_disabled      = 0
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_duplicated_packets   = 0
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_transferred_bytes    = 29016
[12:24:31.297] 🅸 stream> [GvStream::finalize] n_ignored_bytes        = 468
[12:24:31.297] 🅸 stream> [Stream::finalize] Flush 29 buffer[s] in input queue
[12:24:31.297] 🅸 stream> [Stream::finalize] Flush 1 buffer[s] in output queue

I know I’m asking for a lot here, so thank you for even looking at this

Hi,

Your camera simulator does not set the PacketResend capability bit.
You should try to enable stream-thread debugging, it will my be show some of the errors happening during the stream reception.