ref: f3adb459147de2ed21a3a93ebd78a4c41a4b843f
parent: 5dfb01bb30729550c381e14ea6ffce5a4599cf50
parent: 0e97e704962390389cab01d7b37f2f97757487fe
author: Johann Koenig <johannkoenig@google.com>
date: Thu Mar 15 15:26:16 EDT 2018
Merge "remove spatial svc experiment"
--- a/configure
+++ b/configure
@@ -275,7 +275,6 @@
unistd_h
"
EXPERIMENT_LIST="
- spatial_svc
fp_mb_stats
emulate_hardware
"
--- a/examples.mk
+++ b/examples.mk
@@ -109,18 +109,17 @@
endif
vpxenc.GUID = 548DEC74-7A15-4B2B-AFC3-AA102E7C25C1
vpxenc.DESCRIPTION = Full featured encoder
-ifeq ($(CONFIG_SPATIAL_SVC),yes)
- EXAMPLES-$(CONFIG_VP9_ENCODER) += vp9_spatial_svc_encoder.c
- vp9_spatial_svc_encoder.SRCS += args.c args.h
- vp9_spatial_svc_encoder.SRCS += ivfenc.c ivfenc.h
- vp9_spatial_svc_encoder.SRCS += tools_common.c tools_common.h
- vp9_spatial_svc_encoder.SRCS += video_common.h
- vp9_spatial_svc_encoder.SRCS += video_writer.h video_writer.c
- vp9_spatial_svc_encoder.SRCS += vpx_ports/msvc.h
- vp9_spatial_svc_encoder.SRCS += vpxstats.c vpxstats.h
- vp9_spatial_svc_encoder.GUID = 4A38598D-627D-4505-9C7B-D4020C84100D
- vp9_spatial_svc_encoder.DESCRIPTION = VP9 Spatial SVC Encoder
-endif
+
+EXAMPLES-$(CONFIG_VP9_ENCODER) += vp9_spatial_svc_encoder.c
+vp9_spatial_svc_encoder.SRCS += args.c args.h
+vp9_spatial_svc_encoder.SRCS += ivfenc.c ivfenc.h
+vp9_spatial_svc_encoder.SRCS += tools_common.c tools_common.h
+vp9_spatial_svc_encoder.SRCS += video_common.h
+vp9_spatial_svc_encoder.SRCS += video_writer.h video_writer.c
+vp9_spatial_svc_encoder.SRCS += vpx_ports/msvc.h
+vp9_spatial_svc_encoder.SRCS += vpxstats.c vpxstats.h
+vp9_spatial_svc_encoder.GUID = 4A38598D-627D-4505-9C7B-D4020C84100D
+vp9_spatial_svc_encoder.DESCRIPTION = VP9 Spatial SVC Encoder
ifneq ($(CONFIG_SHARED),yes)
EXAMPLES-$(CONFIG_VP9_ENCODER) += resize_util.c
--- a/libs.mk
+++ b/libs.mk
@@ -88,7 +88,7 @@
CODEC_EXPORTS-yes += $(addprefix $(VP9_PREFIX),$(VP9_CX_EXPORTS))
CODEC_SRCS-yes += $(VP9_PREFIX)vp9cx.mk vpx/vp8.h vpx/vp8cx.h
INSTALL-LIBS-yes += include/vpx/vp8.h include/vpx/vp8cx.h
- INSTALL-LIBS-$(CONFIG_SPATIAL_SVC) += include/vpx/svc_context.h
+ INSTALL-LIBS-yes += include/vpx/svc_context.h
INSTALL_MAPS += include/vpx/% $(SRC_PATH_BARE)/$(VP9_PREFIX)/%
CODEC_DOC_SRCS += vpx/vp8.h vpx/vp8cx.h
CODEC_DOC_SECTIONS += vp9 vp9_encoder
@@ -153,9 +153,7 @@
endif
CODEC_EXPORTS-yes += vpx/exports_com
CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_enc
-ifeq ($(CONFIG_SPATIAL_SVC),yes)
-CODEC_EXPORTS-$(CONFIG_ENCODERS) += vpx/exports_spatial_svc
-endif
+CODEC_EXPORTS-$(CONFIG_VP9_ENCODER) += vpx/exports_spatial_svc
CODEC_EXPORTS-$(CONFIG_DECODERS) += vpx/exports_dec
INSTALL-LIBS-yes += include/vpx/vpx_codec.h
--- a/test/svc_test.cc
+++ /dev/null
@@ -1,789 +1,0 @@
-/*
- * Copyright (c) 2013 The WebM 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 <string>
-#include "third_party/googletest/src/include/gtest/gtest.h"
-#include "test/codec_factory.h"
-#include "test/decode_test_driver.h"
-#include "test/i420_video_source.h"
-
-#include "vp9/decoder/vp9_decoder.h"
-
-#include "vpx/svc_context.h"
-#include "vpx/vp8cx.h"
-#include "vpx/vpx_encoder.h"
-
-namespace {
-
-using libvpx_test::CodecFactory;
-using libvpx_test::Decoder;
-using libvpx_test::DxDataIterator;
-using libvpx_test::VP9CodecFactory;
-
-class SvcTest : public ::testing::Test {
- protected:
- static const uint32_t kWidth = 352;
- static const uint32_t kHeight = 288;
-
- SvcTest()
- : codec_iface_(0), test_file_name_("hantro_collage_w352h288.yuv"),
- codec_initialized_(false), decoder_(0) {
- memset(&svc_, 0, sizeof(svc_));
- memset(&codec_, 0, sizeof(codec_));
- memset(&codec_enc_, 0, sizeof(codec_enc_));
- }
-
- virtual ~SvcTest() {}
-
- virtual void SetUp() {
- svc_.log_level = SVC_LOG_DEBUG;
- svc_.log_print = 0;
-
- codec_iface_ = vpx_codec_vp9_cx();
- const vpx_codec_err_t res =
- vpx_codec_enc_config_default(codec_iface_, &codec_enc_, 0);
- EXPECT_EQ(VPX_CODEC_OK, res);
-
- codec_enc_.g_w = kWidth;
- codec_enc_.g_h = kHeight;
- codec_enc_.g_timebase.num = 1;
- codec_enc_.g_timebase.den = 60;
- codec_enc_.kf_min_dist = 100;
- codec_enc_.kf_max_dist = 100;
-
- vpx_codec_dec_cfg_t dec_cfg = vpx_codec_dec_cfg_t();
- VP9CodecFactory codec_factory;
- decoder_ = codec_factory.CreateDecoder(dec_cfg, 0);
-
- tile_columns_ = 0;
- tile_rows_ = 0;
- }
-
- virtual void TearDown() {
- ReleaseEncoder();
- delete (decoder_);
- }
-
- void InitializeEncoder() {
- const vpx_codec_err_t res =
- vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_OK, res);
- vpx_codec_control(&codec_, VP8E_SET_CPUUSED, 4); // Make the test faster
- vpx_codec_control(&codec_, VP9E_SET_TILE_COLUMNS, tile_columns_);
- vpx_codec_control(&codec_, VP9E_SET_TILE_ROWS, tile_rows_);
- codec_initialized_ = true;
- }
-
- void ReleaseEncoder() {
- vpx_svc_release(&svc_);
- if (codec_initialized_) vpx_codec_destroy(&codec_);
- codec_initialized_ = false;
- }
-
- void GetStatsData(std::string *const stats_buf) {
- vpx_codec_iter_t iter = NULL;
- const vpx_codec_cx_pkt_t *cx_pkt;
-
- while ((cx_pkt = vpx_codec_get_cx_data(&codec_, &iter)) != NULL) {
- if (cx_pkt->kind == VPX_CODEC_STATS_PKT) {
- EXPECT_GT(cx_pkt->data.twopass_stats.sz, 0U);
- ASSERT_TRUE(cx_pkt->data.twopass_stats.buf != NULL);
- stats_buf->append(static_cast<char *>(cx_pkt->data.twopass_stats.buf),
- cx_pkt->data.twopass_stats.sz);
- }
- }
- }
-
- void Pass1EncodeNFrames(const int n, const int layers,
- std::string *const stats_buf) {
- vpx_codec_err_t res;
-
- ASSERT_GT(n, 0);
- ASSERT_GT(layers, 0);
- svc_.spatial_layers = layers;
- codec_enc_.g_pass = VPX_RC_FIRST_PASS;
- InitializeEncoder();
-
- libvpx_test::I420VideoSource video(
- test_file_name_, codec_enc_.g_w, codec_enc_.g_h,
- codec_enc_.g_timebase.den, codec_enc_.g_timebase.num, 0, 30);
- video.Begin();
-
- for (int i = 0; i < n; ++i) {
- res = vpx_svc_encode(&svc_, &codec_, video.img(), video.pts(),
- video.duration(), VPX_DL_GOOD_QUALITY);
- ASSERT_EQ(VPX_CODEC_OK, res);
- GetStatsData(stats_buf);
- video.Next();
- }
-
- // Flush encoder and test EOS packet.
- res = vpx_svc_encode(&svc_, &codec_, NULL, video.pts(), video.duration(),
- VPX_DL_GOOD_QUALITY);
- ASSERT_EQ(VPX_CODEC_OK, res);
- GetStatsData(stats_buf);
-
- ReleaseEncoder();
- }
-
- void StoreFrames(const size_t max_frame_received,
- struct vpx_fixed_buf *const outputs,
- size_t *const frame_received) {
- vpx_codec_iter_t iter = NULL;
- const vpx_codec_cx_pkt_t *cx_pkt;
-
- while ((cx_pkt = vpx_codec_get_cx_data(&codec_, &iter)) != NULL) {
- if (cx_pkt->kind == VPX_CODEC_CX_FRAME_PKT) {
- const size_t frame_size = cx_pkt->data.frame.sz;
-
- EXPECT_GT(frame_size, 0U);
- ASSERT_TRUE(cx_pkt->data.frame.buf != NULL);
- ASSERT_LT(*frame_received, max_frame_received);
-
- if (*frame_received == 0)
- EXPECT_EQ(1, !!(cx_pkt->data.frame.flags & VPX_FRAME_IS_KEY));
-
- outputs[*frame_received].buf = malloc(frame_size + 16);
- ASSERT_TRUE(outputs[*frame_received].buf != NULL);
- memcpy(outputs[*frame_received].buf, cx_pkt->data.frame.buf,
- frame_size);
- outputs[*frame_received].sz = frame_size;
- ++(*frame_received);
- }
- }
- }
-
- void Pass2EncodeNFrames(std::string *const stats_buf, const int n,
- const int layers,
- struct vpx_fixed_buf *const outputs) {
- vpx_codec_err_t res;
- size_t frame_received = 0;
-
- ASSERT_TRUE(outputs != NULL);
- ASSERT_GT(n, 0);
- ASSERT_GT(layers, 0);
- svc_.spatial_layers = layers;
- codec_enc_.rc_target_bitrate = 500;
- if (codec_enc_.g_pass == VPX_RC_LAST_PASS) {
- ASSERT_TRUE(stats_buf != NULL);
- ASSERT_GT(stats_buf->size(), 0U);
- codec_enc_.rc_twopass_stats_in.buf = &(*stats_buf)[0];
- codec_enc_.rc_twopass_stats_in.sz = stats_buf->size();
- }
- InitializeEncoder();
-
- libvpx_test::I420VideoSource video(
- test_file_name_, codec_enc_.g_w, codec_enc_.g_h,
- codec_enc_.g_timebase.den, codec_enc_.g_timebase.num, 0, 30);
- video.Begin();
-
- for (int i = 0; i < n; ++i) {
- res = vpx_svc_encode(&svc_, &codec_, video.img(), video.pts(),
- video.duration(), VPX_DL_GOOD_QUALITY);
- ASSERT_EQ(VPX_CODEC_OK, res);
- StoreFrames(n, outputs, &frame_received);
- video.Next();
- }
-
- // Flush encoder.
- res = vpx_svc_encode(&svc_, &codec_, NULL, 0, video.duration(),
- VPX_DL_GOOD_QUALITY);
- EXPECT_EQ(VPX_CODEC_OK, res);
- StoreFrames(n, outputs, &frame_received);
-
- EXPECT_EQ(frame_received, static_cast<size_t>(n));
-
- ReleaseEncoder();
- }
-
- void DecodeNFrames(const struct vpx_fixed_buf *const inputs, const int n) {
- int decoded_frames = 0;
- int received_frames = 0;
-
- ASSERT_TRUE(inputs != NULL);
- ASSERT_GT(n, 0);
-
- for (int i = 0; i < n; ++i) {
- ASSERT_TRUE(inputs[i].buf != NULL);
- ASSERT_GT(inputs[i].sz, 0U);
- const vpx_codec_err_t res_dec = decoder_->DecodeFrame(
- static_cast<const uint8_t *>(inputs[i].buf), inputs[i].sz);
- ASSERT_EQ(VPX_CODEC_OK, res_dec) << decoder_->DecodeError();
- ++decoded_frames;
-
- DxDataIterator dec_iter = decoder_->GetDxData();
- while (dec_iter.Next() != NULL) {
- ++received_frames;
- }
- }
- EXPECT_EQ(decoded_frames, n);
- EXPECT_EQ(received_frames, n);
- }
-
- void DropEnhancementLayers(struct vpx_fixed_buf *const inputs,
- const int num_super_frames,
- const int remained_spatial_layers) {
- ASSERT_TRUE(inputs != NULL);
- ASSERT_GT(num_super_frames, 0);
- ASSERT_GT(remained_spatial_layers, 0);
-
- for (int i = 0; i < num_super_frames; ++i) {
- uint32_t frame_sizes[8] = { 0 };
- int frame_count = 0;
- int frames_found = 0;
- int frame;
- ASSERT_TRUE(inputs[i].buf != NULL);
- ASSERT_GT(inputs[i].sz, 0U);
-
- vpx_codec_err_t res = vp9_parse_superframe_index(
- static_cast<const uint8_t *>(inputs[i].buf), inputs[i].sz,
- frame_sizes, &frame_count, NULL, NULL);
- ASSERT_EQ(VPX_CODEC_OK, res);
-
- if (frame_count == 0) {
- // There's no super frame but only a single frame.
- ASSERT_EQ(1, remained_spatial_layers);
- } else {
- // Found a super frame.
- uint8_t *frame_data = static_cast<uint8_t *>(inputs[i].buf);
- uint8_t *frame_start = frame_data;
- for (frame = 0; frame < frame_count; ++frame) {
- // Looking for a visible frame.
- if (frame_data[0] & 0x02) {
- ++frames_found;
- if (frames_found == remained_spatial_layers) break;
- }
- frame_data += frame_sizes[frame];
- }
- ASSERT_LT(frame, frame_count)
- << "Couldn't find a visible frame. "
- << "remained_spatial_layers: " << remained_spatial_layers
- << " super_frame: " << i;
- if (frame == frame_count - 1) continue;
-
- frame_data += frame_sizes[frame];
-
- // We need to add one more frame for multiple frame contexts.
- uint8_t marker =
- static_cast<const uint8_t *>(inputs[i].buf)[inputs[i].sz - 1];
- const uint32_t mag = ((marker >> 3) & 0x3) + 1;
- const size_t index_sz = 2 + mag * frame_count;
- const size_t new_index_sz = 2 + mag * (frame + 1);
- marker &= 0x0f8;
- marker |= frame;
-
- // Copy existing frame sizes.
- memmove(frame_data + 1, frame_start + inputs[i].sz - index_sz + 1,
- new_index_sz - 2);
- // New marker.
- frame_data[0] = marker;
- frame_data += (mag * (frame + 1) + 1);
-
- *frame_data++ = marker;
- inputs[i].sz = frame_data - frame_start;
- }
- }
- }
-
- void FreeBitstreamBuffers(struct vpx_fixed_buf *const inputs, const int n) {
- ASSERT_TRUE(inputs != NULL);
- ASSERT_GT(n, 0);
-
- for (int i = 0; i < n; ++i) {
- free(inputs[i].buf);
- inputs[i].buf = NULL;
- inputs[i].sz = 0;
- }
- }
-
- SvcContext svc_;
- vpx_codec_ctx_t codec_;
- struct vpx_codec_enc_cfg codec_enc_;
- vpx_codec_iface_t *codec_iface_;
- std::string test_file_name_;
- bool codec_initialized_;
- Decoder *decoder_;
- int tile_columns_;
- int tile_rows_;
-};
-
-TEST_F(SvcTest, SvcInit) {
- // test missing parameters
- vpx_codec_err_t res = vpx_svc_init(NULL, &codec_, codec_iface_, &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
- res = vpx_svc_init(&svc_, NULL, codec_iface_, &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
- res = vpx_svc_init(&svc_, &codec_, NULL, &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_init(&svc_, &codec_, codec_iface_, NULL);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- svc_.spatial_layers = 6; // too many layers
- res = vpx_svc_init(&svc_, &codec_, codec_iface_, &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- svc_.spatial_layers = 0; // use default layers
- InitializeEncoder();
- EXPECT_EQ(VPX_SS_DEFAULT_LAYERS, svc_.spatial_layers);
-}
-
-TEST_F(SvcTest, InitTwoLayers) {
- svc_.spatial_layers = 2;
- InitializeEncoder();
-}
-
-TEST_F(SvcTest, InvalidOptions) {
- vpx_codec_err_t res = vpx_svc_set_options(&svc_, NULL);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "not-an-option=1");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-}
-
-TEST_F(SvcTest, SetLayersOption) {
- vpx_codec_err_t res = vpx_svc_set_options(&svc_, "spatial-layers=3");
- EXPECT_EQ(VPX_CODEC_OK, res);
- InitializeEncoder();
- EXPECT_EQ(3, svc_.spatial_layers);
-}
-
-TEST_F(SvcTest, SetMultipleOptions) {
- vpx_codec_err_t res =
- vpx_svc_set_options(&svc_, "spatial-layers=2 scale-factors=1/3,2/3");
- EXPECT_EQ(VPX_CODEC_OK, res);
- InitializeEncoder();
- EXPECT_EQ(2, svc_.spatial_layers);
-}
-
-TEST_F(SvcTest, SetScaleFactorsOption) {
- svc_.spatial_layers = 2;
- vpx_codec_err_t res =
- vpx_svc_set_options(&svc_, "scale-factors=not-scale-factors");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "scale-factors=1/3, 3*3");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "scale-factors=1/3");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "scale-factors=1/3,2/3");
- EXPECT_EQ(VPX_CODEC_OK, res);
- InitializeEncoder();
-}
-
-TEST_F(SvcTest, SetQuantizersOption) {
- svc_.spatial_layers = 2;
- vpx_codec_err_t res = vpx_svc_set_options(&svc_, "max-quantizers=nothing");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "min-quantizers=nothing");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "max-quantizers=40");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "min-quantizers=40");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "max-quantizers=30,30 min-quantizers=40,40");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "max-quantizers=40,40 min-quantizers=30,30");
- InitializeEncoder();
-}
-
-TEST_F(SvcTest, SetAutoAltRefOption) {
- svc_.spatial_layers = 5;
- vpx_codec_err_t res = vpx_svc_set_options(&svc_, "auto-alt-refs=none");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- res = vpx_svc_set_options(&svc_, "auto-alt-refs=1,1,1,1,0");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- vpx_svc_set_options(&svc_, "auto-alt-refs=0,1,1,1,0");
- InitializeEncoder();
-}
-
-// Test that decoder can handle an SVC frame as the first frame in a sequence.
-TEST_F(SvcTest, OnePassEncodeOneFrame) {
- codec_enc_.g_pass = VPX_RC_ONE_PASS;
- vpx_fixed_buf output = vpx_fixed_buf();
- Pass2EncodeNFrames(NULL, 1, 2, &output);
- DecodeNFrames(&output, 1);
- FreeBitstreamBuffers(&output, 1);
-}
-
-TEST_F(SvcTest, OnePassEncodeThreeFrames) {
- codec_enc_.g_pass = VPX_RC_ONE_PASS;
- codec_enc_.g_lag_in_frames = 0;
- vpx_fixed_buf outputs[3];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(NULL, 3, 2, &outputs[0]);
- DecodeNFrames(&outputs[0], 3);
- FreeBitstreamBuffers(&outputs[0], 3);
-}
-
-TEST_F(SvcTest, TwoPassEncode10Frames) {
- // First pass encode
- std::string stats_buf;
- Pass1EncodeNFrames(10, 2, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 2, &outputs[0]);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode20FramesWithAltRef) {
- // First pass encode
- std::string stats_buf;
- Pass1EncodeNFrames(20, 2, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1,1");
- vpx_fixed_buf outputs[20];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 20, 2, &outputs[0]);
- DecodeNFrames(&outputs[0], 20);
- FreeBitstreamBuffers(&outputs[0], 20);
-}
-
-TEST_F(SvcTest, TwoPassEncode2SpatialLayersDecodeBaseLayerOnly) {
- // First pass encode
- std::string stats_buf;
- Pass1EncodeNFrames(10, 2, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1,1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 2, &outputs[0]);
- DropEnhancementLayers(&outputs[0], 10, 1);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode5SpatialLayersDecode54321Layers) {
- // First pass encode
- std::string stats_buf;
- Pass1EncodeNFrames(10, 5, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- vpx_svc_set_options(&svc_, "auto-alt-refs=0,1,1,1,0");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 5, &outputs[0]);
-
- DecodeNFrames(&outputs[0], 10);
- DropEnhancementLayers(&outputs[0], 10, 4);
- DecodeNFrames(&outputs[0], 10);
- DropEnhancementLayers(&outputs[0], 10, 3);
- DecodeNFrames(&outputs[0], 10);
- DropEnhancementLayers(&outputs[0], 10, 2);
- DecodeNFrames(&outputs[0], 10);
- DropEnhancementLayers(&outputs[0], 10, 1);
- DecodeNFrames(&outputs[0], 10);
-
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode2SNRLayers) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1,1/1");
- Pass1EncodeNFrames(20, 2, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1,1 scale-factors=1/1,1/1");
- vpx_fixed_buf outputs[20];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 20, 2, &outputs[0]);
- DecodeNFrames(&outputs[0], 20);
- FreeBitstreamBuffers(&outputs[0], 20);
-}
-
-TEST_F(SvcTest, TwoPassEncode3SNRLayersDecode321Layers) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1,1/1,1/1");
- Pass1EncodeNFrames(20, 3, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1,1,1 scale-factors=1/1,1/1,1/1");
- vpx_fixed_buf outputs[20];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 20, 3, &outputs[0]);
- DecodeNFrames(&outputs[0], 20);
- DropEnhancementLayers(&outputs[0], 20, 2);
- DecodeNFrames(&outputs[0], 20);
- DropEnhancementLayers(&outputs[0], 20, 1);
- DecodeNFrames(&outputs[0], 20);
-
- FreeBitstreamBuffers(&outputs[0], 20);
-}
-
-TEST_F(SvcTest, SetMultipleFrameContextsOption) {
- svc_.spatial_layers = 5;
- vpx_codec_err_t res = vpx_svc_set_options(&svc_, "multi-frame-contexts=1");
- EXPECT_EQ(VPX_CODEC_OK, res);
- res = vpx_svc_init(&svc_, &codec_, vpx_codec_vp9_cx(), &codec_enc_);
- EXPECT_EQ(VPX_CODEC_INVALID_PARAM, res);
-
- svc_.spatial_layers = 2;
- res = vpx_svc_set_options(&svc_, "multi-frame-contexts=1");
- InitializeEncoder();
-}
-
-TEST_F(SvcTest, TwoPassEncode2SpatialLayersWithMultipleFrameContexts) {
- // First pass encode
- std::string stats_buf;
- Pass1EncodeNFrames(10, 2, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- codec_enc_.g_error_resilient = 0;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1,1 multi-frame-contexts=1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 2, &outputs[0]);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest,
- TwoPassEncode2SpatialLayersWithMultipleFrameContextsDecodeBaselayer) {
- // First pass encode
- std::string stats_buf;
- Pass1EncodeNFrames(10, 2, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- codec_enc_.g_error_resilient = 0;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1,1 multi-frame-contexts=1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 2, &outputs[0]);
- DropEnhancementLayers(&outputs[0], 10, 1);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode2SNRLayersWithMultipleFrameContexts) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1,1/1");
- Pass1EncodeNFrames(10, 2, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- codec_enc_.g_error_resilient = 0;
- vpx_svc_set_options(&svc_,
- "auto-alt-refs=1,1 scale-factors=1/1,1/1 "
- "multi-frame-contexts=1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 2, &outputs[0]);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest,
- TwoPassEncode3SNRLayersWithMultipleFrameContextsDecode321Layer) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1,1/1,1/1");
- Pass1EncodeNFrames(10, 3, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- codec_enc_.g_error_resilient = 0;
- vpx_svc_set_options(&svc_,
- "auto-alt-refs=1,1,1 scale-factors=1/1,1/1,1/1 "
- "multi-frame-contexts=1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 3, &outputs[0]);
-
- DecodeNFrames(&outputs[0], 10);
- DropEnhancementLayers(&outputs[0], 10, 2);
- DecodeNFrames(&outputs[0], 10);
- DropEnhancementLayers(&outputs[0], 10, 1);
- DecodeNFrames(&outputs[0], 10);
-
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode2TemporalLayers) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1");
- svc_.temporal_layers = 2;
- Pass1EncodeNFrames(10, 1, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- svc_.temporal_layers = 2;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1 scale-factors=1/1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 1, &outputs[0]);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode2TemporalLayersWithMultipleFrameContexts) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1");
- svc_.temporal_layers = 2;
- Pass1EncodeNFrames(10, 1, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- svc_.temporal_layers = 2;
- codec_enc_.g_error_resilient = 0;
- vpx_svc_set_options(&svc_,
- "auto-alt-refs=1 scale-factors=1/1 "
- "multi-frame-contexts=1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 1, &outputs[0]);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode2TemporalLayersDecodeBaseLayer) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1");
- svc_.temporal_layers = 2;
- Pass1EncodeNFrames(10, 1, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- svc_.temporal_layers = 2;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1 scale-factors=1/1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 1, &outputs[0]);
-
- vpx_fixed_buf base_layer[5];
- for (int i = 0; i < 5; ++i) base_layer[i] = outputs[i * 2];
-
- DecodeNFrames(&base_layer[0], 5);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest,
- TwoPassEncode2TemporalLayersWithMultipleFrameContextsDecodeBaseLayer) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1");
- svc_.temporal_layers = 2;
- Pass1EncodeNFrames(10, 1, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- svc_.temporal_layers = 2;
- codec_enc_.g_error_resilient = 0;
- vpx_svc_set_options(&svc_,
- "auto-alt-refs=1 scale-factors=1/1 "
- "multi-frame-contexts=1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 1, &outputs[0]);
-
- vpx_fixed_buf base_layer[5];
- for (int i = 0; i < 5; ++i) base_layer[i] = outputs[i * 2];
-
- DecodeNFrames(&base_layer[0], 5);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode2TemporalLayersWithTiles) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1");
- svc_.temporal_layers = 2;
- Pass1EncodeNFrames(10, 1, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- svc_.temporal_layers = 2;
- vpx_svc_set_options(&svc_, "auto-alt-refs=1 scale-factors=1/1");
- codec_enc_.g_w = 704;
- codec_enc_.g_h = 144;
- tile_columns_ = 1;
- tile_rows_ = 1;
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 1, &outputs[0]);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-TEST_F(SvcTest, TwoPassEncode2TemporalLayersWithMultipleFrameContextsAndTiles) {
- // First pass encode
- std::string stats_buf;
- vpx_svc_set_options(&svc_, "scale-factors=1/1");
- svc_.temporal_layers = 2;
- Pass1EncodeNFrames(10, 1, &stats_buf);
-
- // Second pass encode
- codec_enc_.g_pass = VPX_RC_LAST_PASS;
- svc_.temporal_layers = 2;
- codec_enc_.g_error_resilient = 0;
- codec_enc_.g_w = 704;
- codec_enc_.g_h = 144;
- tile_columns_ = 1;
- tile_rows_ = 1;
- vpx_svc_set_options(&svc_,
- "auto-alt-refs=1 scale-factors=1/1 "
- "multi-frame-contexts=1");
- vpx_fixed_buf outputs[10];
- memset(&outputs[0], 0, sizeof(outputs));
- Pass2EncodeNFrames(&stats_buf, 10, 1, &outputs[0]);
- DecodeNFrames(&outputs[0], 10);
- FreeBitstreamBuffers(&outputs[0], 10);
-}
-
-} // namespace
--- a/test/test.mk
+++ b/test/test.mk
@@ -169,7 +169,6 @@
LIBVPX_TEST_SRCS-$(CONFIG_VP9_ENCODER) += vp9_subtract_test.cc
ifeq ($(CONFIG_VP9_ENCODER),yes)
-LIBVPX_TEST_SRCS-$(CONFIG_SPATIAL_SVC) += svc_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_INTERNAL_STATS) += blockiness_test.cc
LIBVPX_TEST_SRCS-$(CONFIG_INTERNAL_STATS) += consistency_test.cc
endif
--- a/test/vp9_spatial_svc_encoder.sh
+++ /dev/null
@@ -1,72 +1,0 @@
-#!/bin/sh
-##
-## Copyright (c) 2014 The WebM 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.
-##
-## This file tests the libvpx vp9_spatial_svc_encoder example. To add new
-## tests to to this file, do the following:
-## 1. Write a shell function (this is your test).
-## 2. Add the function to vp9_spatial_svc_tests (on a new line).
-##
-. $(dirname $0)/tools_common.sh
-
-# Environment check: $YUV_RAW_INPUT is required.
-vp9_spatial_svc_encoder_verify_environment() {
- if [ ! -e "${YUV_RAW_INPUT}" ]; then
- echo "Libvpx test data must exist in LIBVPX_TEST_DATA_PATH."
- return 1
- fi
-}
-
-# Runs vp9_spatial_svc_encoder. $1 is the test name.
-vp9_spatial_svc_encoder() {
- local readonly \
- encoder="${LIBVPX_BIN_PATH}/vp9_spatial_svc_encoder${VPX_TEST_EXE_SUFFIX}"
- local readonly test_name="$1"
- local readonly \
- output_file="${VPX_TEST_OUTPUT_DIR}/vp9_ssvc_encoder${test_name}.ivf"
- local readonly frames_to_encode=10
- local readonly max_kf=9999
-
- shift
-
- if [ ! -x "${encoder}" ]; then
- elog "${encoder} does not exist or is not executable."
- return 1
- fi
-
- eval "${VPX_TEST_PREFIX}" "${encoder}" -w "${YUV_RAW_INPUT_WIDTH}" \
- -h "${YUV_RAW_INPUT_HEIGHT}" -k "${max_kf}" -f "${frames_to_encode}" \
- "$@" "${YUV_RAW_INPUT}" "${output_file}" ${devnull}
-
- [ -e "${output_file}" ] || return 1
-}
-
-# Each test is run with layer count 1-$vp9_ssvc_test_layers.
-vp9_ssvc_test_layers=5
-
-vp9_spatial_svc() {
- if [ "$(vp9_encode_available)" = "yes" ]; then
- local readonly test_name="vp9_spatial_svc"
- for layers in $(seq 1 ${vp9_ssvc_test_layers}); do
- vp9_spatial_svc_encoder "${test_name}" -sl ${layers}
- done
- fi
-}
-
-readonly vp9_spatial_svc_tests="DISABLED_vp9_spatial_svc_mode_i
- DISABLED_vp9_spatial_svc_mode_altip
- DISABLED_vp9_spatial_svc_mode_ip
- DISABLED_vp9_spatial_svc_mode_gf
- vp9_spatial_svc"
-
-if [ "$(vpx_config_option_enabled CONFIG_SPATIAL_SVC)" = "yes" ]; then
- run_tests \
- vp9_spatial_svc_encoder_verify_environment \
- "${vp9_spatial_svc_tests}"
-fi
--- a/vp9/encoder/vp9_encoder.c
+++ b/vp9/encoder/vp9_encoder.c
@@ -5226,12 +5226,6 @@
int i;
if (is_two_pass_svc(cpi)) {
-#if CONFIG_SPATIAL_SVC
- vp9_svc_start_frame(cpi);
- // Use a small empty frame instead of a real frame
- if (cpi->svc.encode_empty_frame_state == ENCODING)
- source = &cpi->svc.empty_frame;
-#endif
if (oxcf->pass == 2) vp9_restore_layer_context(cpi);
} else if (is_one_pass_cbr_svc(cpi)) {
vp9_one_pass_cbr_svc_start_layer(cpi);
@@ -5284,19 +5278,6 @@
if ((source = vp9_lookahead_peek(cpi->lookahead, arf_src_index)) != NULL) {
cpi->alt_ref_source = source;
-#if CONFIG_SPATIAL_SVC
- if (is_two_pass_svc(cpi) && cpi->svc.spatial_layer_id > 0) {
- int i;
- // Reference a hidden frame from a lower layer
- for (i = cpi->svc.spatial_layer_id - 1; i >= 0; --i) {
- if (oxcf->ss_enable_auto_arf[i]) {
- cpi->gld_fb_idx = cpi->svc.layer_context[i].alt_ref_idx;
- break;
- }
- }
- }
- cpi->svc.layer_context[cpi->svc.spatial_layer_id].has_alt_frame = 1;
-#endif
#if !CONFIG_REALTIME_ONLY
if ((oxcf->mode != REALTIME) && (oxcf->arnr_max_frames > 0) &&
(oxcf->arnr_strength > 0)) {
--- a/vp9/encoder/vp9_lookahead.h
+++ b/vp9/encoder/vp9_lookahead.h
@@ -15,10 +15,6 @@
#include "vpx/vpx_encoder.h"
#include "vpx/vpx_integer.h"
-#if CONFIG_SPATIAL_SVC
-#include "vpx/vp8cx.h"
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
--- a/vp9/encoder/vp9_svc_layercontext.c
+++ b/vp9/encoder/vp9_svc_layercontext.c
@@ -711,120 +711,6 @@
return 0;
}
-#if CONFIG_SPATIAL_SVC
-#define SMALL_FRAME_FB_IDX 7
-
-int vp9_svc_start_frame(VP9_COMP *const cpi) {
- int width = 0, height = 0;
- LAYER_CONTEXT *lc;
- struct lookahead_entry *buf;
- int count = 1 << (cpi->svc.number_temporal_layers - 1);
-
- cpi->svc.spatial_layer_id = cpi->svc.spatial_layer_to_encode;
- lc = &cpi->svc.layer_context[cpi->svc.spatial_layer_id];
-
- cpi->svc.temporal_layer_id = 0;
- while ((lc->current_video_frame_in_layer % count) != 0) {
- ++cpi->svc.temporal_layer_id;
- count >>= 1;
- }
-
- cpi->ref_frame_flags = VP9_ALT_FLAG | VP9_GOLD_FLAG | VP9_LAST_FLAG;
-
- cpi->lst_fb_idx = cpi->svc.spatial_layer_id;
-
- if (cpi->svc.spatial_layer_id == 0)
- cpi->gld_fb_idx =
- (lc->gold_ref_idx >= 0) ? lc->gold_ref_idx : cpi->lst_fb_idx;
- else
- cpi->gld_fb_idx = cpi->svc.spatial_layer_id - 1;
-
- if (lc->current_video_frame_in_layer == 0) {
- if (cpi->svc.spatial_layer_id >= 2) {
- cpi->alt_fb_idx = cpi->svc.spatial_layer_id - 2;
- } else {
- cpi->alt_fb_idx = cpi->lst_fb_idx;
- cpi->ref_frame_flags &= (~VP9_LAST_FLAG & ~VP9_ALT_FLAG);
- }
- } else {
- if (cpi->oxcf.ss_enable_auto_arf[cpi->svc.spatial_layer_id]) {
- cpi->alt_fb_idx = lc->alt_ref_idx;
- if (!lc->has_alt_frame) cpi->ref_frame_flags &= (~VP9_ALT_FLAG);
- } else {
- // Find a proper alt_fb_idx for layers that don't have alt ref frame
- if (cpi->svc.spatial_layer_id == 0) {
- cpi->alt_fb_idx = cpi->lst_fb_idx;
- } else {
- LAYER_CONTEXT *lc_lower =
- &cpi->svc.layer_context[cpi->svc.spatial_layer_id - 1];
-
- if (cpi->oxcf.ss_enable_auto_arf[cpi->svc.spatial_layer_id - 1] &&
- lc_lower->alt_ref_source != NULL)
- cpi->alt_fb_idx = lc_lower->alt_ref_idx;
- else if (cpi->svc.spatial_layer_id >= 2)
- cpi->alt_fb_idx = cpi->svc.spatial_layer_id - 2;
- else
- cpi->alt_fb_idx = cpi->lst_fb_idx;
- }
- }
- }
-
- get_layer_resolution(cpi->oxcf.width, cpi->oxcf.height,
- lc->scaling_factor_num, lc->scaling_factor_den, &width,
- &height);
-
- // Workaround for multiple frame contexts. In some frames we can't use prev_mi
- // since its previous frame could be changed during decoding time. The idea is
- // we put a empty invisible frame in front of them, then we will not use
- // prev_mi when encoding these frames.
-
- buf = vp9_lookahead_peek(cpi->lookahead, 0);
- if (cpi->oxcf.error_resilient_mode == 0 && cpi->oxcf.pass == 2 &&
- cpi->svc.encode_empty_frame_state == NEED_TO_ENCODE &&
- lc->rc.frames_to_key != 0 &&
- !(buf != NULL && (buf->flags & VPX_EFLAG_FORCE_KF))) {
- if ((cpi->svc.number_temporal_layers > 1 &&
- cpi->svc.temporal_layer_id < cpi->svc.number_temporal_layers - 1) ||
- (cpi->svc.number_spatial_layers > 1 &&
- cpi->svc.spatial_layer_id == 0)) {
- struct lookahead_entry *buf = vp9_lookahead_peek(cpi->lookahead, 0);
-
- if (buf != NULL) {
- cpi->svc.empty_frame.ts_start = buf->ts_start;
- cpi->svc.empty_frame.ts_end = buf->ts_end;
- cpi->svc.encode_empty_frame_state = ENCODING;
- cpi->common.show_frame = 0;
- cpi->ref_frame_flags = 0;
- cpi->common.frame_type = INTER_FRAME;
- cpi->lst_fb_idx = cpi->gld_fb_idx = cpi->alt_fb_idx =
- SMALL_FRAME_FB_IDX;
-
- if (cpi->svc.encode_intra_empty_frame != 0) cpi->common.intra_only = 1;
-
- width = SMALL_FRAME_WIDTH;
- height = SMALL_FRAME_HEIGHT;
- }
- }
- }
-
- cpi->oxcf.worst_allowed_q = vp9_quantizer_to_qindex(lc->max_q);
- cpi->oxcf.best_allowed_q = vp9_quantizer_to_qindex(lc->min_q);
-
- vp9_change_config(cpi, &cpi->oxcf);
-
- if (vp9_set_size_literal(cpi, width, height) != 0)
- return VPX_CODEC_INVALID_PARAM;
-
- vp9_set_high_precision_mv(cpi, 1);
-
- cpi->alt_ref_source = get_layer_context(cpi)->alt_ref_source;
-
- return 0;
-}
-
-#undef SMALL_FRAME_FB_IDX
-#endif // CONFIG_SPATIAL_SVC
-
struct lookahead_entry *vp9_svc_lookahead_pop(VP9_COMP *const cpi,
struct lookahead_ctx *ctx,
int drain) {
--- a/vp9/vp9_cx_iface.c
+++ b/vp9/vp9_cx_iface.c
@@ -237,22 +237,6 @@
ERROR("ts_rate_decimator factors are not powers of 2");
}
-#if CONFIG_SPATIAL_SVC
-
- if ((cfg->ss_number_layers > 1 || cfg->ts_number_layers > 1) &&
- cfg->g_pass == VPX_RC_LAST_PASS) {
- unsigned int i, alt_ref_sum = 0;
- for (i = 0; i < cfg->ss_number_layers; ++i) {
- if (cfg->ss_enable_auto_alt_ref[i]) ++alt_ref_sum;
- }
- if (alt_ref_sum > REF_FRAMES - cfg->ss_number_layers)
- ERROR("Not enough ref buffers for svc alt ref frames");
- if (cfg->ss_number_layers * cfg->ts_number_layers > 3 &&
- cfg->g_error_resilient == 0)
- ERROR("Multiple frame context are not supported for more than 3 layers");
- }
-#endif
-
// VP9 does not support a lower bound on the keyframe interval in
// automatic keyframe placement mode.
if (cfg->kf_mode != VPX_KF_DISABLED && cfg->kf_min_dist != cfg->kf_max_dist &&
@@ -589,9 +573,6 @@
oxcf->motion_vector_unit_test = extra_cfg->motion_vector_unit_test;
for (sl = 0; sl < oxcf->ss_number_layers; ++sl) {
-#if CONFIG_SPATIAL_SVC
- oxcf->ss_enable_auto_arf[sl] = cfg->ss_enable_auto_alt_ref[sl];
-#endif
for (tl = 0; tl < oxcf->ts_number_layers; ++tl) {
oxcf->layer_target_bitrate[sl * oxcf->ts_number_layers + tl] =
1000 * cfg->layer_target_bitrate[sl * oxcf->ts_number_layers + tl];
@@ -599,9 +580,6 @@
}
if (oxcf->ss_number_layers == 1 && oxcf->pass != 0) {
oxcf->ss_target_bitrate[0] = (int)oxcf->target_bandwidth;
-#if CONFIG_SPATIAL_SVC
- oxcf->ss_enable_auto_arf[0] = extra_cfg->enable_auto_alt_ref;
-#endif
}
if (oxcf->ts_number_layers > 1) {
for (tl = 0; tl < VPX_TS_MAX_LAYERS; ++tl) {
@@ -1215,14 +1193,6 @@
if (size || (cpi->use_svc && cpi->svc.skip_enhancement_layer)) {
vpx_codec_cx_pkt_t pkt;
-#if CONFIG_SPATIAL_SVC
- if (cpi->use_svc)
- cpi->svc
- .layer_context[cpi->svc.spatial_layer_id *
- cpi->svc.number_temporal_layers]
- .layer_size += size;
-#endif
-
// Pack invisible frames with the next visible frame
if (!cpi->common.show_frame ||
(cpi->use_svc &&
@@ -1291,27 +1261,6 @@
cx_data += size;
cx_data_sz -= size;
-#if CONFIG_SPATIAL_SVC && defined(VPX_TEST_SPATIAL_SVC)
- if (cpi->use_svc && !ctx->output_cx_pkt_cb.output_cx_pkt) {
- vpx_codec_cx_pkt_t pkt_sizes, pkt_psnr;
- int sl;
- vp9_zero(pkt_sizes);
- vp9_zero(pkt_psnr);
- pkt_sizes.kind = VPX_CODEC_SPATIAL_SVC_LAYER_SIZES;
- pkt_psnr.kind = VPX_CODEC_SPATIAL_SVC_LAYER_PSNR;
- for (sl = 0; sl < cpi->svc.number_spatial_layers; ++sl) {
- LAYER_CONTEXT *lc =
- &cpi->svc.layer_context[sl * cpi->svc.number_temporal_layers];
- pkt_sizes.data.layer_sizes[sl] = lc->layer_size;
- pkt_psnr.data.layer_psnr[sl] = lc->psnr_pkt;
- lc->layer_size = 0;
- }
-
- vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt_sizes);
-
- vpx_codec_pkt_list_add(&ctx->pkt_list.head, &pkt_psnr);
- }
-#endif
if (is_one_pass_cbr_svc(cpi) &&
(cpi->svc.spatial_layer_id == cpi->svc.number_spatial_layers - 1)) {
// Encoded all spatial layers; exit loop.
--- a/vpx/src/svc_encodeframe.c
+++ b/vpx/src/svc_encodeframe.c
@@ -471,11 +471,6 @@
return VPX_CODEC_INVALID_PARAM;
}
-#if CONFIG_SPATIAL_SVC
- for (i = 0; i < svc_ctx->spatial_layers; ++i)
- enc_cfg->ss_enable_auto_alt_ref[i] = si->enable_auto_alt_ref[i];
-#endif
-
if (svc_ctx->temporal_layers > 1) {
int i;
for (i = 0; i < svc_ctx->temporal_layers; ++i) {
@@ -543,56 +538,7 @@
iter = NULL;
while ((cx_pkt = vpx_codec_get_cx_data(codec_ctx, &iter))) {
switch (cx_pkt->kind) {
-#if CONFIG_SPATIAL_SVC && defined(VPX_TEST_SPATIAL_SVC)
- case VPX_CODEC_SPATIAL_SVC_LAYER_PSNR: {
- int i;
- for (i = 0; i < svc_ctx->spatial_layers; ++i) {
- int j;
- svc_log(svc_ctx, SVC_LOG_DEBUG,
- "SVC frame: %d, layer: %d, PSNR(Total/Y/U/V): "
- "%2.3f %2.3f %2.3f %2.3f \n",
- si->psnr_pkt_received, i, cx_pkt->data.layer_psnr[i].psnr[0],
- cx_pkt->data.layer_psnr[i].psnr[1],
- cx_pkt->data.layer_psnr[i].psnr[2],
- cx_pkt->data.layer_psnr[i].psnr[3]);
- svc_log(svc_ctx, SVC_LOG_DEBUG,
- "SVC frame: %d, layer: %d, SSE(Total/Y/U/V): "
- "%2.3f %2.3f %2.3f %2.3f \n",
- si->psnr_pkt_received, i, cx_pkt->data.layer_psnr[i].sse[0],
- cx_pkt->data.layer_psnr[i].sse[1],
- cx_pkt->data.layer_psnr[i].sse[2],
- cx_pkt->data.layer_psnr[i].sse[3]);
-
- for (j = 0; j < COMPONENTS; ++j) {
- si->psnr_sum[i][j] += cx_pkt->data.layer_psnr[i].psnr[j];
- si->sse_sum[i][j] += cx_pkt->data.layer_psnr[i].sse[j];
- }
- }
- ++si->psnr_pkt_received;
- break;
- }
- case VPX_CODEC_SPATIAL_SVC_LAYER_SIZES: {
- int i;
- for (i = 0; i < svc_ctx->spatial_layers; ++i)
- si->bytes_sum[i] += cx_pkt->data.layer_sizes[i];
- break;
- }
-#endif
case VPX_CODEC_PSNR_PKT: {
-#if CONFIG_SPATIAL_SVC && defined(VPX_TEST_SPATIAL_SVC)
- int j;
- svc_log(svc_ctx, SVC_LOG_DEBUG,
- "frame: %d, layer: %d, PSNR(Total/Y/U/V): "
- "%2.3f %2.3f %2.3f %2.3f \n",
- si->psnr_pkt_received, 0, cx_pkt->data.layer_psnr[0].psnr[0],
- cx_pkt->data.layer_psnr[0].psnr[1],
- cx_pkt->data.layer_psnr[0].psnr[2],
- cx_pkt->data.layer_psnr[0].psnr[3]);
- for (j = 0; j < COMPONENTS; ++j) {
- si->psnr_sum[0][j] += cx_pkt->data.layer_psnr[0].psnr[j];
- si->sse_sum[0][j] += cx_pkt->data.layer_psnr[0].sse[j];
- }
-#endif
}
++si->psnr_pkt_received;
break;
--- a/vpx/vpx_codec.mk
+++ b/vpx/vpx_codec.mk
@@ -15,10 +15,8 @@
API_SRCS-$(CONFIG_VP8_ENCODER) += vp8cx.h
API_DOC_SRCS-$(CONFIG_VP8_ENCODER) += vp8.h
API_DOC_SRCS-$(CONFIG_VP8_ENCODER) += vp8cx.h
-ifeq ($(CONFIG_VP9_ENCODER),yes)
- API_SRCS-$(CONFIG_SPATIAL_SVC) += src/svc_encodeframe.c
- API_SRCS-$(CONFIG_SPATIAL_SVC) += svc_context.h
-endif
+API_SRCS-$(CONFIG_VP9_ENCODER) += src/svc_encodeframe.c
+API_SRCS-$(CONFIG_VP9_ENCODER) += svc_context.h
API_SRCS-$(CONFIG_VP8_DECODER) += vp8.h
API_SRCS-$(CONFIG_VP8_DECODER) += vp8dx.h
--- a/vpx/vpx_encoder.h
+++ b/vpx/vpx_encoder.h
@@ -150,15 +150,10 @@
* extend this list to provide additional functionality.
*/
enum vpx_codec_cx_pkt_kind {
- VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */
- VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */
- VPX_CODEC_FPMB_STATS_PKT, /**< first pass mb statistics for this frame */
- VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */
-// Spatial SVC is still experimental and may be removed.
-#if defined(VPX_TEST_SPATIAL_SVC)
- VPX_CODEC_SPATIAL_SVC_LAYER_SIZES, /**< Sizes for each layer in this frame*/
- VPX_CODEC_SPATIAL_SVC_LAYER_PSNR, /**< PSNR for each layer in this frame*/
-#endif
+ VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */
+ VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */
+ VPX_CODEC_FPMB_STATS_PKT, /**< first pass mb statistics for this frame */
+ VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */
VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */
};
@@ -195,11 +190,6 @@
double psnr[4]; /**< PSNR, total/y/u/v */
} psnr; /**< data for PSNR packet */
vpx_fixed_buf_t raw; /**< data for arbitrary packets */
-// Spatial SVC is still experimental and may be removed.
-#if defined(VPX_TEST_SPATIAL_SVC)
- size_t layer_sizes[VPX_SS_MAX_LAYERS];
- struct vpx_psnr_pkt layer_psnr[VPX_SS_MAX_LAYERS];
-#endif
/* This packet size is fixed to allow codecs to extend this
* interface without having to manage storage for raw packets,