summaryrefslogtreecommitdiff
path: root/src/rmd_cache_frame.c
diff options
context:
space:
mode:
authorVito Caputo <vcaputo@pengaru.com>2020-07-15 01:52:27 -0700
committerVito Caputo <vcaputo@pengaru.com>2020-07-15 01:52:27 -0700
commit19a7c45b7b4adcd13b5481697f5cb82ba378918b (patch)
tree7e05e6a4ade39f2ebe0ea0b546b72cf65212aa41 /src/rmd_cache_frame.c
parent63c510aca1de960ee12d2ee5b83b794c50258b44 (diff)
timer: maintain video side of avd in frame timer
Since the frame timer implements a frame counter, and that frame count is propagated through the get->encode pipeline for samples that get through, any missed frames are noticed and dealt with making it not lossy from the point of the timer down to the encoded stream in terms of number of frames. It's certainly lossy in terms of the contents of those frames, but synchronization is all about the temporal domain and as long as the frame counts all make it into the stream as frames, we can account for them at the timer in terms of avd. This in combination with the other commit moving the audio side of avd maintenance immediately upon capture into the raw buffer, shrinks the variable capacitance separating the audio timer and the frame timer to virtually nil. As a consequence, the frame timer can now be much more accurate in terms of how much longer/less to sleep or if a frame should be dropped to get the timer caught up. When avd was being maintained at points far removed from the actual things they represented there was too much elastic capacitance in there for sync_streams() to inform its adjustment accurately.
Diffstat (limited to 'src/rmd_cache_frame.c')
-rw-r--r--src/rmd_cache_frame.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/src/rmd_cache_frame.c b/src/rmd_cache_frame.c
index 5c0ea5b..cae1c14 100644
--- a/src/rmd_cache_frame.c
+++ b/src/rmd_cache_frame.c
@@ -105,7 +105,7 @@ void *rmdCacheImageBuffer(ProgData *pdata) {
v_short_blocks[blocknum_x * blocknum_y];
unsigned long long int total_bytes = 0;
unsigned long long int total_received_bytes = 0;
- unsigned int capture_frameno = 0, last_capture_frameno = 0;
+ unsigned int capture_frameno = 0;
rmdThreadsSetName("rmdCacheImages");
@@ -255,9 +255,6 @@ void *rmdCacheImageBuffer(ProgData *pdata) {
nbytes += rmdFlushBlock(NULL, 0, 0, 0, 0, fp, ucfp, 1);
/**@________________@**/
- pthread_mutex_lock(&pdata->avd_mutex);
- pdata->avd += pdata->frametime * (capture_frameno - last_capture_frameno);
- pthread_mutex_unlock(&pdata->avd_mutex);
if (nbytes > CACHE_FILE_SIZE_LIMIT) {
if (rmdSwapCacheFilesWrite(pdata->cache_data->imgdata, nth_cache, &fp, &ucfp)) {
@@ -281,8 +278,6 @@ void *rmdCacheImageBuffer(ProgData *pdata) {
nth_cache++;
nbytes = 0;
}
-
- last_capture_frameno = capture_frameno;
}
total_bytes += nbytes;
© All Rights Reserved