mirror of
https://github.com/pikvm/ustreamer.git
synced 2025-12-24 03:00:01 +00:00
compress only lastest frame
This commit is contained in:
parent
36dd5d1533
commit
8fe411aa8b
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user