1a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* 2a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 4a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * Use of this source code is governed by a BSD-style license 5a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * that can be found in the LICENSE file in the root of the source 6a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * tree. An additional intellectual property rights grant can be found 7a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * in the file PATENTS. All contributing project authors may 8a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * be found in the AUTHORS file in the root of the source tree. 9a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 10a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 11a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin/* 12a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * decode_bwe.c 13a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 14a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * This C file contains the internal decode bandwidth estimate function. 15a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin * 16a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin */ 17a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 18a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 19a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "bandwidth_estimator.h" 20a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "codec.h" 21a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "entropy_coding.h" 22a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin#include "structs.h" 23a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 24a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 25a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 26a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 27a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkinint WebRtcIsacfix_EstimateBandwidth(BwEstimatorstr *bwest_str, 28a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin Bitstr_dec *streamdata, 29a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word32 packet_size, 30a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord16 rtp_seq_number, 31a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 send_ts, 32a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_UWord32 arr_ts) 33a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin{ 34a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 index; 35a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin WebRtc_Word16 frame_samples; 36a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin int err; 37a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 38a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* decode framelength */ 39a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin err = WebRtcIsacfix_DecodeFrameLen(streamdata, &frame_samples); 40a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* error check */ 41a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin if (err<0) { 42a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return err; 43a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin } 44a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 45a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* decode BW estimation */ 46a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin err = WebRtcIsacfix_DecodeSendBandwidth(streamdata, &index); 47a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* error check */ 48a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin if (err<0) { 49a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return err; 50a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin } 51a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 52a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Update BWE with received data */ 53a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin err = WebRtcIsacfix_UpdateUplinkBwImpl( 54a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin bwest_str, 55a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin rtp_seq_number, 56a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin (WebRtc_UWord16)WEBRTC_SPL_UDIV(WEBRTC_SPL_UMUL(frame_samples,1000), FS), 57a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin send_ts, 58a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin arr_ts, 59a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin (WebRtc_Word16) packet_size, /* in bytes */ 60a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin index); 61a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 62a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* error check */ 63a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin if (err<0) { 64a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return err; 65a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin } 66a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin 67a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin /* Succesful */ 68a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin return 0; 69a6451827d543eb00824bc95097e47d0aac51ae93Alexander Gutkin} 70