[vlc-commits] vlc_bits: add bs_remain()
Francois Cartegnie
git at videolan.org
Tue Dec 15 17:23:47 CET 2015
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Mon Dec 14 17:15:43 2015 +0100| [66f3469f18ff81052a82095c01d9f479ebc4862b] | committer: Francois Cartegnie
vlc_bits: add bs_remain()
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=66f3469f18ff81052a82095c01d9f479ebc4862b
---
include/vlc_bits.h | 8 +++++
test/Makefile.am | 3 ++
test/src/misc/bits.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 100 insertions(+)
diff --git a/include/vlc_bits.h b/include/vlc_bits.h
index d7a9689..379cf38 100644
--- a/include/vlc_bits.h
+++ b/include/vlc_bits.h
@@ -62,6 +62,14 @@ static inline int bs_pos( const bs_t *s )
return( 8 * ( s->p - s->p_start ) + 8 - s->i_left );
}
+static inline int bs_remain( const bs_t *s )
+{
+ if( s->p >= s->p_end )
+ return 0;
+ else
+ return( 8 * ( s->p_end - s->p ) - 8 + s->i_left );
+}
+
static inline int bs_eof( const bs_t *s )
{
return( s->p >= s->p_end ? 1: 0 );
diff --git a/test/Makefile.am b/test/Makefile.am
index b732acf..ad4a049 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -22,6 +22,7 @@ check_PROGRAMS = \
test_src_misc_variables \
test_src_crypto_update \
test_src_input_stream \
+ test_src_misc_bits \
$(NULL)
check_SCRIPTS = \
@@ -86,6 +87,8 @@ test_src_input_stream_LDADD = $(LIBVLCCORE) $(LIBVLC)
test_src_input_stream_net_SOURCES = src/input/stream.c
test_src_input_stream_net_CFLAGS = $(AM_CFLAGS) -DTEST_NET
test_src_input_stream_net_LDADD = $(LIBVLCCORE) $(LIBVLC)
+test_src_misc_bits_SOURCES = src/misc/bits.c
+test_src_misc_bits_LDADD = $(LIBVLC)
checkall:
$(MAKE) check_PROGRAMS="$(check_PROGRAMS) $(EXTRA_PROGRAMS)" check
diff --git a/test/src/misc/bits.c b/test/src/misc/bits.c
new file mode 100644
index 0000000..de13b73
--- /dev/null
+++ b/test/src/misc/bits.c
@@ -0,0 +1,89 @@
+/*****************************************************************************
+ * bits.c test bitstream reader
+ *****************************************************************************
+ * Copyright (C) 2015 VLC authors and VideoLAN
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#include "../../libvlc/test.h"
+
+#include <vlc_bits.h>
+#include <assert.h>
+
+int main( void )
+{
+ test_init();
+
+ uint8_t z[2];
+ bs_t bs;
+
+ bs_init( &bs, NULL, 0 );
+ assert( bs_remain(&bs) == 0 );
+ assert( bs_pos(&bs) == 0 );
+
+ bs_init( &bs, &z, 0 );
+ assert( bs_remain(&bs) == 0 );
+ assert( bs_pos(&bs) == 0 );
+
+ bs_init( &bs, &z, 1 );
+ assert( bs_remain(&bs) == 8 );
+ assert( bs_pos(&bs) == 0 );
+
+ bs_skip( &bs, 3 );
+ assert( bs_remain(&bs) == 5 );
+ assert( bs_pos(&bs) == 3 );
+
+ bs_init( &bs, &z, 2 );
+ assert( bs_remain(&bs) == 16 );
+
+ bs_write( &bs, 1, 0 );
+ assert( bs_remain(&bs) == 16 );
+
+ bs_read1( &bs );
+ assert( bs_remain(&bs) == 15 );
+ assert( bs_pos(&bs) == 1 );
+
+ bs_read( &bs, 7 );
+ assert( bs_remain(&bs) == 8 );
+ assert( bs_pos(&bs) == 8 );
+
+ bs_read1( &bs );
+ assert( bs_remain(&bs) == 7 );
+ assert( bs_pos(&bs) == 9 );
+
+ bs_align( &bs );
+ assert( bs_remain(&bs) == 0 );
+ assert( bs_pos(&bs) == 16 );
+
+ z[0] = 0xAA;
+ z[1] = 0x55;
+ bs_init( &bs, &z, 2 );
+ assert( bs_read(&bs, 4) == 0x0A );
+ assert( bs_read(&bs, 12) == ((0x0A << 8) | 0x55) );
+
+ z[0] = 0x15;
+ z[1] = 0x23;
+ bs_init( &bs, &z, 2 );
+ assert( bs_read_ue(&bs) == 0x09 );
+ assert( bs_remain(&bs) == 9 );
+ assert( bs_read1(&bs) == 1 );
+ assert( bs_read_se(&bs) == 2 );
+ assert( bs_remain(&bs) == 3 );
+ assert( bs_read_se(&bs) == -1 );
+ assert( bs_eof(&bs) );
+
+ return 0;
+}
More information about the vlc-commits
mailing list