diff options
author | Vito Caputo <vcaputo@pengaru.com> | 2020-07-15 01:52:27 -0700 |
---|---|---|
committer | Vito Caputo <vcaputo@pengaru.com> | 2020-07-15 01:52:27 -0700 |
commit | 19a7c45b7b4adcd13b5481697f5cb82ba378918b (patch) | |
tree | 7e05e6a4ade39f2ebe0ea0b546b72cf65212aa41 /src/rmd_cache_frame.c | |
parent | 63c510aca1de960ee12d2ee5b83b794c50258b44 (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.c | 7 |
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; |