summaryrefslogtreecommitdiff
path: root/apps/app_voicemail.c
diff options
context:
space:
mode:
authorScott Griepentrog <sgriepentrog@digium.com>2014-09-16 16:33:53 +0000
committerScott Griepentrog <sgriepentrog@digium.com>2014-09-16 16:33:53 +0000
commit662b687dbe86ad62d1c6bea5a21560857a8a0a63 (patch)
tree6288f39d9d8dcca9258cae554520b0bc1d24f6d2 /apps/app_voicemail.c
parentceedf44edd2fd8b02f2133ae7fc92405eae3176c (diff)
Voicemail: get correct duration when copying file to vm
Changes made during format improvements resulted in the recording to voicemail option 'm' of the MixMonitor app writing a zero length duration in the msgXXXX.txt file. This change introduces a new function ast_ratestream(), which provides the sample rate of the format associated with the stream, and updates the app_voicemail function for ast_app_copy_recording_to_vm to calculate the right duration. Review: https://reviewboard.asterisk.org/r/3996/ ASTERISK-24328 #close ........ Merged revisions 423192 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@423193 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'apps/app_voicemail.c')
-rw-r--r--apps/app_voicemail.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index fdfbf2255..45f9ebfea 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -6130,15 +6130,11 @@ static int msg_create_from_file(struct ast_vm_recording_data *recdata)
if ((recording_fs = ast_readfile(recdata->recording_file, recdata->recording_ext, NULL, 0, 0, VOICEMAIL_DIR_MODE))) {
if (!ast_seekstream(recording_fs, 0, SEEK_END)) {
long framelength = ast_tellstream(recording_fs);
- struct ast_format *result;
- /* XXX This use of ast_getformatbyname seems incorrect here. The file extension does not necessarily correspond
- * to the name of the format. For instance, if "raw" were passed in, I don't think ast_getformatbyname would
- * find the slinear format
- */
- result = ast_format_cache_get(recdata->recording_ext);
- if (result) {
- duration = (int) (framelength / ast_format_get_sample_rate(result));
- ao2_ref(result, -1);
+ int sample_rate = ast_ratestream(recording_fs);
+ if (sample_rate) {
+ duration = (int) (framelength / sample_rate);
+ } else {
+ ast_log(LOG_ERROR,"Unable to determine sample rate of recording %s\n", recdata->recording_file);
}
}
}