summaryrefslogtreecommitdiff
path: root/src/buffer
diff options
context:
space:
mode:
Diffstat (limited to 'src/buffer')
-rw-r--r--src/buffer/audio.c6
-rw-r--r--src/buffer/video.c19
2 files changed, 14 insertions, 11 deletions
diff --git a/src/buffer/audio.c b/src/buffer/audio.c
index 141c589..f3e0b74 100644
--- a/src/buffer/audio.c
+++ b/src/buffer/audio.c
@@ -14,7 +14,7 @@
#define BUFFER_MARK_BUFFERED (1.5 * 1000000L)
#ifdef CAMU_AUDIO_BUFFER_FADE
-#define FADE_STEP(fmt) (1.f / (fmt)->sample_rate)
+#define FADE_STEP(fmt) (1.1f / (fmt)->sample_rate)
#endif
enum {
@@ -280,7 +280,7 @@ size_t camu_audio_buffer_read(struct camu_audio_buffer *buf, u8 *data, size_t re
if (pts > 0.0) { // Skip.
ret = camu_audio_format_sec_to_bytes(&buf->fmt.req, pts);
ret = AL_MIN(ret, have);
- al_log_debug("audio_buffer", "Skipping %fs of audio (%zu bytes).", pts, ret);
+ al_log_info("audio_buffer", "Skipping %fs of audio (%zu bytes).", pts, ret);
ret = al_ring_buffer_discard(&buf->rb, ret);
have -= ret;
buf->pts += camu_audio_format_bytes_to_sec(&buf->fmt.req, ret);
@@ -289,7 +289,7 @@ size_t camu_audio_buffer_read(struct camu_audio_buffer *buf, u8 *data, size_t re
pts = -pts;
ret = camu_audio_format_sec_to_bytes(&buf->fmt.req, pts);
ret = AL_MIN(ret, req);
- al_log_debug("audio_buffer", "Delaying audio by %fs (%zu bytes).", pts, ret);
+ al_log_info("audio_buffer", "Delaying audio by %fs (%zu bytes).", pts, ret);
al_memset(data, 0, ret);
data += ret;
req -= ret;
diff --git a/src/buffer/video.c b/src/buffer/video.c
index 00902f3..04a9dbf 100644
--- a/src/buffer/video.c
+++ b/src/buffer/video.c
@@ -4,10 +4,10 @@
#include "common.h"
#include "common_internal.h"
-#define BUFFER_WATERMARK_LOW 8 // frames.
-#define BUFFER_WATERMARK_BUFFERED 5
-#define BUFFER_WATERMARK_HIGH 12
-#define BUFFER_WATERMARK_RESET BUFFER_WATERMARK_HIGH + 10.
+#define BUFFER_WATERMARK_LOW 6 // frames.
+#define BUFFER_WATERMARK_BUFFERED 4
+#define BUFFER_WATERMARK_HIGH 10
+#define BUFFER_WATERMARK_RESET BUFFER_WATERMARK_HIGH + 10
bool camu_video_buffer_init(struct camu_video_buffer *buf, struct camu_clock *clock, struct camu_renderer *renderer)
{
@@ -99,7 +99,7 @@ static void after_push_internal(struct camu_video_buffer *buf)
}
#ifdef CAMU_HAVE_FFMPEG
-static void push_av_frame_internal(struct camu_video_buffer *buf, AVFrame *frame)
+static bool push_av_frame_internal(struct camu_video_buffer *buf, AVFrame *frame)
{
f64 pts = 0.0;
if (!buf->single_frame) {
@@ -107,7 +107,7 @@ static void push_av_frame_internal(struct camu_video_buffer *buf, AVFrame *frame
pts = frame->best_effort_timestamp * av_q2d(stream->time_base);
if (pts + buf->avg_frame_duration < camu_clock_get_base_pts(buf->clock)) {
av_frame_free(&frame);
- return;
+ return false;
}
}
if (buf->pts == -1.0) buf->pts = pts;
@@ -122,6 +122,7 @@ static void push_av_frame_internal(struct camu_video_buffer *buf, AVFrame *frame
#endif
if (frame) frame->opaque = buf;
buf->queue->push_av_frame(buf->queue, frame, pts);
+ return true;
}
#endif
@@ -137,10 +138,12 @@ void camu_video_buffer_push(struct camu_video_buffer *buf, struct camu_codec_fra
buf->queue->push(buf->queue, frame, 0.0);
break;
#ifdef CAMU_HAVE_FFMPEG
- case CAMU_FFMPEG_COMPAT:
- push_av_frame_internal(buf, frame->av.frame);
+ case CAMU_FFMPEG_COMPAT: {
+ bool pushed = push_av_frame_internal(buf, frame->av.frame);
al_free(frame);
+ if (!pushed) return;
break;
+ }
#endif
}
after_push_internal(buf);