An error occurred while loading the file. Please try again.
-
Andrea Gianarda authored
when initiating a call; - from header - account These 2 parameters are dependent from each other which makes tricky for the core to know exactly which account to use and the correct from address. In most scenarios, the from address is the account's identity address but it is not always the case such as in the case of a direct call. Moreover, the account cannot be always deduced in a straightforward matter such as if the core has no default account (but it is registered with one or more accounts) and the call parameters have not set one. The algorithm for choosing an account is the following: 1) search in the call parameters 2) get the default account 3) look up for the best guessed account based on the from (if known) or to address The algorithm for known the from address is the following: 1) look for the from header in the call parameters 2) look up for the identity address of the account (if known) 3) get the core primary account Set Ik SDP attribute based on the account used for a call Use account set in the call parameters before retrieving the NAT policy. It may happen that a call session is buuild without passing an account and in such a case, the SDK will do its best to get one
2dc884fb
vp9_dboolhuff.c 2.81 KiB
/*
* Copyright (c) 2010 The WebM project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "vpx_ports/mem.h"
#include "vpx_mem/vpx_mem.h"
#include "vp9/decoder/vp9_dboolhuff.h"
int vp9_start_decode(BOOL_DECODER *br,
const unsigned char *source,
unsigned int source_sz) {
br->user_buffer_end = source + source_sz;
br->user_buffer = source;
br->value = 0;
br->count = -8;
br->range = 255;
if (source_sz && !source)
return 1;
/* Populate the buffer */
vp9_bool_decoder_fill(br);
return 0;
}
void vp9_bool_decoder_fill(BOOL_DECODER *br) {
const unsigned char *bufptr = br->user_buffer;
const unsigned char *bufend = br->user_buffer_end;
VP9_BD_VALUE value = br->value;
int count = br->count;
int shift = VP9_BD_VALUE_SIZE - 8 - (count + 8);
int loop_end = 0;
int bits_left = (int)((bufend - bufptr)*CHAR_BIT);
int x = shift + CHAR_BIT - bits_left;
if (x >= 0) {
count += VP9_LOTS_OF_BITS;
loop_end = x;
}
if (x < 0 || bits_left) {
while (shift >= loop_end) {
count += CHAR_BIT;
value |= (VP9_BD_VALUE)*bufptr++ << shift;
shift -= CHAR_BIT;
}
}
br->user_buffer = bufptr;
br->value = value;
br->count = count;
}
static int get_unsigned_bits(unsigned num_values) {
int cat = 0;
if (num_values <= 1)
return 0;
num_values--;
while (num_values > 0) {
cat++;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
num_values >>= 1;
}
return cat;
}
int vp9_inv_recenter_nonneg(int v, int m) {
if (v > (m << 1))
return v;
else if ((v & 1) == 0)
return (v >> 1) + m;
else
return m - ((v + 1) >> 1);
}
int vp9_decode_uniform(BOOL_DECODER *br, int n) {
int v;
int l = get_unsigned_bits(n);
int m = (1 << l) - n;
if (!l) return 0;
v = decode_value(br, l - 1);
if (v < m)
return v;
else
return (v << 1) - m + decode_value(br, 1);
}
int vp9_decode_term_subexp(BOOL_DECODER *br, int k, int num_syms) {
int i = 0, mk = 0, word;
while (1) {
int b = (i ? k + i - 1 : k);
int a = (1 << b);
if (num_syms <= mk + 3 * a) {
word = vp9_decode_uniform(br, num_syms - mk) + mk;
break;
} else {
if (decode_value(br, 1)) {
i++;
mk += a;
} else {
word = decode_value(br, b) + mk;
break;
}
}
}
return word;
}
int vp9_decode_unsigned_max(BOOL_DECODER *br, int max) {
int data = 0, bit = 0, lmax = max;
while (lmax) {
data |= decode_bool(br, 128) << bit++;
lmax >>= 1;
}
if (data > max)
return max;
return data;
}