15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Use of this source code is governed by a BSD-style license 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * that can be found in the LICENSE file in the root of the source 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * tree. An additional intellectual property rights grant can be found 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the file PATENTS. All contributing project authors may 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * be found in the AUTHORS file in the root of the source tree. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * decode_bwe.c 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This C file contains the internal decode bandwidth estimate function. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "bandwidth_estimator.h" 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "codec.h" 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "entropy_coding.h" 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "structs.h" 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int WebRtcIsacfix_EstimateBandwidth(BwEstimatorstr *bwest_str, 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Bitstr_dec *streamdata, 29e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebRtc_Word32 packet_size, 30926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebRtc_UWord16 rtp_seq_number, 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRtc_UWord32 send_ts, 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRtc_UWord32 arr_ts) 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRtc_Word16 index; 35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebRtc_Word16 frame_samples; 36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) int err; 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* decode framelength */ 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) err = WebRtcIsacfix_DecodeFrameLen(streamdata, &frame_samples); 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* error check */ 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (err<0) { 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return err; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* decode BW estimation */ 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) err = WebRtcIsacfix_DecodeSendBandwidth(streamdata, &index); 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* error check */ 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (err<0) { 49d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return err; 50d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 51d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 52d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) /* Update BWE with received data */ 53d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) err = WebRtcIsacfix_UpdateUplinkBwImpl( 54d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bwest_str, 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rtp_seq_number, 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (WebRtc_UWord16)WEBRTC_SPL_UDIV(WEBRTC_SPL_UMUL(frame_samples,1000), FS), 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) send_ts, 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) arr_ts, 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) (WebRtc_Word16) packet_size, /* in bytes */ 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) index); 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* error check */ 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (err<0) { 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return err; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* Succesful */ 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)