media/libopus/src/opus_multistream.c

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

michael@0 1 /* Copyright (c) 2011 Xiph.Org Foundation
michael@0 2 Written by Jean-Marc Valin */
michael@0 3 /*
michael@0 4 Redistribution and use in source and binary forms, with or without
michael@0 5 modification, are permitted provided that the following conditions
michael@0 6 are met:
michael@0 7
michael@0 8 - Redistributions of source code must retain the above copyright
michael@0 9 notice, this list of conditions and the following disclaimer.
michael@0 10
michael@0 11 - Redistributions in binary form must reproduce the above copyright
michael@0 12 notice, this list of conditions and the following disclaimer in the
michael@0 13 documentation and/or other materials provided with the distribution.
michael@0 14
michael@0 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
michael@0 16 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
michael@0 17 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
michael@0 18 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
michael@0 19 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
michael@0 20 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
michael@0 21 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
michael@0 22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
michael@0 23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
michael@0 24 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
michael@0 25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
michael@0 26 */
michael@0 27
michael@0 28 #ifdef HAVE_CONFIG_H
michael@0 29 #include "config.h"
michael@0 30 #endif
michael@0 31
michael@0 32 #include "opus_multistream.h"
michael@0 33 #include "opus.h"
michael@0 34 #include "opus_private.h"
michael@0 35 #include "stack_alloc.h"
michael@0 36 #include <stdarg.h>
michael@0 37 #include "float_cast.h"
michael@0 38 #include "os_support.h"
michael@0 39
michael@0 40
michael@0 41 int validate_layout(const ChannelLayout *layout)
michael@0 42 {
michael@0 43 int i, max_channel;
michael@0 44
michael@0 45 max_channel = layout->nb_streams+layout->nb_coupled_streams;
michael@0 46 if (max_channel>255)
michael@0 47 return 0;
michael@0 48 for (i=0;i<layout->nb_channels;i++)
michael@0 49 {
michael@0 50 if (layout->mapping[i] >= max_channel && layout->mapping[i] != 255)
michael@0 51 return 0;
michael@0 52 }
michael@0 53 return 1;
michael@0 54 }
michael@0 55
michael@0 56
michael@0 57 int get_left_channel(const ChannelLayout *layout, int stream_id, int prev)
michael@0 58 {
michael@0 59 int i;
michael@0 60 i = (prev<0) ? 0 : prev+1;
michael@0 61 for (;i<layout->nb_channels;i++)
michael@0 62 {
michael@0 63 if (layout->mapping[i]==stream_id*2)
michael@0 64 return i;
michael@0 65 }
michael@0 66 return -1;
michael@0 67 }
michael@0 68
michael@0 69 int get_right_channel(const ChannelLayout *layout, int stream_id, int prev)
michael@0 70 {
michael@0 71 int i;
michael@0 72 i = (prev<0) ? 0 : prev+1;
michael@0 73 for (;i<layout->nb_channels;i++)
michael@0 74 {
michael@0 75 if (layout->mapping[i]==stream_id*2+1)
michael@0 76 return i;
michael@0 77 }
michael@0 78 return -1;
michael@0 79 }
michael@0 80
michael@0 81 int get_mono_channel(const ChannelLayout *layout, int stream_id, int prev)
michael@0 82 {
michael@0 83 int i;
michael@0 84 i = (prev<0) ? 0 : prev+1;
michael@0 85 for (;i<layout->nb_channels;i++)
michael@0 86 {
michael@0 87 if (layout->mapping[i]==stream_id+layout->nb_coupled_streams)
michael@0 88 return i;
michael@0 89 }
michael@0 90 return -1;
michael@0 91 }
michael@0 92

mercurial