diff --git a/vp9/common/vp9_onyx.h b/vp9/common/vp9_onyx.h index d93b7d5fb91c8f6942b240ce015c180be6deed4c..79d060945bbbb1befcdf3805a4d45bde7a065bc5 100644 --- a/vp9/common/vp9_onyx.h +++ b/vp9/common/vp9_onyx.h @@ -94,7 +94,7 @@ extern "C" int Width; // width of data passed to the compressor int Height; // height of data passed to the compressor double frame_rate; // set to passed in framerate - int target_bandwidth; // bandwidth to be used in kilobits per second + int64_t target_bandwidth; // bandwidth to be used in kilobits per second int noise_sensitivity; // parameter used for applying pre processing blur: recommendation 0 int Sharpness; // parameter used for sharpening output: recommendation 0: @@ -135,9 +135,9 @@ extern "C" int over_shoot_pct; // buffering parameters - int starting_buffer_level; // in seconds - int optimal_buffer_level; - int maximum_buffer_size; + int64_t starting_buffer_level; // in seconds + int64_t optimal_buffer_level; + int64_t maximum_buffer_size; // controlling quality int fixed_q; diff --git a/vp9/decoder/vp9_decodframe.c b/vp9/decoder/vp9_decodframe.c index 86806d2d0143b6906688530ece299628f9090f32..785eb3a2f9c5abcaa5f8f6cc250f87ad90956d0a 100644 --- a/vp9/decoder/vp9_decodframe.c +++ b/vp9/decoder/vp9_decodframe.c @@ -1267,13 +1267,14 @@ int vp9_decode_frame(VP9D_COMP *pbi, const unsigned char **p_data_end) { * if we have enough data. Otherwise we will end up with the wrong * size. */ - if (data + 4 < data_end) { - pc->Width = (data[0] | (data[1] << 8)) & 0x3fff; - pc->horiz_scale = data[1] >> 6; - pc->Height = (data[2] | (data[3] << 8)) & 0x3fff; - pc->vert_scale = data[3] >> 6; + if (data + 5 < data_end) { + pc->Width = (data[0] | (data[1] << 8)); + pc->Height = (data[2] | (data[3] << 8)); + + pc->horiz_scale = data[4] >> 4; + pc->vert_scale = data[4] & 0x0F; } - data += 4; + data += 5; if (width != pc->Width || height != pc->Height) { if (pc->Width <= 0) { diff --git a/vp9/encoder/vp9_bitstream.c b/vp9/encoder/vp9_bitstream.c index 7101947a6a6660ae9c18bdba76e1c623941d959d..d0e97db7baa5e194560da71a22b867060026a347 100644 --- a/vp9/encoder/vp9_bitstream.c +++ b/vp9/encoder/vp9_bitstream.c @@ -1500,17 +1500,20 @@ void vp9_pack_bitstream(VP9_COMP *cpi, unsigned char *dest, { int v; - /* TODO(jkoleszar): support arbitrary resolutions */ - v = (pc->horiz_scale << 14) | pc->Width; + // support arbitrary resolutions + v = pc->Width; cx_data[0] = v; cx_data[1] = v >> 8; - v = (pc->vert_scale << 14) | pc->Height; + v = pc->Height; cx_data[2] = v; cx_data[3] = v >> 8; - extra_bytes_packed += 4; - cx_data += 4; + // use a separate byte to store the scale factors, each ranging 0-15 + cx_data[4] = (pc->horiz_scale << 4) | (pc->vert_scale); + + extra_bytes_packed += 5; + cx_data += 5; } vp9_start_encode(&header_bc, cx_data); diff --git a/vp9/encoder/vp9_encodeframe.c b/vp9/encoder/vp9_encodeframe.c index 5271a597c35a159dcd4fbc24f60c765486c0e120..6d02fa75b4509a157f7b4f59c2ab3c5de3340fa3 100644 --- a/vp9/encoder/vp9_encodeframe.c +++ b/vp9/encoder/vp9_encodeframe.c @@ -1247,8 +1247,8 @@ static void encode_frame_internal(VP9_COMP *cpi) { MACROBLOCKD *const xd = &x->e_mbd; int totalrate; - // printf("encode_frame_internal frame %d (%d)\n", - // cpi->common.current_video_frame, cpi->common.show_frame); +// fprintf(stderr, "encode_frame_internal frame %d (%d)\n", +// cpi->common.current_video_frame, cpi->common.show_frame); // Compute a modified set of reference frame probabilities to use when // prediction fails. These are based on the current general estimates for @@ -1329,12 +1329,11 @@ static void encode_frame_internal(VP9_COMP *cpi) { // Take tiles into account and give start/end MB int tile_col; TOKENEXTRA *tp = cpi->tok; - for (tile_col = 0; tile_col < cm->tile_columns; tile_col++) { TOKENEXTRA *tp_old = tp; - // For each row of SBs in the frame vp9_get_tile_col_offsets(cm, tile_col); + for (mb_row = 0; mb_row < cm->mb_rows; mb_row += 4) { encode_sb_row(cpi, mb_row, &tp, &totalrate); } diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c index 5278ac2a31cf066a0c278d1800c8f8b5068b4aa2..6335827cfcd7be7b09b5cc3134c033401c7afd69 100644 --- a/vp9/encoder/vp9_onyx_if.c +++ b/vp9/encoder/vp9_onyx_if.c @@ -1086,14 +1086,12 @@ void vp9_new_frame_rate(VP9_COMP *cpi, double framerate) { cpi->max_gf_interval = cpi->twopass.static_scene_max_gf_interval; } - -static int -rescale(int val, int num, int denom) { +static int64_t rescale(int val, int64_t num, int denom) { int64_t llnum = num; int64_t llden = denom; int64_t llval = val; - return (int)(llval * llnum / llden); + return (llval * llnum / llden); } static void set_tile_limits(VP9_COMP *cpi) { diff --git a/vp9/encoder/vp9_onyx_int.h b/vp9/encoder/vp9_onyx_int.h index 02a371964679346290bfbfa04617eaa8adbc1c17..0bc7bc835d5128791547366e889a44e5843de26a 100644 --- a/vp9/encoder/vp9_onyx_int.h +++ b/vp9/encoder/vp9_onyx_int.h @@ -485,7 +485,7 @@ typedef struct VP9_COMP { int kf_boost; int kf_zeromotion_pct; - int target_bandwidth; + int64_t target_bandwidth; struct vpx_codec_pkt_list *output_pkt_list; #if 0 diff --git a/vp9/vp9_cx_iface.c b/vp9/vp9_cx_iface.c index 2653954d06e766a8e7c15d1b350310fa5ff86b6b..db7a2fd11a463f2b8aa9ab42d7ba73bde198982f 100644 --- a/vp9/vp9_cx_iface.c +++ b/vp9/vp9_cx_iface.c @@ -126,8 +126,8 @@ update_error_state(vpx_codec_alg_priv_t *ctx, static vpx_codec_err_t validate_config(vpx_codec_alg_priv_t *ctx, const vpx_codec_enc_cfg_t *cfg, const struct vp8_extracfg *vp8_cfg) { - RANGE_CHECK(cfg, g_w, 1, 16383); /* 14 bits available */ - RANGE_CHECK(cfg, g_h, 1, 16383); /* 14 bits available */ + RANGE_CHECK(cfg, g_w, 1, 65535); /* 16 bits available */ + RANGE_CHECK(cfg, g_h, 1, 65535); /* 16 bits available */ RANGE_CHECK(cfg, g_timebase.den, 1, 1000000000); RANGE_CHECK(cfg, g_timebase.num, 1, cfg->g_timebase.den); RANGE_CHECK_HI(cfg, g_profile, 3); diff --git a/vp9/vp9_dx_iface.c b/vp9/vp9_dx_iface.c index b2ce9aa2e7d83559856af8f0147f8b385288379a..f2b80e1fbe894d2e3446f5f523622396859f5a5a 100644 --- a/vp9/vp9_dx_iface.c +++ b/vp9/vp9_dx_iface.c @@ -229,8 +229,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 = (c[3] | (c[4] << 8)) & 0x3fff; - si->h = (c[5] | (c[6] << 8)) & 0x3fff; + si->w = (c[3] | (c[4] << 8)); + si->h = (c[5] | (c[6] << 8)); /*printf("w=%d, h=%d\n", si->w, si->h);*/ if (!(si->h | si->w))