mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-24 18:41:57 +00:00
61 lines
1.9 KiB
C
61 lines
1.9 KiB
C
|
/*
|
||
|
* Copyright (c) 2011 The WebRTC 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 "arith_routines.h"
|
||
|
#include "settings.h"
|
||
|
|
||
|
|
||
|
/*
|
||
|
* terminate and return byte stream;
|
||
|
* returns the number of bytes in the stream
|
||
|
*/
|
||
|
int WebRtcIsac_EncTerminate(Bitstr *streamdata) /* in-/output struct containing bitstream */
|
||
|
{
|
||
|
WebRtc_UWord8 *stream_ptr;
|
||
|
|
||
|
|
||
|
/* point to the right place in the stream buffer */
|
||
|
stream_ptr = streamdata->stream + streamdata->stream_index;
|
||
|
|
||
|
/* find minimum length (determined by current interval width) */
|
||
|
if ( streamdata->W_upper > 0x01FFFFFF )
|
||
|
{
|
||
|
streamdata->streamval += 0x01000000;
|
||
|
/* add carry to buffer */
|
||
|
if (streamdata->streamval < 0x01000000)
|
||
|
{
|
||
|
/* propagate carry */
|
||
|
while ( !(++(*--stream_ptr)) );
|
||
|
/* put pointer back to the old value */
|
||
|
stream_ptr = streamdata->stream + streamdata->stream_index;
|
||
|
}
|
||
|
/* write remaining data to bitstream */
|
||
|
*stream_ptr++ = (WebRtc_UWord8) (streamdata->streamval >> 24);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
streamdata->streamval += 0x00010000;
|
||
|
/* add carry to buffer */
|
||
|
if (streamdata->streamval < 0x00010000)
|
||
|
{
|
||
|
/* propagate carry */
|
||
|
while ( !(++(*--stream_ptr)) );
|
||
|
/* put pointer back to the old value */
|
||
|
stream_ptr = streamdata->stream + streamdata->stream_index;
|
||
|
}
|
||
|
/* write remaining data to bitstream */
|
||
|
*stream_ptr++ = (WebRtc_UWord8) (streamdata->streamval >> 24);
|
||
|
*stream_ptr++ = (WebRtc_UWord8) ((streamdata->streamval >> 16) & 0x00FF);
|
||
|
}
|
||
|
|
||
|
/* calculate stream length */
|
||
|
return (int)(stream_ptr - streamdata->stream);
|
||
|
}
|