mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 13:33:13 -07:00
Use SeqNum Arithmetic in Video Receiver
This commit is contained in:
parent
d9cb444ec6
commit
6ca1a80758
2 changed files with 12 additions and 10 deletions
|
@ -22,6 +22,7 @@
|
||||||
#include "thread.h"
|
#include "thread.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "gkcrypt.h"
|
#include "gkcrypt.h"
|
||||||
|
#include "seqnum.h"
|
||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
@ -71,11 +72,11 @@ typedef struct chiaki_takion_t
|
||||||
|
|
||||||
typedef struct chiaki_takion_av_packet_t
|
typedef struct chiaki_takion_av_packet_t
|
||||||
{
|
{
|
||||||
uint16_t packet_index;
|
ChiakiSeqNum16 packet_index;
|
||||||
uint16_t frame_index;
|
ChiakiSeqNum16 frame_index;
|
||||||
bool uses_nalu_info_structs;
|
bool uses_nalu_info_structs;
|
||||||
bool is_video;
|
bool is_video;
|
||||||
uint16_t unit_index;
|
ChiakiSeqNum16 unit_index;
|
||||||
uint16_t units_in_frame_total; // regular + units_in_frame_additional
|
uint16_t units_in_frame_total; // regular + units_in_frame_additional
|
||||||
uint16_t units_in_frame_additional;
|
uint16_t units_in_frame_additional;
|
||||||
uint32_t codec;
|
uint32_t codec;
|
||||||
|
|
|
@ -63,9 +63,9 @@ CHIAKI_EXPORT void chiaki_video_receiver_stream_info(ChiakiVideoReceiver *video_
|
||||||
|
|
||||||
CHIAKI_EXPORT void chiaki_video_receiver_av_packet(ChiakiVideoReceiver *video_receiver, ChiakiTakionAVPacket *packet)
|
CHIAKI_EXPORT void chiaki_video_receiver_av_packet(ChiakiVideoReceiver *video_receiver, ChiakiTakionAVPacket *packet)
|
||||||
{
|
{
|
||||||
// TODO: roll over
|
ChiakiSeqNum16 frame_index = packet->frame_index;
|
||||||
int32_t frame_index = (int32_t)packet->frame_index;
|
if(video_receiver->frame_index_cur >= 0
|
||||||
if(frame_index < video_receiver->frame_index_cur)
|
&& chiaki_seq_num_16_gt(frame_index, (ChiakiSeqNum16)video_receiver->frame_index_cur))
|
||||||
{
|
{
|
||||||
CHIAKI_LOGW(video_receiver->log, "Video Receiver received old frame packet\n");
|
CHIAKI_LOGW(video_receiver->log, "Video Receiver received old frame packet\n");
|
||||||
return;
|
return;
|
||||||
|
@ -88,9 +88,10 @@ CHIAKI_EXPORT void chiaki_video_receiver_av_packet(ChiakiVideoReceiver *video_re
|
||||||
video_receiver->session->video_sample_cb(profile->header, profile->header_sz, video_receiver->session->video_sample_cb_user);
|
video_receiver->session->video_sample_cb(profile->header, profile->header_sz, video_receiver->session->video_sample_cb_user);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(frame_index > video_receiver->frame_index_cur)
|
if(video_receiver->frame_index_cur < 0 ||
|
||||||
|
chiaki_seq_num_16_gt(frame_index, (ChiakiSeqNum16)video_receiver->frame_index_cur))
|
||||||
{
|
{
|
||||||
if(video_receiver->frame_index_prev != video_receiver->frame_index_cur)
|
if(video_receiver->frame_index_cur >= 0 && video_receiver->frame_index_prev != video_receiver->frame_index_cur)
|
||||||
{
|
{
|
||||||
uint8_t *frame;
|
uint8_t *frame;
|
||||||
size_t frame_size;
|
size_t frame_size;
|
||||||
|
@ -110,8 +111,8 @@ CHIAKI_EXPORT void chiaki_video_receiver_av_packet(ChiakiVideoReceiver *video_re
|
||||||
video_receiver->frame_index_prev = video_receiver->frame_index_cur;
|
video_receiver->frame_index_prev = video_receiver->frame_index_cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(frame_index > video_receiver->frame_index_cur + 1
|
if(chiaki_seq_num_16_gt(frame_index, (ChiakiSeqNum16)video_receiver->frame_index_cur + 1)
|
||||||
&& !(frame_index == 1 && video_receiver->frame_index_cur == -1)) // ok for frame 1
|
&& !(frame_index == 1 && video_receiver->frame_index_cur < 0)) // ok for frame 1
|
||||||
{
|
{
|
||||||
CHIAKI_LOGW(video_receiver->log, "Skipped from frame %d to %d\n", (int)video_receiver->frame_index_cur, (int)frame_index);
|
CHIAKI_LOGW(video_receiver->log, "Skipped from frame %d to %d\n", (int)video_receiver->frame_index_cur, (int)frame_index);
|
||||||
// TODO: fake frame?
|
// TODO: fake frame?
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue