compress only lastest frame

This commit is contained in:
Maxim Devaev 2024-03-03 07:05:00 +02:00
parent 36dd5d1533
commit 8fe411aa8b
3 changed files with 14 additions and 5 deletions

View File

@ -104,9 +104,9 @@ int us_queue_get(us_queue_s *queue, void **item, ldf timeout) {
#undef _WAIT_OR_UNLOCK
/*int us_queue_get_free(us_queue_s *queue) {
bool us_queue_is_empty(us_queue_s *queue) {
US_MUTEX_LOCK(queue->mutex);
const uint size = queue->size;
US_MUTEX_UNLOCK(queue->mutex);
return queue->capacity - size;
}*/
return (bool)(queue->capacity - size);
}

View File

@ -45,7 +45,7 @@ typedef struct {
#define US_QUEUE_DELETE_WITH_ITEMS(x_queue, x_free_item) { \
if (x_queue) { \
while (!us_queue_get_free(x_queue)) { \
while (!us_queue_is_empty(x_queue)) { \
void *m_ptr; \
if (!us_queue_get(x_queue, &m_ptr, 0)) { \
US_DELETE(m_ptr, x_free_item); \
@ -61,4 +61,4 @@ void us_queue_destroy(us_queue_s *queue);
int us_queue_put(us_queue_s *queue, void *item, ldf timeout);
int us_queue_get(us_queue_s *queue, void **item, ldf timeout);
// int us_queue_get_free(us_queue_s *queue);
bool us_queue_is_empty(us_queue_s *queue);

View File

@ -26,6 +26,7 @@
#include <stdatomic.h>
#include <unistd.h>
#include <errno.h>
#include <assert.h>
#include <pthread.h>
@ -303,6 +304,10 @@ static void *_jpeg_thread(void *v_ctx) {
if (us_queue_get(ctx->queue, (void**)&hw, 0.1) < 0) {
continue;
}
while (!us_queue_is_empty(ctx->queue)) { // Берем только самый свежий кадр
us_device_buffer_decref(hw);
assert(!us_queue_get(ctx->queue, (void**)&hw, 0));
}
if ( // Если никто не смотрит MJPEG - пропускаем кадр
!atomic_load(&stream->run->http_has_clients)
@ -344,6 +349,10 @@ static void *_h264_thread(void *v_ctx) {
if (us_queue_get(ctx->queue, (void**)&hw, 0.1) < 0) {
continue;
}
while (!us_queue_is_empty(ctx->queue)) { // Берем только самый свежий кадр
us_device_buffer_decref(hw);
assert(!us_queue_get(ctx->queue, (void**)&hw, 0));
}
if (!us_memsink_server_check(ctx->h264->sink, NULL)) {
us_device_buffer_decref(hw);