Skip to content
Snippets Groups Projects
Commit 77868073 authored by Dwayne M. Hubbard's avatar Dwayne M. Hubbard
Browse files

Merged revisions 257686 via svnmerge from

https://origsvn.digium.com/svn/asterisk/branches/1.4

........
  r257686 | dhubbard | 2010-04-16 16:15:43 -0500 (Fri, 16 Apr 2010) | 21 lines
  
  Make the mixmonitor thread process audio frames faster
  
  Mantis issue 17078 reports MixMonitor recordings have shorter durations than 
  the call duration.  This was because the mixmonitor thread was not processing 
  frames from the audiohook fast enough.  The mixmonitor thread would slowly fall 
  behind the most recent audio frame and when the channel hangs up, the mixmonitor 
  thread would exit without processing the same number of frames as the channel; 
  leaving the mixmonitor recording shorter than actual call duration.
  
  This revision fixes this issue by moving the ast_audiohook_trigger_wait() and 
  the subsequent audiohook.status check into the block where the 
  ast_audiohook_read_frame() function returns NULL.
  
  (closes issue #17078)
  Reported by: geoff2010
  Patches:
        dw-M17078.patch uploaded by dhubbard (license 733)
  Tested by: dhubbard, geoff2010
  
  Review: https://reviewboard.asterisk.org/r/611/
........


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@257713 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent ba81ee6d
No related branches found
No related tags found
No related merge requests found
......@@ -270,13 +270,14 @@ static void *mixmonitor_thread(void *obj)
while (mixmonitor->audiohook.status == AST_AUDIOHOOK_STATUS_RUNNING && !mixmonitor->mixmonitor_ds->fs_quit) {
struct ast_frame *fr = NULL;
ast_audiohook_trigger_wait(&mixmonitor->audiohook);
if (!(fr = ast_audiohook_read_frame(&mixmonitor->audiohook, SAMPLES_PER_FRAME, AST_AUDIOHOOK_DIRECTION_BOTH, AST_FORMAT_SLINEAR))) {
ast_audiohook_trigger_wait(&mixmonitor->audiohook);
if (mixmonitor->audiohook.status != AST_AUDIOHOOK_STATUS_RUNNING)
break;
if (!(fr = ast_audiohook_read_frame(&mixmonitor->audiohook, SAMPLES_PER_FRAME, AST_AUDIOHOOK_DIRECTION_BOTH, AST_FORMAT_SLINEAR)))
if (mixmonitor->audiohook.status != AST_AUDIOHOOK_STATUS_RUNNING) {
break;
}
continue;
}
/* audiohook lock is not required for the next block.
* Unlock it, but remember to lock it before looping or exiting */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment