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