Merge "audiohooks: Muting a hook can mute underlying frames"
This commit is contained in:
commit
3c558b4b4a
|
@ -156,6 +156,11 @@ int ast_audiohook_destroy(struct ast_audiohook *audiohook)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define SHOULD_MUTE(hook, dir) \
|
||||
((ast_test_flag(hook, AST_AUDIOHOOK_MUTE_READ) && (dir == AST_AUDIOHOOK_DIRECTION_READ)) || \
|
||||
(ast_test_flag(hook, AST_AUDIOHOOK_MUTE_WRITE) && (dir == AST_AUDIOHOOK_DIRECTION_WRITE)) || \
|
||||
(ast_test_flag(hook, AST_AUDIOHOOK_MUTE_READ | AST_AUDIOHOOK_MUTE_WRITE) == (AST_AUDIOHOOK_MUTE_READ | AST_AUDIOHOOK_MUTE_WRITE)))
|
||||
|
||||
/*! \brief Writes a frame into the audiohook structure
|
||||
* \param audiohook Audiohook structure
|
||||
* \param direction Direction the audio frame came from
|
||||
|
@ -171,7 +176,6 @@ int ast_audiohook_write_frame(struct ast_audiohook *audiohook, enum ast_audiohoo
|
|||
int our_factory_ms;
|
||||
int other_factory_samples;
|
||||
int other_factory_ms;
|
||||
int muteme = 0;
|
||||
|
||||
/* Update last feeding time to be current */
|
||||
*rwtime = ast_tvnow();
|
||||
|
@ -197,17 +201,6 @@ int ast_audiohook_write_frame(struct ast_audiohook *audiohook, enum ast_audiohoo
|
|||
ast_slinfactory_flush(other_factory);
|
||||
}
|
||||
|
||||
/* swap frame data for zeros if mute is required */
|
||||
if ((ast_test_flag(audiohook, AST_AUDIOHOOK_MUTE_READ) && (direction == AST_AUDIOHOOK_DIRECTION_READ)) ||
|
||||
(ast_test_flag(audiohook, AST_AUDIOHOOK_MUTE_WRITE) && (direction == AST_AUDIOHOOK_DIRECTION_WRITE)) ||
|
||||
(ast_test_flag(audiohook, AST_AUDIOHOOK_MUTE_READ | AST_AUDIOHOOK_MUTE_WRITE) == (AST_AUDIOHOOK_MUTE_READ | AST_AUDIOHOOK_MUTE_WRITE))) {
|
||||
muteme = 1;
|
||||
}
|
||||
|
||||
if (muteme && frame->datalen > 0) {
|
||||
ast_frame_clear(frame);
|
||||
}
|
||||
|
||||
/* Write frame out to respective factory */
|
||||
ast_slinfactory_feed(factory, frame);
|
||||
|
||||
|
@ -246,8 +239,11 @@ static struct ast_frame *audiohook_read_frame_single(struct ast_audiohook *audio
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* If a volume adjustment needs to be applied apply it */
|
||||
if (vol) {
|
||||
if (SHOULD_MUTE(audiohook, direction)) {
|
||||
/* Swap frame data for zeros if mute is required */
|
||||
ast_frame_clear(&frame);
|
||||
} else if (vol) {
|
||||
/* If a volume adjustment needs to be applied apply it */
|
||||
ast_frame_adjust_volume(&frame, vol);
|
||||
}
|
||||
|
||||
|
@ -296,8 +292,12 @@ static struct ast_frame *audiohook_read_frame_both(struct ast_audiohook *audioho
|
|||
if (usable_read) {
|
||||
if (ast_slinfactory_read(&audiohook->read_factory, buf1, samples)) {
|
||||
read_buf = buf1;
|
||||
/* Adjust read volume if need be */
|
||||
if (audiohook->options.read_volume) {
|
||||
|
||||
if ((ast_test_flag(audiohook, AST_AUDIOHOOK_MUTE_READ))) {
|
||||
/* Clear the frame data if we are muting */
|
||||
memset(buf1, 0, sizeof(buf1));
|
||||
} else if (audiohook->options.read_volume) {
|
||||
/* Adjust read volume if need be */
|
||||
adjust_value = abs(audiohook->options.read_volume);
|
||||
for (count = 0; count < samples; count++) {
|
||||
if (audiohook->options.read_volume > 0) {
|
||||
|
@ -316,8 +316,12 @@ static struct ast_frame *audiohook_read_frame_both(struct ast_audiohook *audioho
|
|||
if (usable_write) {
|
||||
if (ast_slinfactory_read(&audiohook->write_factory, buf2, samples)) {
|
||||
write_buf = buf2;
|
||||
/* Adjust write volume if need be */
|
||||
if (audiohook->options.write_volume) {
|
||||
|
||||
if ((ast_test_flag(audiohook, AST_AUDIOHOOK_MUTE_WRITE))) {
|
||||
/* Clear the frame data if we are muting */
|
||||
memset(buf2, 0, sizeof(buf2));
|
||||
} else if (audiohook->options.write_volume) {
|
||||
/* Adjust write volume if need be */
|
||||
adjust_value = abs(audiohook->options.write_volume);
|
||||
for (count = 0; count < samples; count++) {
|
||||
if (audiohook->options.write_volume > 0) {
|
||||
|
|
Loading…
Reference in New Issue