1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker #include <assert.h> 12*fb1b10abSAndroid Build Coastguard Worker #include <limits.h> 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard Worker #include "./bitwriter.h" 15*fb1b10abSAndroid Build Coastguard Worker 16*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_BITSTREAM_DEBUG 17*fb1b10abSAndroid Build Coastguard Worker #include "vpx_util/vpx_debug_util.h" 18*fb1b10abSAndroid Build Coastguard Worker #endif 19*fb1b10abSAndroid Build Coastguard Worker vpx_start_encode(vpx_writer * br,uint8_t * source,size_t size)20*fb1b10abSAndroid Build Coastguard Workervoid vpx_start_encode(vpx_writer *br, uint8_t *source, size_t size) { 21*fb1b10abSAndroid Build Coastguard Worker br->lowvalue = 0; 22*fb1b10abSAndroid Build Coastguard Worker br->range = 255; 23*fb1b10abSAndroid Build Coastguard Worker br->count = -24; 24*fb1b10abSAndroid Build Coastguard Worker br->error = 0; 25*fb1b10abSAndroid Build Coastguard Worker br->pos = 0; 26*fb1b10abSAndroid Build Coastguard Worker // Make sure it is safe to cast br->pos to int in vpx_write(). 27*fb1b10abSAndroid Build Coastguard Worker if (size > INT_MAX) size = INT_MAX; 28*fb1b10abSAndroid Build Coastguard Worker br->size = (unsigned int)size; 29*fb1b10abSAndroid Build Coastguard Worker br->buffer = source; 30*fb1b10abSAndroid Build Coastguard Worker vpx_write_bit(br, 0); 31*fb1b10abSAndroid Build Coastguard Worker } 32*fb1b10abSAndroid Build Coastguard Worker vpx_stop_encode(vpx_writer * br)33*fb1b10abSAndroid Build Coastguard Workerint vpx_stop_encode(vpx_writer *br) { 34*fb1b10abSAndroid Build Coastguard Worker int i; 35*fb1b10abSAndroid Build Coastguard Worker 36*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_BITSTREAM_DEBUG 37*fb1b10abSAndroid Build Coastguard Worker bitstream_queue_set_skip_write(1); 38*fb1b10abSAndroid Build Coastguard Worker #endif 39*fb1b10abSAndroid Build Coastguard Worker for (i = 0; i < 32; i++) vpx_write_bit(br, 0); 40*fb1b10abSAndroid Build Coastguard Worker 41*fb1b10abSAndroid Build Coastguard Worker // Ensure there's no ambigous collision with any index marker bytes 42*fb1b10abSAndroid Build Coastguard Worker if (!br->error && (br->buffer[br->pos - 1] & 0xe0) == 0xc0) { 43*fb1b10abSAndroid Build Coastguard Worker if (br->pos < br->size) { 44*fb1b10abSAndroid Build Coastguard Worker br->buffer[br->pos++] = 0; 45*fb1b10abSAndroid Build Coastguard Worker } else { 46*fb1b10abSAndroid Build Coastguard Worker br->error = 1; 47*fb1b10abSAndroid Build Coastguard Worker } 48*fb1b10abSAndroid Build Coastguard Worker } 49*fb1b10abSAndroid Build Coastguard Worker 50*fb1b10abSAndroid Build Coastguard Worker #if CONFIG_BITSTREAM_DEBUG 51*fb1b10abSAndroid Build Coastguard Worker bitstream_queue_set_skip_write(0); 52*fb1b10abSAndroid Build Coastguard Worker #endif 53*fb1b10abSAndroid Build Coastguard Worker 54*fb1b10abSAndroid Build Coastguard Worker return br->error ? -1 : 0; 55*fb1b10abSAndroid Build Coastguard Worker } 56