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)