mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 11:58:52 +00:00
Merged revisions 46329 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r46329 | russell | 2006-10-26 11:31:05 -0500 (Thu, 26 Oct 2006) | 11 lines - If the source has no audio or no video portion, do not call powerof() to get the format index. - Don't run through the audio and video loops if there is no audio or video portion of the source If 0 is passed to powerof, it will return -1. This value of -1 was then being used as an array index in these loops, which caused a crash on some systems. Other than this issue, this code works as we expected it to. If a format is not in the source, and we have to translation path to it, it is not offered in the list of acceptable destination formats. (fixes issue #8231) ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@46330 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -740,17 +740,29 @@ unsigned int ast_translate_available_formats(unsigned int dest, unsigned int src
|
||||
{
|
||||
unsigned int res = dest;
|
||||
unsigned int x;
|
||||
unsigned int src_audio = powerof(src & AST_FORMAT_AUDIO_MASK);
|
||||
unsigned int src_video = powerof(src & AST_FORMAT_VIDEO_MASK);
|
||||
unsigned int src_audio = src & AST_FORMAT_AUDIO_MASK;
|
||||
unsigned int src_video = src & AST_FORMAT_VIDEO_MASK;
|
||||
|
||||
/* if we don't have a source format, we just have to try all
|
||||
possible destination formats */
|
||||
if (!src)
|
||||
return dest;
|
||||
|
||||
/* If we have a source audio format, get its format index */
|
||||
if (src_audio)
|
||||
src_audio = powerof(src_audio);
|
||||
|
||||
/* If we have a source video format, get its format index */
|
||||
if (src_video)
|
||||
src_video = powerof(src_video);
|
||||
|
||||
AST_LIST_LOCK(&translators);
|
||||
|
||||
for (x = 1; x < AST_FORMAT_MAX_AUDIO; x <<= 1) {
|
||||
/* For a given source audio format, traverse the list of
|
||||
known audio formats to determine whether there exists
|
||||
a translation path from the source format to the
|
||||
destination format. */
|
||||
for (x = 1; src_audio && x < AST_FORMAT_MAX_AUDIO; x <<= 1) {
|
||||
/* if this is not a desired format, nothing to do */
|
||||
if (!dest & x)
|
||||
continue;
|
||||
@@ -766,8 +778,11 @@ unsigned int ast_translate_available_formats(unsigned int dest, unsigned int src
|
||||
res &= ~x;
|
||||
}
|
||||
|
||||
/* roll over into video formats */
|
||||
for (; x < AST_FORMAT_MAX_VIDEO; x <<= 1) {
|
||||
/* For a given source video format, traverse the list of
|
||||
known video formats to determine whether there exists
|
||||
a translation path from the source format to the
|
||||
destination format. */
|
||||
for (; src_video && x < AST_FORMAT_MAX_VIDEO; x <<= 1) {
|
||||
/* if this is not a desired format, nothing to do */
|
||||
if (!dest & x)
|
||||
continue;
|
||||
|
Reference in New Issue
Block a user