Commit Graph

137 Commits

Author SHA1 Message Date
Isaac Connor 7b5ab0adae fix index -> image_index 2021-10-17 15:13:14 -04:00
Isaac Connor ed901b0235 Improve debug logging of packetqueue cleaning 2021-10-17 15:01:55 -04:00
Isaac Connor 6b8dc07018 wait won't wake up other threads, so notify first. Since we have the lock, this should be ok 2021-09-15 14:10:52 -04:00
Isaac Connor ef74294d32 More properly fix the threading lock. Instead of waiting on a packet, release it and wait on the packetqueue. 2021-09-15 14:10:25 -04:00
Isaac Connor ae90ebf74f Return early if packetqueue is empty instead of getting the lock. Return early in clear() if we are not initialised 2021-09-04 12:16:18 -04:00
Isaac Connor a903ab5d09 Introduce get_packet_and_increase_it just so we can lose an extra grab lock and function calls, etc. In queuePacket, if the queue is full, WAIT instead of failing to queue. 2021-06-08 14:03:37 -04:00
Isaac Connor 61de5eaae5 More debugging around clearQueue. return early if deleting 2021-06-08 14:00:27 -04:00
Isaac Connor 70946921bc fix code to release lock before notifying 2021-05-13 08:54:55 -04:00
Isaac Connor 76171fcc43 If not doing passthrough, don't need to find the nearest keyframe 2021-05-11 10:22:40 -04:00
Isaac Connor 3cd9bdccd5 style and performance improvements reported by cppcheck 2021-05-09 16:39:38 -04:00
Isaac Connor 2cf6ad8089 Switch ZMPacket * to a shared_ptr<ZMPacket>. This is so that in LockedPacket we can unlock and then notify and be confident that packet_ won't have been deleted. Change ZMPacket->timestamp to be a timeval instead of timeval *. This might not have been necessary but I like it. No longer cuse the ZMPacket object to wrap the shared image buffers and timestamps. Use a vector for image_buffers. 2021-05-08 21:14:20 -04:00
Isaac Connor 4685c63fab Add early return if pktQueue is empty so we can assume that it isn't below. Add notifications if we wake up and find that we have terminated so as to wake up any other waiters. Fixes failure to terminate when deinterlacing because both decoder and analysis are waiting 2021-05-07 14:04:51 -04:00
Isaac Connor 43f2f195f1 Fix a case in get_event_start_packet_it where if no pre_event_count we log an error and maybe don't start on a keyframe 2021-05-07 09:10:26 -04:00
Peter Keresztes Schmidt 68bedfe48f Fix logging format string mismatches
* Remove SZFMTD format macro and use %zu instead for size_t. %zu is understood by every compiler nowadays.
2021-04-30 00:26:24 +02:00
Isaac Connor a9ca6f8c13 Check for packets in the queue before we start traversing it to prevent crash 2021-04-28 12:12:24 -04:00
Isaac Connor 408e0963a0 Improve code and logging 2021-04-20 23:06:17 -04:00
Isaac Connor 07b3a7aa57 fix memleak caused by not deleting the packetlock when we can't get the lock 2021-04-17 12:50:26 -04:00
Isaac Connor 5ab9a48599 Don't grab lock in increment_it if we are deleting cuz we will hang 2021-04-17 12:50:26 -04:00
Isaac Connor 9b4fcf4e92 Only complain about finding an iterator if we havn't found a new keyframe 2021-04-14 13:00:16 -04:00
Isaac Connor cb7e365e35 Add locking increment_it. I think we need it. 2021-04-06 13:55:09 -04:00
Isaac Connor 8aceccd496 improve the message when max video packets is exceeded 2021-04-01 11:53:57 -04:00
Isaac Connor f52ead7cda introduce packetqueue::unlock to unlock packets and notify anyone waiting. Also check for iterators pointing to packets when not keeping keyframes. Loop with waiting when we can't lock a packet 2021-04-01 11:52:25 -04:00
Isaac Connor 22d713cd9c fix packetqueue corruption. Can't wait after grabbing the packet. 2021-03-31 16:49:19 -04:00
Isaac Connor ddb62a27c6 Fix queue full message. Remove test for empty queue. We don't care if the queue is empty. Improve debug logging. 2021-03-31 16:49:19 -04:00
Isaac Connor a1364a2b2b delete packet_lock if failed trylock 2021-03-30 16:14:42 -04:00
Isaac Connor 8e40067d13 Update locks 2021-03-26 17:01:45 -04:00
Isaac Connor 52cb182ae3 Load max_image_buffer_count in monitor and set it in packetqueue. rename max_video_packet_count to pre_event_video_count in packetqueue and adjust logic. When queuing packets check to ensure that we aren't going over. Delete packets from front if possible, do not queue packet if not possible 2021-03-26 14:26:37 -04:00
Isaac Connor e51fe9eb4a add tail_count to encode option 2021-03-22 21:31:09 -04:00
Isaac Connor 3f3bc50acb Add keep_keyframes setting. When NOT doing passthrough we don't actually have to store all packets since last keyframe, so don't do it. SImplifies clearPackets() logic a lot and will save ram for those people. 2021-03-22 12:04:32 -04:00
Isaac Connor 6d9a4ed661 If the analysis thread is falling behind, we can't count the packets after it in the number of packets to keep in queue. So figure out how many there are and add that to the max_video_packet count to keep so that we always have enough to satisfy pre_event_count 2021-03-21 12:28:33 -04:00
Isaac Connor 0b4f04c4d5 notify in clear before taking lock to increase chance of other threads exiting. Handle terminate case in get_packet 2021-03-17 12:48:42 -04:00
Isaac Connor 6a2e237902 Fix delete packet before deleting lock on packet 2021-03-17 10:07:03 -04:00
Isaac Connor 9903e909af Rework locking in ZMPacket by using a new class called ZMLockedPacket. 2021-03-15 17:05:30 -04:00
Isaac Connor b238a2bc25 Implement decoder thread, locking is broken 2021-03-15 15:08:43 -04:00
Isaac Connor 786adc5511 Spacing 2021-03-11 13:48:52 -05:00
Isaac Connor 1ff4e5bc8d Fix not keeping enough video packets in packetqueue to satisfy pre_event_count 2021-03-05 10:02:21 -05:00
Isaac Connor f986b6a5e2 Clear packet counts on clear so that camera restarts don't incremenet the stream_id's and cause memory consumption 2021-03-04 07:46:39 -05:00
Isaac Connor cf27482ebe Change api of packetqueue. stream_index will not be incoming stream_index it will be a packetqueue specific stream_index. 2021-03-03 09:52:13 -05:00
Isaac Isaac f2143fd092 Improve debug logs 2021-02-23 13:12:09 -05:00
Isaac Connor 507cbf7f0f Remove some debugging 2021-02-19 15:56:42 -05:00
Isaac Connor 415dd83d06 spacing 2021-02-19 12:44:24 -05:00
Isaac Connor 964b3dd05a Merge branch 'master' of github.com:zoneminder/ZoneMinder 2021-02-19 09:03:31 -05:00
Isaac Connor 045cd219f8 Move clear packetqueue logic to it's own function and call it from the analysis thread. 2021-02-18 19:25:40 -05:00
Isaac Connor 78a5e78e4c Add locking to get_event_start_it. Packets could get deleted while we are figuring this out. 2021-02-18 16:59:17 -05:00
Isaac Connor 127e15ba3a Don't crash if we ask for packet count of an invalid stream 2021-02-18 13:47:27 -05:00
Isaac Connor b40a31d76f Move content of setMaxVideoPcakets into .cpp 2021-02-18 11:54:50 -05:00
Isaac Connor 393e8b582a Move the logic of whether to queue a packet into packetqueue::queuePacket 2021-02-10 14:11:00 -05:00
Isaac Connor 01e69569eb Placement of -- matters. 2021-02-08 09:04:06 -05:00
Peter Keresztes Schmidt 938676b129 ffmpeg: exit dumpPacket early if debug logging is not enabled 2021-02-07 11:58:17 +01:00
Peter Keresztes Schmidt 0dbc39ee25 Cleanup and reorganize includes
With this commit a unified structure for includes is introduced.
The general rules:
 * Only include what you need
 * Include wherever possible in the cpp and forward-declare in the header

 The includes are sorted in a local to global fashion. This means for the include order:
  0. If cpp file: The corresponding h file and an empty line
  1. Includes from the project sorted alphabetically
  2. System/library includes sorted alphabetically
  3. Conditional includes
2021-02-04 18:02:01 +01:00