producer thread, existing thread
- sync recv() with packetSize
- allocate memory, decrypt_buffer=malloc(get_suggested_cluster_size()*packetSize)
- start send thread
- loop
- fill complete decrypt buffer, using blocking recv(conndata->connfd, decrypt_buffer+decryptOffset, get_suggested_cluster_size()*packetSize-decryptOffset)
- advancedPackets = decrypt_packets() // some packets will be left scrambled
- mutex_lock sendBuffer
- append descrambled packest to sendBuffer, memcpy(sendBuffer + sendBufferLength,decrypt_buffer, advancedPackets*packetSize)
- sendBufferLength+=advancedPackets*packetSize
- mutex_unlock sendBuffer
- move still scrambled packets to start of decrypt_buffer, memmov(decrypt_buffer, decrypt_buffer+advancedPackets*packetSize, get_suggested_cluster_size()*packetSize-advancedPackets*packetSize
consumer thread, new thread
- wait until sendbuffer has PCR packets for n miliseconds (e.g. n=1500 (as in 1.5 sec or 40500000 PCR ticks))
- loop
- mutex_lock sendBuffer
- send all packets until next PCR (maybe some more)
- mutex_unlock sendBuffer
- sleep (next PCR - current PCR) ticks, ~35ms/945000 PCR ticks most of the time