summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Koleszar <jkoleszar@google.com>2011-02-17 12:34:16 -0800
committerCode Review <code-review@webmproject.org>2011-02-17 12:34:16 -0800
commitb2ae57f1b6cbbf018d356528bd8e816752dbbfb7 (patch)
tree8b14fb22f4e3e7b49dea9ad096a028c07a266461
parentac10665ad89290be900d59c2e294fc4771764b63 (diff)
parent562f1470ceed6c7d122e61dc5ca63300ab312830 (diff)
downloadlibvpx-b2ae57f1b6cbbf018d356528bd8e816752dbbfb7.tar
libvpx-b2ae57f1b6cbbf018d356528bd8e816752dbbfb7.tar.gz
libvpx-b2ae57f1b6cbbf018d356528bd8e816752dbbfb7.tar.bz2
libvpx-b2ae57f1b6cbbf018d356528bd8e816752dbbfb7.zip
Merge "Use endian-neutral bitstream packing/unpacking"
-rw-r--r--vp8/encoder/bitstream.c30
-rw-r--r--vp8/vp8_dx_iface.c17
2 files changed, 14 insertions, 33 deletions
diff --git a/vp8/encoder/bitstream.c b/vp8/encoder/bitstream.c
index 2c7f7881d..28477f41d 100644
--- a/vp8/encoder/bitstream.c
+++ b/vp8/encoder/bitstream.c
@@ -58,16 +58,6 @@ extern unsigned int active_section;
int count_mb_seg[4] = { 0, 0, 0, 0 };
#endif
-#if CONFIG_BIG_ENDIAN
-# define make_endian_16(a) \
- (((unsigned int)(a & 0xff)) << 8) | (((unsigned int)(a & 0xff00)) >> 8)
-# define make_endian_32(a) \
- (((unsigned int)(a & 0xff)) << 24) | (((unsigned int)(a & 0xff00)) << 8) | \
- (((unsigned int)(a & 0xff0000)) >> 8) | (((unsigned int)(a & 0xff000000)) >> 24)
-#else
-# define make_endian_16(a) a
-# define make_endian_32(a) a
-#endif
static void update_mode(
vp8_writer *const w,
@@ -1392,13 +1382,20 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned long *size)
// every keyframe send startcode, width, height, scale factor, clamp and color type
if (oh.type == KEY_FRAME)
{
+ int v;
+
// Start / synch code
cx_data[0] = 0x9D;
cx_data[1] = 0x01;
cx_data[2] = 0x2a;
- *((unsigned short *)(cx_data + 3)) = make_endian_16((pc->horiz_scale << 14) | pc->Width);
- *((unsigned short *)(cx_data + 5)) = make_endian_16((pc->vert_scale << 14) | pc->Height);
+ v = (pc->horiz_scale << 14) | pc->Width;
+ cx_data[3] = v;
+ cx_data[4] = v >> 8;
+
+ v = (pc->vert_scale << 14) | pc->Height;
+ cx_data[5] = v;
+ cx_data[6] = v >> 8;
extra_bytes_packed = 7;
cx_data += extra_bytes_packed ;
@@ -1666,19 +1663,16 @@ void vp8_pack_bitstream(VP8_COMP *cpi, unsigned char *dest, unsigned long *size)
*size = cpi->bc2.pos + cpi->bc.pos + VP8_HEADER_SIZE + extra_bytes_packed;
}
-#if CONFIG_BIG_ENDIAN
{
int v = (oh.first_partition_length_in_bytes << 5) |
(oh.show_frame << 4) |
(oh.version << 1) |
oh.type;
- v = make_endian_32(v);
- vpx_memcpy(dest, &v, 3);
+ dest[0] = v;
+ dest[1] = v >> 8;
+ dest[2] = v >> 16;
}
-#else
- vpx_memcpy(dest, &oh, 3);
-#endif
}
#ifdef ENTROPY_STATS
diff --git a/vp8/vp8_dx_iface.c b/vp8/vp8_dx_iface.c
index ce55c05f6..23df75b03 100644
--- a/vp8/vp8_dx_iface.c
+++ b/vp8/vp8_dx_iface.c
@@ -20,19 +20,6 @@
#define VP8_CAP_POSTPROC (CONFIG_POSTPROC ? VPX_CODEC_CAP_POSTPROC : 0)
-#if CONFIG_BIG_ENDIAN
-# define swap4(d)\
- ((d&0x000000ff)<<24) | \
- ((d&0x0000ff00)<<8) | \
- ((d&0x00ff0000)>>8) | \
- ((d&0xff000000)>>24)
-# define swap2(d)\
- ((d&0x000000ff)<<8) | \
- ((d&0x0000ff00)>>8)
-#else
-# define swap4(d) d
-# define swap2(d) d
-#endif
typedef vpx_codec_stream_info_t vp8_stream_info_t;
/* Structures for handling memory allocations */
@@ -283,8 +270,8 @@ static vpx_codec_err_t vp8_peek_si(const uint8_t *data,
if (c[0] != 0x9d || c[1] != 0x01 || c[2] != 0x2a)
res = VPX_CODEC_UNSUP_BITSTREAM;
- si->w = swap2(*(const unsigned short *)(c + 3)) & 0x3fff;
- si->h = swap2(*(const unsigned short *)(c + 5)) & 0x3fff;
+ si->w = (c[3] | (c[4] << 8)) & 0x3fff;
+ si->h = (c[5] | (c[6] << 8)) & 0x3fff;
/*printf("w=%d, h=%d\n", si->w, si->h);*/
if (!(si->h | si->w))