From: Yaowu Xu Date: Thu, 28 Jul 2016 18:51:48 +0000 (-0700) Subject: Rename files with vp9_ prefix X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5eee90730bfb5aa78352563f0d9ce688be37f11d;p=libvpx Rename files with vp9_ prefix Change-Id: I9c51ae3a2af698efe32288b807f881385e19822b --- diff --git a/examples.mk b/examples.mk index 32b84ada6..130251111 100644 --- a/examples.mk +++ b/examples.mk @@ -108,18 +108,6 @@ ifeq ($(CONFIG_WEBM_IO),yes) 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 ifneq ($(CONFIG_SHARED),yes) EXAMPLES-$(CONFIG_VP9_ENCODER) += resize_util.c @@ -172,14 +160,14 @@ simple_encoder.SRCS += video_writer.h video_writer.c simple_encoder.SRCS += vpx_ports/msvc.h simple_encoder.GUID = 4607D299-8A71-4D2C-9B1D-071899B6FBFD simple_encoder.DESCRIPTION = Simplified encoder loop -EXAMPLES-$(CONFIG_VP9_ENCODER) += vp9_lossless_encoder.c -vp9_lossless_encoder.SRCS += ivfenc.h ivfenc.c -vp9_lossless_encoder.SRCS += tools_common.h tools_common.c -vp9_lossless_encoder.SRCS += video_common.h -vp9_lossless_encoder.SRCS += video_writer.h video_writer.c -vp9_lossless_encoder.SRCS += vpx_ports/msvc.h -vp9_lossless_encoder.GUID = B63C7C88-5348-46DC-A5A6-CC151EF93366 -vp9_lossless_encoder.DESCRIPTION = Simplified lossless VP9 encoder +EXAMPLES-$(CONFIG_VP10_ENCODER) += lossless_encoder.c +lossless_encoder.SRCS += ivfenc.h ivfenc.c +lossless_encoder.SRCS += tools_common.h tools_common.c +lossless_encoder.SRCS += video_common.h +lossless_encoder.SRCS += video_writer.h video_writer.c +lossless_encoder.SRCS += vpx_ports/msvc.h +lossless_encoder.GUID = B63C7C88-5348-46DC-A5A6-CC151EF93366 +lossless_encoder.DESCRIPTION = Simplified lossless VP9 encoder EXAMPLES-$(CONFIG_ENCODERS) += twopass_encoder.c twopass_encoder.SRCS += ivfenc.h ivfenc.c twopass_encoder.SRCS += tools_common.h tools_common.c @@ -206,17 +194,9 @@ set_maps.SRCS += video_writer.h video_writer.c set_maps.SRCS += vpx_ports/msvc.h set_maps.GUID = ECB2D24D-98B8-4015-A465-A4AF3DCC145F set_maps.DESCRIPTION = Set active and ROI maps -EXAMPLES-$(CONFIG_VP8_ENCODER) += vp8cx_set_ref.c -vp8cx_set_ref.SRCS += ivfenc.h ivfenc.c -vp8cx_set_ref.SRCS += tools_common.h tools_common.c -vp8cx_set_ref.SRCS += video_common.h -vp8cx_set_ref.SRCS += video_writer.h video_writer.c -vp8cx_set_ref.SRCS += vpx_ports/msvc.h -vp8cx_set_ref.GUID = C5E31F7F-96F6-48BD-BD3E-10EBF6E8057A -vp8cx_set_ref.DESCRIPTION = VP8 set encoder reference frame -# If vp9 is enabled, $(CONFIG_VP9_ENCODER) is yes, otherwise, it is blank. -ifneq (,$(filter yes,$(CONFIG_VP9_ENCODER) $(CONFIG_VP10_ENCODER))) + +ifeq ($(CONFIG_VP10_ENCODER), yes) ifeq ($(CONFIG_DECODERS),yes) EXAMPLES-yes += vpxcx_set_ref.c vpxcx_set_ref.SRCS += ivfenc.h ivfenc.c @@ -228,18 +208,6 @@ vpxcx_set_ref.DESCRIPTION = VP9/VP10 set encoder reference frame endif endif -ifeq ($(CONFIG_MULTI_RES_ENCODING),yes) -ifeq ($(CONFIG_LIBYUV),yes) -EXAMPLES-$(CONFIG_VP8_ENCODER) += vp8_multi_resolution_encoder.c -vp8_multi_resolution_encoder.SRCS += ivfenc.h ivfenc.c -vp8_multi_resolution_encoder.SRCS += tools_common.h tools_common.c -vp8_multi_resolution_encoder.SRCS += video_writer.h video_writer.c -vp8_multi_resolution_encoder.SRCS += vpx_ports/msvc.h -vp8_multi_resolution_encoder.SRCS += $(LIBYUV_SRCS) -vp8_multi_resolution_encoder.GUID = 04f8738e-63c8-423b-90fa-7c2703a374de -vp8_multi_resolution_encoder.DESCRIPTION = VP8 Multiple-resolution Encoding -endif -endif # Handle extra library flags depending on codec configuration diff --git a/examples/vp9_lossless_encoder.c b/examples/lossless_encoder.c similarity index 100% rename from examples/vp9_lossless_encoder.c rename to examples/lossless_encoder.c diff --git a/examples/vp8_multi_resolution_encoder.c b/examples/vp8_multi_resolution_encoder.c deleted file mode 100644 index fc775ef7c..000000000 --- a/examples/vp8_multi_resolution_encoder.c +++ /dev/null @@ -1,731 +0,0 @@ -/* - * Copyright (c) 2010 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 is an example demonstrating multi-resolution encoding in VP8. - * High-resolution input video is down-sampled to lower-resolutions. The - * encoder then encodes the video and outputs multiple bitstreams with - * different resolutions. - * - * This test also allows for settings temporal layers for each spatial layer. - * Different number of temporal layers per spatial stream may be used. - * Currently up to 3 temporal layers per spatial stream (encoder) are supported - * in this test. - */ - -#include "./vpx_config.h" - -#include -#include -#include -#include -#include -#include -#include -#include "vpx_ports/vpx_timer.h" -#include "vpx/vpx_encoder.h" -#include "vpx/vp8cx.h" -#include "vpx_ports/mem_ops.h" -#include "../tools_common.h" -#define interface (vpx_codec_vp8_cx()) -#define fourcc 0x30385056 - -void usage_exit(void) { - exit(EXIT_FAILURE); -} - -/* - * The input video frame is downsampled several times to generate a multi-level - * hierarchical structure. NUM_ENCODERS is defined as the number of encoding - * levels required. For example, if the size of input video is 1280x720, - * NUM_ENCODERS is 3, and down-sampling factor is 2, the encoder outputs 3 - * bitstreams with resolution of 1280x720(level 0), 640x360(level 1), and - * 320x180(level 2) respectively. - */ - -/* Number of encoders (spatial resolutions) used in this test. */ -#define NUM_ENCODERS 3 - -/* Maximum number of temporal layers allowed for this test. */ -#define MAX_NUM_TEMPORAL_LAYERS 3 - -/* This example uses the scaler function in libyuv. */ -#include "third_party/libyuv/include/libyuv/basic_types.h" -#include "third_party/libyuv/include/libyuv/scale.h" -#include "third_party/libyuv/include/libyuv/cpu_id.h" - -int (*read_frame_p)(FILE *f, vpx_image_t *img); - -static int read_frame(FILE *f, vpx_image_t *img) { - size_t nbytes, to_read; - int res = 1; - - to_read = img->w*img->h*3/2; - nbytes = fread(img->planes[0], 1, to_read, f); - if(nbytes != to_read) { - res = 0; - if(nbytes > 0) - printf("Warning: Read partial frame. Check your width & height!\n"); - } - return res; -} - -static int read_frame_by_row(FILE *f, vpx_image_t *img) { - size_t nbytes, to_read; - int res = 1; - int plane; - - for (plane = 0; plane < 3; plane++) - { - unsigned char *ptr; - int w = (plane ? (1 + img->d_w) / 2 : img->d_w); - int h = (plane ? (1 + img->d_h) / 2 : img->d_h); - int r; - - /* Determine the correct plane based on the image format. The for-loop - * always counts in Y,U,V order, but this may not match the order of - * the data on disk. - */ - switch (plane) - { - case 1: - ptr = img->planes[img->fmt==VPX_IMG_FMT_YV12? VPX_PLANE_V : VPX_PLANE_U]; - break; - case 2: - ptr = img->planes[img->fmt==VPX_IMG_FMT_YV12?VPX_PLANE_U : VPX_PLANE_V]; - break; - default: - ptr = img->planes[plane]; - } - - for (r = 0; r < h; r++) - { - to_read = w; - - nbytes = fread(ptr, 1, to_read, f); - if(nbytes != to_read) { - res = 0; - if(nbytes > 0) - printf("Warning: Read partial frame. Check your width & height!\n"); - break; - } - - ptr += img->stride[plane]; - } - if (!res) - break; - } - - return res; -} - -static void write_ivf_file_header(FILE *outfile, - const vpx_codec_enc_cfg_t *cfg, - int frame_cnt) { - char header[32]; - - if(cfg->g_pass != VPX_RC_ONE_PASS && cfg->g_pass != VPX_RC_LAST_PASS) - return; - header[0] = 'D'; - header[1] = 'K'; - header[2] = 'I'; - header[3] = 'F'; - mem_put_le16(header+4, 0); /* version */ - mem_put_le16(header+6, 32); /* headersize */ - mem_put_le32(header+8, fourcc); /* headersize */ - mem_put_le16(header+12, cfg->g_w); /* width */ - mem_put_le16(header+14, cfg->g_h); /* height */ - mem_put_le32(header+16, cfg->g_timebase.den); /* rate */ - mem_put_le32(header+20, cfg->g_timebase.num); /* scale */ - mem_put_le32(header+24, frame_cnt); /* length */ - mem_put_le32(header+28, 0); /* unused */ - - (void) fwrite(header, 1, 32, outfile); -} - -static void write_ivf_frame_header(FILE *outfile, - const vpx_codec_cx_pkt_t *pkt) -{ - char header[12]; - vpx_codec_pts_t pts; - - if(pkt->kind != VPX_CODEC_CX_FRAME_PKT) - return; - - pts = pkt->data.frame.pts; - mem_put_le32(header, pkt->data.frame.sz); - mem_put_le32(header+4, pts&0xFFFFFFFF); - mem_put_le32(header+8, pts >> 32); - - (void) fwrite(header, 1, 12, outfile); -} - -/* Temporal scaling parameters */ -/* This sets all the temporal layer parameters given |num_temporal_layers|, - * including the target bit allocation across temporal layers. Bit allocation - * parameters will be passed in as user parameters in another version. - */ -static void set_temporal_layer_pattern(int num_temporal_layers, - vpx_codec_enc_cfg_t *cfg, - int bitrate, - int *layer_flags) -{ - assert(num_temporal_layers <= MAX_NUM_TEMPORAL_LAYERS); - switch (num_temporal_layers) - { - case 1: - { - /* 1-layer */ - cfg->ts_number_layers = 1; - cfg->ts_periodicity = 1; - cfg->ts_rate_decimator[0] = 1; - cfg->ts_layer_id[0] = 0; - cfg->ts_target_bitrate[0] = bitrate; - - // Update L only. - layer_flags[0] = VP8_EFLAG_NO_UPD_GF | VP8_EFLAG_NO_UPD_ARF; - break; - } - - case 2: - { - /* 2-layers, with sync point at first frame of layer 1. */ - cfg->ts_number_layers = 2; - cfg->ts_periodicity = 2; - cfg->ts_rate_decimator[0] = 2; - cfg->ts_rate_decimator[1] = 1; - cfg->ts_layer_id[0] = 0; - cfg->ts_layer_id[1] = 1; - // Use 60/40 bit allocation as example. - cfg->ts_target_bitrate[0] = 0.6f * bitrate; - cfg->ts_target_bitrate[1] = bitrate; - - /* 0=L, 1=GF */ - // ARF is used as predictor for all frames, and is only updated on - // key frame. Sync point every 8 frames. - - // Layer 0: predict from L and ARF, update L and G. - layer_flags[0] = VP8_EFLAG_NO_REF_GF | - VP8_EFLAG_NO_UPD_ARF; - - // Layer 1: sync point: predict from L and ARF, and update G. - layer_flags[1] = VP8_EFLAG_NO_REF_GF | - VP8_EFLAG_NO_UPD_LAST | - VP8_EFLAG_NO_UPD_ARF; - - // Layer 0, predict from L and ARF, update L. - layer_flags[2] = VP8_EFLAG_NO_REF_GF | - VP8_EFLAG_NO_UPD_GF | - VP8_EFLAG_NO_UPD_ARF; - - // Layer 1: predict from L, G and ARF, and update G. - layer_flags[3] = VP8_EFLAG_NO_UPD_ARF | - VP8_EFLAG_NO_UPD_LAST | - VP8_EFLAG_NO_UPD_ENTROPY; - - // Layer 0 - layer_flags[4] = layer_flags[2]; - - // Layer 1 - layer_flags[5] = layer_flags[3]; - - // Layer 0 - layer_flags[6] = layer_flags[4]; - - // Layer 1 - layer_flags[7] = layer_flags[5]; - break; - } - - case 3: - default: - { - // 3-layers structure where ARF is used as predictor for all frames, - // and is only updated on key frame. - // Sync points for layer 1 and 2 every 8 frames. - cfg->ts_number_layers = 3; - cfg->ts_periodicity = 4; - cfg->ts_rate_decimator[0] = 4; - cfg->ts_rate_decimator[1] = 2; - cfg->ts_rate_decimator[2] = 1; - cfg->ts_layer_id[0] = 0; - cfg->ts_layer_id[1] = 2; - cfg->ts_layer_id[2] = 1; - cfg->ts_layer_id[3] = 2; - // Use 40/20/40 bit allocation as example. - cfg->ts_target_bitrate[0] = 0.4f * bitrate; - cfg->ts_target_bitrate[1] = 0.6f * bitrate; - cfg->ts_target_bitrate[2] = bitrate; - - /* 0=L, 1=GF, 2=ARF */ - - // Layer 0: predict from L and ARF; update L and G. - layer_flags[0] = VP8_EFLAG_NO_UPD_ARF | - VP8_EFLAG_NO_REF_GF; - - // Layer 2: sync point: predict from L and ARF; update none. - layer_flags[1] = VP8_EFLAG_NO_REF_GF | - VP8_EFLAG_NO_UPD_GF | - VP8_EFLAG_NO_UPD_ARF | - VP8_EFLAG_NO_UPD_LAST | - VP8_EFLAG_NO_UPD_ENTROPY; - - // Layer 1: sync point: predict from L and ARF; update G. - layer_flags[2] = VP8_EFLAG_NO_REF_GF | - VP8_EFLAG_NO_UPD_ARF | - VP8_EFLAG_NO_UPD_LAST; - - // Layer 2: predict from L, G, ARF; update none. - layer_flags[3] = VP8_EFLAG_NO_UPD_GF | - VP8_EFLAG_NO_UPD_ARF | - VP8_EFLAG_NO_UPD_LAST | - VP8_EFLAG_NO_UPD_ENTROPY; - - // Layer 0: predict from L and ARF; update L. - layer_flags[4] = VP8_EFLAG_NO_UPD_GF | - VP8_EFLAG_NO_UPD_ARF | - VP8_EFLAG_NO_REF_GF; - - // Layer 2: predict from L, G, ARF; update none. - layer_flags[5] = layer_flags[3]; - - // Layer 1: predict from L, G, ARF; update G. - layer_flags[6] = VP8_EFLAG_NO_UPD_ARF | - VP8_EFLAG_NO_UPD_LAST; - - // Layer 2: predict from L, G, ARF; update none. - layer_flags[7] = layer_flags[3]; - break; - } - } -} - -/* The periodicity of the pattern given the number of temporal layers. */ -static int periodicity_to_num_layers[MAX_NUM_TEMPORAL_LAYERS] = {1, 8, 8}; - -int main(int argc, char **argv) -{ - FILE *infile, *outfile[NUM_ENCODERS]; - FILE *downsampled_input[NUM_ENCODERS - 1]; - char filename[50]; - vpx_codec_ctx_t codec[NUM_ENCODERS]; - vpx_codec_enc_cfg_t cfg[NUM_ENCODERS]; - int frame_cnt = 0; - vpx_image_t raw[NUM_ENCODERS]; - vpx_codec_err_t res[NUM_ENCODERS]; - - int i; - long width; - long height; - int length_frame; - int frame_avail; - int got_data; - int flags = 0; - int layer_id = 0; - - int layer_flags[VPX_TS_MAX_PERIODICITY * NUM_ENCODERS] - = {0}; - int flag_periodicity; - - /*Currently, only realtime mode is supported in multi-resolution encoding.*/ - int arg_deadline = VPX_DL_REALTIME; - - /* Set show_psnr to 1/0 to show/not show PSNR. Choose show_psnr=0 if you - don't need to know PSNR, which will skip PSNR calculation and save - encoding time. */ - int show_psnr = 0; - int key_frame_insert = 0; - uint64_t psnr_sse_total[NUM_ENCODERS] = {0}; - uint64_t psnr_samples_total[NUM_ENCODERS] = {0}; - double psnr_totals[NUM_ENCODERS][4] = {{0,0}}; - int psnr_count[NUM_ENCODERS] = {0}; - - int64_t cx_time = 0; - - /* Set the required target bitrates for each resolution level. - * If target bitrate for highest-resolution level is set to 0, - * (i.e. target_bitrate[0]=0), we skip encoding at that level. - */ - unsigned int target_bitrate[NUM_ENCODERS]={1000, 500, 100}; - - /* Enter the frame rate of the input video */ - int framerate = 30; - - /* Set down-sampling factor for each resolution level. - dsf[0] controls down sampling from level 0 to level 1; - dsf[1] controls down sampling from level 1 to level 2; - dsf[2] is not used. */ - vpx_rational_t dsf[NUM_ENCODERS] = {{2, 1}, {2, 1}, {1, 1}}; - - /* Set the number of temporal layers for each encoder/resolution level, - * starting from highest resoln down to lowest resoln. */ - unsigned int num_temporal_layers[NUM_ENCODERS] = {3, 3, 3}; - - if(argc!= (7 + 3 * NUM_ENCODERS)) - die("Usage: %s " - " \n", - argv[0]); - - printf("Using %s\n",vpx_codec_iface_name(interface)); - - width = strtol(argv[1], NULL, 0); - height = strtol(argv[2], NULL, 0); - framerate = strtol(argv[3], NULL, 0); - - if(width < 16 || width%2 || height <16 || height%2) - die("Invalid resolution: %ldx%ld", width, height); - - /* Open input video file for encoding */ - if(!(infile = fopen(argv[4], "rb"))) - die("Failed to open %s for reading", argv[4]); - - /* Open output file for each encoder to output bitstreams */ - for (i=0; i< NUM_ENCODERS; i++) - { - if(!target_bitrate[i]) - { - outfile[i] = NULL; - continue; - } - - if(!(outfile[i] = fopen(argv[i+5], "wb"))) - die("Failed to open %s for writing", argv[i+4]); - } - - // Bitrates per spatial layer: overwrite default rates above. - for (i=0; i< NUM_ENCODERS; i++) - { - target_bitrate[i] = strtol(argv[NUM_ENCODERS + 5 + i], NULL, 0); - } - - // Temporal layers per spatial layers: overwrite default settings above. - for (i=0; i< NUM_ENCODERS; i++) - { - num_temporal_layers[i] = strtol(argv[2 * NUM_ENCODERS + 5 + i], NULL, 0); - if (num_temporal_layers[i] < 1 || num_temporal_layers[i] > 3) - die("Invalid temporal layers: %d, Must be 1, 2, or 3. \n", - num_temporal_layers); - } - - /* Open file to write out each spatially downsampled input stream. */ - for (i=0; i< NUM_ENCODERS - 1; i++) - { - // Highest resoln is encoder 0. - if (sprintf(filename,"ds%d.yuv",NUM_ENCODERS - i) < 0) - { - return EXIT_FAILURE; - } - downsampled_input[i] = fopen(filename,"wb"); - } - - key_frame_insert = strtol(argv[3 * NUM_ENCODERS + 5], NULL, 0); - - show_psnr = strtol(argv[3 * NUM_ENCODERS + 6], NULL, 0); - - - /* Populate default encoder configuration */ - for (i=0; i< NUM_ENCODERS; i++) - { - res[i] = vpx_codec_enc_config_default(interface, &cfg[i], 0); - if(res[i]) { - printf("Failed to get config: %s\n", vpx_codec_err_to_string(res[i])); - return EXIT_FAILURE; - } - } - - /* - * Update the default configuration according to needs of the application. - */ - /* Highest-resolution encoder settings */ - cfg[0].g_w = width; - cfg[0].g_h = height; - cfg[0].rc_dropframe_thresh = 0; - cfg[0].rc_end_usage = VPX_CBR; - cfg[0].rc_resize_allowed = 0; - cfg[0].rc_min_quantizer = 2; - cfg[0].rc_max_quantizer = 56; - cfg[0].rc_undershoot_pct = 100; - cfg[0].rc_overshoot_pct = 15; - cfg[0].rc_buf_initial_sz = 500; - cfg[0].rc_buf_optimal_sz = 600; - cfg[0].rc_buf_sz = 1000; - cfg[0].g_error_resilient = 1; /* Enable error resilient mode */ - cfg[0].g_lag_in_frames = 0; - - /* Disable automatic keyframe placement */ - /* Note: These 3 settings are copied to all levels. But, except the lowest - * resolution level, all other levels are set to VPX_KF_DISABLED internally. - */ - cfg[0].kf_mode = VPX_KF_AUTO; - cfg[0].kf_min_dist = 3000; - cfg[0].kf_max_dist = 3000; - - cfg[0].rc_target_bitrate = target_bitrate[0]; /* Set target bitrate */ - cfg[0].g_timebase.num = 1; /* Set fps */ - cfg[0].g_timebase.den = framerate; - - /* Other-resolution encoder settings */ - for (i=1; i< NUM_ENCODERS; i++) - { - memcpy(&cfg[i], &cfg[0], sizeof(vpx_codec_enc_cfg_t)); - - cfg[i].rc_target_bitrate = target_bitrate[i]; - - /* Note: Width & height of other-resolution encoders are calculated - * from the highest-resolution encoder's size and the corresponding - * down_sampling_factor. - */ - { - unsigned int iw = cfg[i-1].g_w*dsf[i-1].den + dsf[i-1].num - 1; - unsigned int ih = cfg[i-1].g_h*dsf[i-1].den + dsf[i-1].num - 1; - cfg[i].g_w = iw/dsf[i-1].num; - cfg[i].g_h = ih/dsf[i-1].num; - } - - /* Make width & height to be multiplier of 2. */ - // Should support odd size ??? - if((cfg[i].g_w)%2)cfg[i].g_w++; - if((cfg[i].g_h)%2)cfg[i].g_h++; - } - - - // Set the number of threads per encode/spatial layer. - // (1, 1, 1) means no encoder threading. - cfg[0].g_threads = 2; - cfg[1].g_threads = 1; - cfg[2].g_threads = 1; - - /* Allocate image for each encoder */ - for (i=0; i< NUM_ENCODERS; i++) - if(!vpx_img_alloc(&raw[i], VPX_IMG_FMT_I420, cfg[i].g_w, cfg[i].g_h, 32)) - die("Failed to allocate image", cfg[i].g_w, cfg[i].g_h); - - if (raw[0].stride[VPX_PLANE_Y] == raw[0].d_w) - read_frame_p = read_frame; - else - read_frame_p = read_frame_by_row; - - for (i=0; i< NUM_ENCODERS; i++) - if(outfile[i]) - write_ivf_file_header(outfile[i], &cfg[i], 0); - - /* Temporal layers settings */ - for ( i=0; i 0 && frame_cnt == key_frame_insert) - { - flags = VPX_EFLAG_FORCE_KF; - } - - vpx_codec_control(&codec[i], VP8E_SET_FRAME_FLAGS, flags); - vpx_codec_control(&codec[i], VP8E_SET_TEMPORAL_LAYER_ID, layer_id); - } - - /* Encode each frame at multi-levels */ - /* Note the flags must be set to 0 in the encode call if they are set - for each frame with the vpx_codec_control(), as done above. */ - vpx_usec_timer_start(&timer); - if(vpx_codec_encode(&codec[0], frame_avail? &raw[0] : NULL, - frame_cnt, 1, 0, arg_deadline)) - { - die_codec(&codec[0], "Failed to encode frame"); - } - vpx_usec_timer_mark(&timer); - cx_time += vpx_usec_timer_elapsed(&timer); - - for (i=NUM_ENCODERS-1; i>=0 ; i--) - { - got_data = 0; - while( (pkt[i] = vpx_codec_get_cx_data(&codec[i], &iter[i])) ) - { - got_data = 1; - switch(pkt[i]->kind) { - case VPX_CODEC_CX_FRAME_PKT: - write_ivf_frame_header(outfile[i], pkt[i]); - (void) fwrite(pkt[i]->data.frame.buf, 1, - pkt[i]->data.frame.sz, outfile[i]); - break; - case VPX_CODEC_PSNR_PKT: - if (show_psnr) - { - int j; - - psnr_sse_total[i] += pkt[i]->data.psnr.sse[0]; - psnr_samples_total[i] += pkt[i]->data.psnr.samples[0]; - for (j = 0; j < 4; j++) - { - psnr_totals[i][j] += pkt[i]->data.psnr.psnr[j]; - } - psnr_count[i]++; - } - - break; - default: - break; - } - printf(pkt[i]->kind == VPX_CODEC_CX_FRAME_PKT - && (pkt[i]->data.frame.flags & VPX_FRAME_IS_KEY)? "K":""); - fflush(stdout); - } - } - frame_cnt++; - } - printf("\n"); - printf("Frame cnt and encoding time/FPS stats for encoding: %d %f %f \n", - frame_cnt, - 1000 * (float)cx_time / (double)(frame_cnt * 1000000), - 1000000 * (double)frame_cnt / (double)cx_time); - - fclose(infile); - - printf("Processed %ld frames.\n",(long int)frame_cnt-1); - for (i=0; i< NUM_ENCODERS; i++) - { - /* Calculate PSNR and print it out */ - if ( (show_psnr) && (psnr_count[i]>0) ) - { - int j; - double ovpsnr = sse_to_psnr(psnr_samples_total[i], 255.0, - psnr_sse_total[i]); - - fprintf(stderr, "\n ENC%d PSNR (Overall/Avg/Y/U/V)", i); - - fprintf(stderr, " %.3lf", ovpsnr); - for (j = 0; j < 4; j++) - { - fprintf(stderr, " %.3lf", psnr_totals[i][j]/psnr_count[i]); - } - } - - if(vpx_codec_destroy(&codec[i])) - die_codec(&codec[i], "Failed to destroy codec"); - - vpx_img_free(&raw[i]); - - if(!outfile[i]) - continue; - - /* Try to rewrite the file header with the actual frame count */ - if(!fseek(outfile[i], 0, SEEK_SET)) - write_ivf_file_header(outfile[i], &cfg[i], frame_cnt-1); - fclose(outfile[i]); - } - printf("\n"); - - return EXIT_SUCCESS; -} diff --git a/examples/vp9_spatial_svc_encoder.c b/examples/vp9_spatial_svc_encoder.c deleted file mode 100644 index 271ab704b..000000000 --- a/examples/vp9_spatial_svc_encoder.c +++ /dev/null @@ -1,919 +0,0 @@ -/* - * Copyright (c) 2012 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 is an example demonstrating how to implement a multi-layer - * VP9 encoding scheme based on spatial scalability for video applications - * that benefit from a scalable bitstream. - */ - -#include -#include -#include -#include -#include - - -#include "../args.h" -#include "../tools_common.h" -#include "../video_writer.h" - -#include "../vpx_ports/vpx_timer.h" -#include "vpx/svc_context.h" -#include "vpx/vp8cx.h" -#include "vpx/vpx_encoder.h" -#include "../vpxstats.h" -#include "vp9/encoder/vp9_encoder.h" -#define OUTPUT_RC_STATS 1 - -static const arg_def_t skip_frames_arg = - ARG_DEF("s", "skip-frames", 1, "input frames to skip"); -static const arg_def_t frames_arg = - ARG_DEF("f", "frames", 1, "number of frames to encode"); -static const arg_def_t threads_arg = - ARG_DEF("th", "threads", 1, "number of threads to use"); -#if OUTPUT_RC_STATS -static const arg_def_t output_rc_stats_arg = - ARG_DEF("rcstat", "output_rc_stats", 1, "output rc stats"); -#endif -static const arg_def_t width_arg = ARG_DEF("w", "width", 1, "source width"); -static const arg_def_t height_arg = ARG_DEF("h", "height", 1, "source height"); -static const arg_def_t timebase_arg = - ARG_DEF("t", "timebase", 1, "timebase (num/den)"); -static const arg_def_t bitrate_arg = ARG_DEF( - "b", "target-bitrate", 1, "encoding bitrate, in kilobits per second"); -static const arg_def_t spatial_layers_arg = - ARG_DEF("sl", "spatial-layers", 1, "number of spatial SVC layers"); -static const arg_def_t temporal_layers_arg = - ARG_DEF("tl", "temporal-layers", 1, "number of temporal SVC layers"); -static const arg_def_t temporal_layering_mode_arg = - ARG_DEF("tlm", "temporal-layering-mode", 1, "temporal layering scheme." - "VP9E_TEMPORAL_LAYERING_MODE"); -static const arg_def_t kf_dist_arg = - ARG_DEF("k", "kf-dist", 1, "number of frames between keyframes"); -static const arg_def_t scale_factors_arg = - ARG_DEF("r", "scale-factors", 1, "scale factors (lowest to highest layer)"); -static const arg_def_t passes_arg = - ARG_DEF("p", "passes", 1, "Number of passes (1/2)"); -static const arg_def_t pass_arg = - ARG_DEF(NULL, "pass", 1, "Pass to execute (1/2)"); -static const arg_def_t fpf_name_arg = - ARG_DEF(NULL, "fpf", 1, "First pass statistics file name"); -static const arg_def_t min_q_arg = - ARG_DEF(NULL, "min-q", 1, "Minimum quantizer"); -static const arg_def_t max_q_arg = - ARG_DEF(NULL, "max-q", 1, "Maximum quantizer"); -static const arg_def_t min_bitrate_arg = - ARG_DEF(NULL, "min-bitrate", 1, "Minimum bitrate"); -static const arg_def_t max_bitrate_arg = - ARG_DEF(NULL, "max-bitrate", 1, "Maximum bitrate"); -static const arg_def_t lag_in_frame_arg = - ARG_DEF(NULL, "lag-in-frames", 1, "Number of frame to input before " - "generating any outputs"); -static const arg_def_t rc_end_usage_arg = - ARG_DEF(NULL, "rc-end-usage", 1, "0 - 3: VBR, CBR, CQ, Q"); -static const arg_def_t speed_arg = - ARG_DEF("sp", "speed", 1, "speed configuration"); -static const arg_def_t aqmode_arg = - ARG_DEF("aq", "aqmode", 1, "aq-mode off/on"); - -#if CONFIG_VP9_HIGHBITDEPTH -static const struct arg_enum_list bitdepth_enum[] = { - {"8", VPX_BITS_8}, - {"10", VPX_BITS_10}, - {"12", VPX_BITS_12}, - {NULL, 0} -}; - -static const arg_def_t bitdepth_arg = - ARG_DEF_ENUM("d", "bit-depth", 1, "Bit depth for codec 8, 10 or 12. ", - bitdepth_enum); -#endif // CONFIG_VP9_HIGHBITDEPTH - - -static const arg_def_t *svc_args[] = { - &frames_arg, &width_arg, &height_arg, - &timebase_arg, &bitrate_arg, &skip_frames_arg, &spatial_layers_arg, - &kf_dist_arg, &scale_factors_arg, &passes_arg, &pass_arg, - &fpf_name_arg, &min_q_arg, &max_q_arg, &min_bitrate_arg, - &max_bitrate_arg, &temporal_layers_arg, &temporal_layering_mode_arg, - &lag_in_frame_arg, &threads_arg, &aqmode_arg, -#if OUTPUT_RC_STATS - &output_rc_stats_arg, -#endif - -#if CONFIG_VP9_HIGHBITDEPTH - &bitdepth_arg, -#endif - &speed_arg, - &rc_end_usage_arg, NULL -}; - -static const uint32_t default_frames_to_skip = 0; -static const uint32_t default_frames_to_code = 60 * 60; -static const uint32_t default_width = 1920; -static const uint32_t default_height = 1080; -static const uint32_t default_timebase_num = 1; -static const uint32_t default_timebase_den = 60; -static const uint32_t default_bitrate = 1000; -static const uint32_t default_spatial_layers = 5; -static const uint32_t default_temporal_layers = 1; -static const uint32_t default_kf_dist = 100; -static const uint32_t default_temporal_layering_mode = 0; -static const uint32_t default_output_rc_stats = 0; -static const int32_t default_speed = -1; // -1 means use library default. -static const uint32_t default_threads = 0; // zero means use library default. - -typedef struct { - const char *input_filename; - const char *output_filename; - uint32_t frames_to_code; - uint32_t frames_to_skip; - struct VpxInputContext input_ctx; - stats_io_t rc_stats; - int passes; - int pass; -} AppInput; - -static const char *exec_name; - -void usage_exit(void) { - fprintf(stderr, "Usage: %s input_filename output_filename\n", - exec_name); - fprintf(stderr, "Options:\n"); - arg_show_usage(stderr, svc_args); - exit(EXIT_FAILURE); -} - -static void parse_command_line(int argc, const char **argv_, - AppInput *app_input, SvcContext *svc_ctx, - vpx_codec_enc_cfg_t *enc_cfg) { - struct arg arg = {0}; - char **argv = NULL; - char **argi = NULL; - char **argj = NULL; - vpx_codec_err_t res; - int passes = 0; - int pass = 0; - const char *fpf_file_name = NULL; - unsigned int min_bitrate = 0; - unsigned int max_bitrate = 0; - char string_options[1024] = {0}; - - // initialize SvcContext with parameters that will be passed to vpx_svc_init - svc_ctx->log_level = SVC_LOG_DEBUG; - svc_ctx->spatial_layers = default_spatial_layers; - svc_ctx->temporal_layers = default_temporal_layers; - svc_ctx->temporal_layering_mode = default_temporal_layering_mode; -#if OUTPUT_RC_STATS - svc_ctx->output_rc_stat = default_output_rc_stats; -#endif - svc_ctx->speed = default_speed; - svc_ctx->threads = default_threads; - - // start with default encoder configuration - res = vpx_codec_enc_config_default(vpx_codec_vp9_cx(), enc_cfg, 0); - if (res) { - die("Failed to get config: %s\n", vpx_codec_err_to_string(res)); - } - // update enc_cfg with app default values - enc_cfg->g_w = default_width; - enc_cfg->g_h = default_height; - enc_cfg->g_timebase.num = default_timebase_num; - enc_cfg->g_timebase.den = default_timebase_den; - enc_cfg->rc_target_bitrate = default_bitrate; - enc_cfg->kf_min_dist = default_kf_dist; - enc_cfg->kf_max_dist = default_kf_dist; - enc_cfg->rc_end_usage = VPX_CQ; - - // initialize AppInput with default values - app_input->frames_to_code = default_frames_to_code; - app_input->frames_to_skip = default_frames_to_skip; - - // process command line options - argv = argv_dup(argc - 1, argv_ + 1); - for (argi = argj = argv; (*argj = *argi); argi += arg.argv_step) { - arg.argv_step = 1; - - if (arg_match(&arg, &frames_arg, argi)) { - app_input->frames_to_code = arg_parse_uint(&arg); - } else if (arg_match(&arg, &width_arg, argi)) { - enc_cfg->g_w = arg_parse_uint(&arg); - } else if (arg_match(&arg, &height_arg, argi)) { - enc_cfg->g_h = arg_parse_uint(&arg); - } else if (arg_match(&arg, &timebase_arg, argi)) { - enc_cfg->g_timebase = arg_parse_rational(&arg); - } else if (arg_match(&arg, &bitrate_arg, argi)) { - enc_cfg->rc_target_bitrate = arg_parse_uint(&arg); - } else if (arg_match(&arg, &skip_frames_arg, argi)) { - app_input->frames_to_skip = arg_parse_uint(&arg); - } else if (arg_match(&arg, &spatial_layers_arg, argi)) { - svc_ctx->spatial_layers = arg_parse_uint(&arg); - } else if (arg_match(&arg, &temporal_layers_arg, argi)) { - svc_ctx->temporal_layers = arg_parse_uint(&arg); -#if OUTPUT_RC_STATS - } else if (arg_match(&arg, &output_rc_stats_arg, argi)) { - svc_ctx->output_rc_stat = arg_parse_uint(&arg); -#endif - } else if (arg_match(&arg, &speed_arg, argi)) { - svc_ctx->speed = arg_parse_uint(&arg); - } else if (arg_match(&arg, &aqmode_arg, argi)) { - svc_ctx->aqmode = arg_parse_uint(&arg); - } else if (arg_match(&arg, &threads_arg, argi)) { - svc_ctx->threads = arg_parse_uint(&arg); - } else if (arg_match(&arg, &temporal_layering_mode_arg, argi)) { - svc_ctx->temporal_layering_mode = - enc_cfg->temporal_layering_mode = arg_parse_int(&arg); - if (svc_ctx->temporal_layering_mode) { - enc_cfg->g_error_resilient = 1; - } - } else if (arg_match(&arg, &kf_dist_arg, argi)) { - enc_cfg->kf_min_dist = arg_parse_uint(&arg); - enc_cfg->kf_max_dist = enc_cfg->kf_min_dist; - } else if (arg_match(&arg, &scale_factors_arg, argi)) { - snprintf(string_options, sizeof(string_options), "%s scale-factors=%s", - string_options, arg.val); - } else if (arg_match(&arg, &passes_arg, argi)) { - passes = arg_parse_uint(&arg); - if (passes < 1 || passes > 2) { - die("Error: Invalid number of passes (%d)\n", passes); - } - } else if (arg_match(&arg, &pass_arg, argi)) { - pass = arg_parse_uint(&arg); - if (pass < 1 || pass > 2) { - die("Error: Invalid pass selected (%d)\n", pass); - } - } else if (arg_match(&arg, &fpf_name_arg, argi)) { - fpf_file_name = arg.val; - } else if (arg_match(&arg, &min_q_arg, argi)) { - snprintf(string_options, sizeof(string_options), "%s min-quantizers=%s", - string_options, arg.val); - } else if (arg_match(&arg, &max_q_arg, argi)) { - snprintf(string_options, sizeof(string_options), "%s max-quantizers=%s", - string_options, arg.val); - } else if (arg_match(&arg, &min_bitrate_arg, argi)) { - min_bitrate = arg_parse_uint(&arg); - } else if (arg_match(&arg, &max_bitrate_arg, argi)) { - max_bitrate = arg_parse_uint(&arg); - } else if (arg_match(&arg, &lag_in_frame_arg, argi)) { - enc_cfg->g_lag_in_frames = arg_parse_uint(&arg); - } else if (arg_match(&arg, &rc_end_usage_arg, argi)) { - enc_cfg->rc_end_usage = arg_parse_uint(&arg); -#if CONFIG_VP9_HIGHBITDEPTH - } else if (arg_match(&arg, &bitdepth_arg, argi)) { - enc_cfg->g_bit_depth = arg_parse_enum_or_int(&arg); - switch (enc_cfg->g_bit_depth) { - case VPX_BITS_8: - enc_cfg->g_input_bit_depth = 8; - enc_cfg->g_profile = 0; - break; - case VPX_BITS_10: - enc_cfg->g_input_bit_depth = 10; - enc_cfg->g_profile = 2; - break; - case VPX_BITS_12: - enc_cfg->g_input_bit_depth = 12; - enc_cfg->g_profile = 2; - break; - default: - die("Error: Invalid bit depth selected (%d)\n", enc_cfg->g_bit_depth); - break; - } -#endif // CONFIG_VP9_HIGHBITDEPTH - } else { - ++argj; - } - } - - // There will be a space in front of the string options - if (strlen(string_options) > 0) - vpx_svc_set_options(svc_ctx, string_options + 1); - - if (passes == 0 || passes == 1) { - if (pass) { - fprintf(stderr, "pass is ignored since there's only one pass\n"); - } - enc_cfg->g_pass = VPX_RC_ONE_PASS; - } else { - if (pass == 0) { - die("pass must be specified when passes is 2\n"); - } - - if (fpf_file_name == NULL) { - die("fpf must be specified when passes is 2\n"); - } - - if (pass == 1) { - enc_cfg->g_pass = VPX_RC_FIRST_PASS; - if (!stats_open_file(&app_input->rc_stats, fpf_file_name, 0)) { - fatal("Failed to open statistics store"); - } - } else { - enc_cfg->g_pass = VPX_RC_LAST_PASS; - if (!stats_open_file(&app_input->rc_stats, fpf_file_name, 1)) { - fatal("Failed to open statistics store"); - } - enc_cfg->rc_twopass_stats_in = stats_get(&app_input->rc_stats); - } - app_input->passes = passes; - app_input->pass = pass; - } - - if (enc_cfg->rc_target_bitrate > 0) { - if (min_bitrate > 0) { - enc_cfg->rc_2pass_vbr_minsection_pct = - min_bitrate * 100 / enc_cfg->rc_target_bitrate; - } - if (max_bitrate > 0) { - enc_cfg->rc_2pass_vbr_maxsection_pct = - max_bitrate * 100 / enc_cfg->rc_target_bitrate; - } - } - - // Check for unrecognized options - for (argi = argv; *argi; ++argi) - if (argi[0][0] == '-' && strlen(argi[0]) > 1) - die("Error: Unrecognized option %s\n", *argi); - - if (argv[0] == NULL || argv[1] == 0) { - usage_exit(); - } - app_input->input_filename = argv[0]; - app_input->output_filename = argv[1]; - free(argv); - - if (enc_cfg->g_w < 16 || enc_cfg->g_w % 2 || enc_cfg->g_h < 16 || - enc_cfg->g_h % 2) - die("Invalid resolution: %d x %d\n", enc_cfg->g_w, enc_cfg->g_h); - - printf( - "Codec %s\nframes: %d, skip: %d\n" - "layers: %d\n" - "width %d, height: %d,\n" - "num: %d, den: %d, bitrate: %d,\n" - "gop size: %d\n", - vpx_codec_iface_name(vpx_codec_vp9_cx()), app_input->frames_to_code, - app_input->frames_to_skip, - svc_ctx->spatial_layers, enc_cfg->g_w, enc_cfg->g_h, - enc_cfg->g_timebase.num, enc_cfg->g_timebase.den, - enc_cfg->rc_target_bitrate, enc_cfg->kf_max_dist); -} - -#if OUTPUT_RC_STATS -// For rate control encoding stats. -struct RateControlStats { - // Number of input frames per layer. - int layer_input_frames[VPX_MAX_LAYERS]; - // Total (cumulative) number of encoded frames per layer. - int layer_tot_enc_frames[VPX_MAX_LAYERS]; - // Number of encoded non-key frames per layer. - int layer_enc_frames[VPX_MAX_LAYERS]; - // Framerate per layer (cumulative). - double layer_framerate[VPX_MAX_LAYERS]; - // Target average frame size per layer (per-frame-bandwidth per layer). - double layer_pfb[VPX_MAX_LAYERS]; - // Actual average frame size per layer. - double layer_avg_frame_size[VPX_MAX_LAYERS]; - // Average rate mismatch per layer (|target - actual| / target). - double layer_avg_rate_mismatch[VPX_MAX_LAYERS]; - // Actual encoding bitrate per layer (cumulative). - double layer_encoding_bitrate[VPX_MAX_LAYERS]; - // Average of the short-time encoder actual bitrate. - // TODO(marpan): Should we add these short-time stats for each layer? - double avg_st_encoding_bitrate; - // Variance of the short-time encoder actual bitrate. - double variance_st_encoding_bitrate; - // Window (number of frames) for computing short-time encoding bitrate. - int window_size; - // Number of window measurements. - int window_count; -}; - -// Note: these rate control stats assume only 1 key frame in the -// sequence (i.e., first frame only). -static void set_rate_control_stats(struct RateControlStats *rc, - vpx_codec_enc_cfg_t *cfg) { - unsigned int sl, tl; - // Set the layer (cumulative) framerate and the target layer (non-cumulative) - // per-frame-bandwidth, for the rate control encoding stats below. - const double framerate = cfg->g_timebase.den / cfg->g_timebase.num; - - for (sl = 0; sl < cfg->ss_number_layers; ++sl) { - for (tl = 0; tl < cfg->ts_number_layers; ++tl) { - const int layer = sl * cfg->ts_number_layers + tl; - const int tlayer0 = sl * cfg->ts_number_layers; - if (cfg->ts_number_layers == 1) - rc->layer_framerate[layer] = framerate; - else - rc->layer_framerate[layer] = - framerate / cfg->ts_rate_decimator[tl]; - if (tl > 0) { - rc->layer_pfb[layer] = 1000.0 * - (cfg->layer_target_bitrate[layer] - - cfg->layer_target_bitrate[layer - 1]) / - (rc->layer_framerate[layer] - - rc->layer_framerate[layer - 1]); - } else { - rc->layer_pfb[tlayer0] = 1000.0 * - cfg->layer_target_bitrate[tlayer0] / - rc->layer_framerate[tlayer0]; - } - rc->layer_input_frames[layer] = 0; - rc->layer_enc_frames[layer] = 0; - rc->layer_tot_enc_frames[layer] = 0; - rc->layer_encoding_bitrate[layer] = 0.0; - rc->layer_avg_frame_size[layer] = 0.0; - rc->layer_avg_rate_mismatch[layer] = 0.0; - } - } - rc->window_count = 0; - rc->window_size = 15; - rc->avg_st_encoding_bitrate = 0.0; - rc->variance_st_encoding_bitrate = 0.0; -} - -static void printout_rate_control_summary(struct RateControlStats *rc, - vpx_codec_enc_cfg_t *cfg, - int frame_cnt) { - unsigned int sl, tl; - int tot_num_frames = 0; - double perc_fluctuation = 0.0; - printf("Total number of processed frames: %d\n\n", frame_cnt - 1); - printf("Rate control layer stats for sl%d tl%d layer(s):\n\n", - cfg->ss_number_layers, cfg->ts_number_layers); - for (sl = 0; sl < cfg->ss_number_layers; ++sl) { - for (tl = 0; tl < cfg->ts_number_layers; ++tl) { - const int layer = sl * cfg->ts_number_layers + tl; - const int num_dropped = (tl > 0) ? - (rc->layer_input_frames[layer] - rc->layer_enc_frames[layer]) : - (rc->layer_input_frames[layer] - rc->layer_enc_frames[layer] - 1); - if (!sl) - tot_num_frames += rc->layer_input_frames[layer]; - rc->layer_encoding_bitrate[layer] = 0.001 * rc->layer_framerate[layer] * - rc->layer_encoding_bitrate[layer] / tot_num_frames; - rc->layer_avg_frame_size[layer] = rc->layer_avg_frame_size[layer] / - rc->layer_enc_frames[layer]; - rc->layer_avg_rate_mismatch[layer] = - 100.0 * rc->layer_avg_rate_mismatch[layer] / - rc->layer_enc_frames[layer]; - printf("For layer#: sl%d tl%d \n", sl, tl); - printf("Bitrate (target vs actual): %d %f.0 kbps\n", - cfg->layer_target_bitrate[layer], - rc->layer_encoding_bitrate[layer]); - printf("Average frame size (target vs actual): %f %f bits\n", - rc->layer_pfb[layer], rc->layer_avg_frame_size[layer]); - printf("Average rate_mismatch: %f\n", - rc->layer_avg_rate_mismatch[layer]); - printf("Number of input frames, encoded (non-key) frames, " - "and percent dropped frames: %d %d %f.0 \n", - rc->layer_input_frames[layer], rc->layer_enc_frames[layer], - 100.0 * num_dropped / rc->layer_input_frames[layer]); - printf("\n"); - } - } - rc->avg_st_encoding_bitrate = rc->avg_st_encoding_bitrate / rc->window_count; - rc->variance_st_encoding_bitrate = - rc->variance_st_encoding_bitrate / rc->window_count - - (rc->avg_st_encoding_bitrate * rc->avg_st_encoding_bitrate); - perc_fluctuation = 100.0 * sqrt(rc->variance_st_encoding_bitrate) / - rc->avg_st_encoding_bitrate; - printf("Short-time stats, for window of %d frames: \n", rc->window_size); - printf("Average, rms-variance, and percent-fluct: %f %f %f \n", - rc->avg_st_encoding_bitrate, - sqrt(rc->variance_st_encoding_bitrate), - perc_fluctuation); - if (frame_cnt != tot_num_frames) - die("Error: Number of input frames not equal to output encoded frames != " - "%d tot_num_frames = %d\n", frame_cnt, tot_num_frames); -} - -vpx_codec_err_t parse_superframe_index(const uint8_t *data, - size_t data_sz, - uint32_t sizes[8], int *count) { - // A chunk ending with a byte matching 0xc0 is an invalid chunk unless - // it is a super frame index. If the last byte of real video compression - // data is 0xc0 the encoder must add a 0 byte. If we have the marker but - // not the associated matching marker byte at the front of the index we have - // an invalid bitstream and need to return an error. - - uint8_t marker; - - marker = *(data + data_sz - 1); - *count = 0; - - - if ((marker & 0xe0) == 0xc0) { - const uint32_t frames = (marker & 0x7) + 1; - const uint32_t mag = ((marker >> 3) & 0x3) + 1; - const size_t index_sz = 2 + mag * frames; - - // This chunk is marked as having a superframe index but doesn't have - // enough data for it, thus it's an invalid superframe index. - if (data_sz < index_sz) - return VPX_CODEC_CORRUPT_FRAME; - - { - const uint8_t marker2 = *(data + data_sz - index_sz); - - // This chunk is marked as having a superframe index but doesn't have - // the matching marker byte at the front of the index therefore it's an - // invalid chunk. - if (marker != marker2) - return VPX_CODEC_CORRUPT_FRAME; - } - - { - // Found a valid superframe index. - uint32_t i, j; - const uint8_t *x = &data[data_sz - index_sz + 1]; - - for (i = 0; i < frames; ++i) { - uint32_t this_sz = 0; - - for (j = 0; j < mag; ++j) - this_sz |= (*x++) << (j * 8); - sizes[i] = this_sz; - } - *count = frames; - } - } - return VPX_CODEC_OK; -} -#endif - -// Example pattern for spatial layers and 2 temporal layers used in the -// bypass/flexible mode. The pattern corresponds to the pattern -// VP9E_TEMPORAL_LAYERING_MODE_0101 (temporal_layering_mode == 2) used in -// non-flexible mode. -void set_frame_flags_bypass_mode(int sl, int tl, int num_spatial_layers, - int is_key_frame, - vpx_svc_ref_frame_config_t *ref_frame_config) { - for (sl = 0; sl < num_spatial_layers; ++sl) { - if (!tl) { - if (!sl) { - ref_frame_config->frame_flags[sl] = VP8_EFLAG_NO_REF_GF | - VP8_EFLAG_NO_REF_ARF | - VP8_EFLAG_NO_UPD_GF | - VP8_EFLAG_NO_UPD_ARF; - } else { - if (is_key_frame) { - ref_frame_config->frame_flags[sl] = VP8_EFLAG_NO_REF_LAST | - VP8_EFLAG_NO_REF_ARF | - VP8_EFLAG_NO_UPD_GF | - VP8_EFLAG_NO_UPD_ARF; - } else { - ref_frame_config->frame_flags[sl] = VP8_EFLAG_NO_REF_ARF | - VP8_EFLAG_NO_UPD_GF | - VP8_EFLAG_NO_UPD_ARF; - } - } - } else if (tl == 1) { - if (!sl) { - ref_frame_config->frame_flags[sl] = VP8_EFLAG_NO_REF_GF | - VP8_EFLAG_NO_REF_ARF | - VP8_EFLAG_NO_UPD_LAST | - VP8_EFLAG_NO_UPD_GF; - } else { - ref_frame_config->frame_flags[sl] = VP8_EFLAG_NO_REF_ARF | - VP8_EFLAG_NO_UPD_LAST | - VP8_EFLAG_NO_UPD_GF; - } - } - if (tl == 0) { - ref_frame_config->lst_fb_idx[sl] = sl; - if (sl) - ref_frame_config->gld_fb_idx[sl] = sl - 1; - else - ref_frame_config->gld_fb_idx[sl] = 0; - ref_frame_config->alt_fb_idx[sl] = 0; - } else if (tl == 1) { - ref_frame_config->lst_fb_idx[sl] = sl; - ref_frame_config->gld_fb_idx[sl] = num_spatial_layers + sl - 1; - ref_frame_config->alt_fb_idx[sl] = num_spatial_layers + sl; - } - } -} - -int main(int argc, const char **argv) { - AppInput app_input = {0}; - VpxVideoWriter *writer = NULL; - VpxVideoInfo info = {0}; - vpx_codec_ctx_t codec; - vpx_codec_enc_cfg_t enc_cfg; - SvcContext svc_ctx; - uint32_t i; - uint32_t frame_cnt = 0; - vpx_image_t raw; - vpx_codec_err_t res; - int pts = 0; /* PTS starts at 0 */ - int frame_duration = 1; /* 1 timebase tick per frame */ - FILE *infile = NULL; - int end_of_stream = 0; - int frames_received = 0; -#if OUTPUT_RC_STATS - VpxVideoWriter *outfile[VPX_TS_MAX_LAYERS] = {NULL}; - struct RateControlStats rc; - vpx_svc_layer_id_t layer_id; - vpx_svc_ref_frame_config_t ref_frame_config; - int sl, tl; - double sum_bitrate = 0.0; - double sum_bitrate2 = 0.0; - double framerate = 30.0; -#endif - struct vpx_usec_timer timer; - int64_t cx_time = 0; - memset(&svc_ctx, 0, sizeof(svc_ctx)); - svc_ctx.log_print = 1; - exec_name = argv[0]; - parse_command_line(argc, argv, &app_input, &svc_ctx, &enc_cfg); - - // Allocate image buffer -#if CONFIG_VP9_HIGHBITDEPTH - if (!vpx_img_alloc(&raw, enc_cfg.g_input_bit_depth == 8 ? - VPX_IMG_FMT_I420 : VPX_IMG_FMT_I42016, - enc_cfg.g_w, enc_cfg.g_h, 32)) { - die("Failed to allocate image %dx%d\n", enc_cfg.g_w, enc_cfg.g_h); - } -#else - if (!vpx_img_alloc(&raw, VPX_IMG_FMT_I420, enc_cfg.g_w, enc_cfg.g_h, 32)) { - die("Failed to allocate image %dx%d\n", enc_cfg.g_w, enc_cfg.g_h); - } -#endif // CONFIG_VP9_HIGHBITDEPTH - - if (!(infile = fopen(app_input.input_filename, "rb"))) - die("Failed to open %s for reading\n", app_input.input_filename); - - // Initialize codec - if (vpx_svc_init(&svc_ctx, &codec, vpx_codec_vp9_cx(), &enc_cfg) != - VPX_CODEC_OK) - die("Failed to initialize encoder\n"); - -#if OUTPUT_RC_STATS - if (svc_ctx.output_rc_stat) { - set_rate_control_stats(&rc, &enc_cfg); - framerate = enc_cfg.g_timebase.den / enc_cfg.g_timebase.num; - } -#endif - - info.codec_fourcc = VP9_FOURCC; - info.time_base.numerator = enc_cfg.g_timebase.num; - info.time_base.denominator = enc_cfg.g_timebase.den; - - if (!(app_input.passes == 2 && app_input.pass == 1)) { - // We don't save the bitstream for the 1st pass on two pass rate control - writer = vpx_video_writer_open(app_input.output_filename, kContainerIVF, - &info); - if (!writer) - die("Failed to open %s for writing\n", app_input.output_filename); - } -#if OUTPUT_RC_STATS - // For now, just write temporal layer streams. - // TODO(wonkap): do spatial by re-writing superframe. - if (svc_ctx.output_rc_stat) { - for (tl = 0; tl < enc_cfg.ts_number_layers; ++tl) { - char file_name[PATH_MAX]; - - snprintf(file_name, sizeof(file_name), "%s_t%d.ivf", - app_input.output_filename, tl); - outfile[tl] = vpx_video_writer_open(file_name, kContainerIVF, &info); - if (!outfile[tl]) - die("Failed to open %s for writing", file_name); - } - } -#endif - - // skip initial frames - for (i = 0; i < app_input.frames_to_skip; ++i) - vpx_img_read(&raw, infile); - - if (svc_ctx.speed != -1) - vpx_codec_control(&codec, VP8E_SET_CPUUSED, svc_ctx.speed); - if (svc_ctx.threads) - vpx_codec_control(&codec, VP9E_SET_TILE_COLUMNS, (svc_ctx.threads >> 1)); - if (svc_ctx.speed >= 5 && svc_ctx.aqmode == 1) - vpx_codec_control(&codec, VP9E_SET_AQ_MODE, 3); - - - // Encode frames - while (!end_of_stream) { - vpx_codec_iter_t iter = NULL; - const vpx_codec_cx_pkt_t *cx_pkt; - if (frame_cnt >= app_input.frames_to_code || !vpx_img_read(&raw, infile)) { - // We need one extra vpx_svc_encode call at end of stream to flush - // encoder and get remaining data - end_of_stream = 1; - } - - // For BYPASS/FLEXIBLE mode, set the frame flags (reference and updates) - // and the buffer indices for each spatial layer of the current - // (super)frame to be encoded. The temporal layer_id for the current frame - // also needs to be set. - // TODO(marpan): Should rename the "VP9E_TEMPORAL_LAYERING_MODE_BYPASS" - // mode to "VP9E_LAYERING_MODE_BYPASS". - if (svc_ctx.temporal_layering_mode == VP9E_TEMPORAL_LAYERING_MODE_BYPASS) { - layer_id.spatial_layer_id = 0; - // Example for 2 temporal layers. - if (frame_cnt % 2 == 0) - layer_id.temporal_layer_id = 0; - else - layer_id.temporal_layer_id = 1; - // Note that we only set the temporal layer_id, since we are calling - // the encode for the whole superframe. The encoder will internally loop - // over all the spatial layers for the current superframe. - vpx_codec_control(&codec, VP9E_SET_SVC_LAYER_ID, &layer_id); - set_frame_flags_bypass_mode(sl, layer_id.temporal_layer_id, - svc_ctx.spatial_layers, - frame_cnt == 0, - &ref_frame_config); - vpx_codec_control(&codec, VP9E_SET_SVC_REF_FRAME_CONFIG, - &ref_frame_config); - // Keep track of input frames, to account for frame drops in rate control - // stats/metrics. - for (sl = 0; sl < enc_cfg.ss_number_layers; ++sl) { - ++rc.layer_input_frames[sl * enc_cfg.ts_number_layers + - layer_id.temporal_layer_id]; - } - } - - vpx_usec_timer_start(&timer); - res = vpx_svc_encode(&svc_ctx, &codec, (end_of_stream ? NULL : &raw), - pts, frame_duration, svc_ctx.speed >= 5 ? - VPX_DL_REALTIME : VPX_DL_GOOD_QUALITY); - vpx_usec_timer_mark(&timer); - cx_time += vpx_usec_timer_elapsed(&timer); - - printf("%s", vpx_svc_get_message(&svc_ctx)); - fflush(stdout); - if (res != VPX_CODEC_OK) { - die_codec(&codec, "Failed to encode frame"); - } - - while ((cx_pkt = vpx_codec_get_cx_data(&codec, &iter)) != NULL) { - switch (cx_pkt->kind) { - case VPX_CODEC_CX_FRAME_PKT: { - SvcInternal_t *const si = (SvcInternal_t *)svc_ctx.internal; - if (cx_pkt->data.frame.sz > 0) { -#if OUTPUT_RC_STATS - uint32_t sizes[8]; - int count = 0; -#endif - vpx_video_writer_write_frame(writer, - cx_pkt->data.frame.buf, - cx_pkt->data.frame.sz, - cx_pkt->data.frame.pts); -#if OUTPUT_RC_STATS - // TODO(marpan/wonkap): Put this (to line728) in separate function. - if (svc_ctx.output_rc_stat) { - vpx_codec_control(&codec, VP9E_GET_SVC_LAYER_ID, &layer_id); - parse_superframe_index(cx_pkt->data.frame.buf, - cx_pkt->data.frame.sz, sizes, &count); - // Note computing input_layer_frames here won't account for frame - // drops in rate control stats. - // TODO(marpan): Fix this for non-bypass mode so we can get stats - // for dropped frames. - if (svc_ctx.temporal_layering_mode != - VP9E_TEMPORAL_LAYERING_MODE_BYPASS) { - for (sl = 0; sl < enc_cfg.ss_number_layers; ++sl) { - ++rc.layer_input_frames[sl * enc_cfg.ts_number_layers + - layer_id.temporal_layer_id]; - } - } - for (tl = layer_id.temporal_layer_id; - tl < enc_cfg.ts_number_layers; ++tl) { - vpx_video_writer_write_frame(outfile[tl], - cx_pkt->data.frame.buf, - cx_pkt->data.frame.sz, - cx_pkt->data.frame.pts); - } - - for (sl = 0; sl < enc_cfg.ss_number_layers; ++sl) { - for (tl = layer_id.temporal_layer_id; - tl < enc_cfg.ts_number_layers; ++tl) { - const int layer = sl * enc_cfg.ts_number_layers + tl; - ++rc.layer_tot_enc_frames[layer]; - rc.layer_encoding_bitrate[layer] += 8.0 * sizes[sl]; - // Keep count of rate control stats per layer, for non-key - // frames. - if (tl == layer_id.temporal_layer_id && - !(cx_pkt->data.frame.flags & VPX_FRAME_IS_KEY)) { - rc.layer_avg_frame_size[layer] += 8.0 * sizes[sl]; - rc.layer_avg_rate_mismatch[layer] += - fabs(8.0 * sizes[sl] - rc.layer_pfb[layer]) / - rc.layer_pfb[layer]; - ++rc.layer_enc_frames[layer]; - } - } - } - - // Update for short-time encoding bitrate states, for moving - // window of size rc->window, shifted by rc->window / 2. - // Ignore first window segment, due to key frame. - if (frame_cnt > rc.window_size) { - tl = layer_id.temporal_layer_id; - for (sl = 0; sl < enc_cfg.ss_number_layers; ++sl) { - sum_bitrate += 0.001 * 8.0 * sizes[sl] * framerate; - } - if (frame_cnt % rc.window_size == 0) { - rc.window_count += 1; - rc.avg_st_encoding_bitrate += sum_bitrate / rc.window_size; - rc.variance_st_encoding_bitrate += - (sum_bitrate / rc.window_size) * - (sum_bitrate / rc.window_size); - sum_bitrate = 0.0; - } - } - - // Second shifted window. - if (frame_cnt > rc.window_size + rc.window_size / 2) { - tl = layer_id.temporal_layer_id; - for (sl = 0; sl < enc_cfg.ss_number_layers; ++sl) { - sum_bitrate2 += 0.001 * 8.0 * sizes[sl] * framerate; - } - - if (frame_cnt > 2 * rc.window_size && - frame_cnt % rc.window_size == 0) { - rc.window_count += 1; - rc.avg_st_encoding_bitrate += sum_bitrate2 / rc.window_size; - rc.variance_st_encoding_bitrate += - (sum_bitrate2 / rc.window_size) * - (sum_bitrate2 / rc.window_size); - sum_bitrate2 = 0.0; - } - } - } -#endif - } - - printf("SVC frame: %d, kf: %d, size: %d, pts: %d\n", frames_received, - !!(cx_pkt->data.frame.flags & VPX_FRAME_IS_KEY), - (int)cx_pkt->data.frame.sz, (int)cx_pkt->data.frame.pts); - if (enc_cfg.ss_number_layers == 1 && enc_cfg.ts_number_layers == 1) - si->bytes_sum[0] += (int)cx_pkt->data.frame.sz; - ++frames_received; - break; - } - case VPX_CODEC_STATS_PKT: { - stats_write(&app_input.rc_stats, - cx_pkt->data.twopass_stats.buf, - cx_pkt->data.twopass_stats.sz); - break; - } - default: { - break; - } - } - } - - if (!end_of_stream) { - ++frame_cnt; - pts += frame_duration; - } - } - - // Compensate for the extra frame count for the bypass mode. - if (svc_ctx.temporal_layering_mode == VP9E_TEMPORAL_LAYERING_MODE_BYPASS) { - for (sl = 0; sl < enc_cfg.ss_number_layers; ++sl) { - const int layer = sl * enc_cfg.ts_number_layers + - layer_id.temporal_layer_id; - --rc.layer_input_frames[layer]; - } - } - - printf("Processed %d frames\n", frame_cnt); - fclose(infile); -#if OUTPUT_RC_STATS - if (svc_ctx.output_rc_stat) { - printout_rate_control_summary(&rc, &enc_cfg, frame_cnt); - printf("\n"); - } -#endif - if (vpx_codec_destroy(&codec)) die_codec(&codec, "Failed to destroy codec"); - if (app_input.passes == 2) - stats_close(&app_input.rc_stats, 1); - if (writer) { - vpx_video_writer_close(writer); - } -#if OUTPUT_RC_STATS - if (svc_ctx.output_rc_stat) { - for (tl = 0; tl < enc_cfg.ts_number_layers; ++tl) { - vpx_video_writer_close(outfile[tl]); - } - } -#endif - printf("Frame cnt and encoding time/FPS stats for encoding: %d %f %f \n", - frame_cnt, - 1000 * (float)cx_time / (double)(frame_cnt * 1000000), - 1000000 * (double)frame_cnt / (double)cx_time); - vpx_img_free(&raw); - // display average size, psnr - printf("%s", vpx_svc_dump_statistics(&svc_ctx)); - vpx_svc_release(&svc_ctx); - return EXIT_SUCCESS; -} diff --git a/test/vp9_arf_freq_test.cc b/test/arf_freq_test.cc similarity index 100% rename from test/vp9_arf_freq_test.cc rename to test/arf_freq_test.cc diff --git a/test/vp9_boolcoder_test.cc b/test/boolcoder_test.cc similarity index 100% rename from test/vp9_boolcoder_test.cc rename to test/boolcoder_test.cc diff --git a/test/vp9_denoiser_sse2_test.cc b/test/denoiser_sse2_test.cc similarity index 100% rename from test/vp9_denoiser_sse2_test.cc rename to test/denoiser_sse2_test.cc diff --git a/test/vp9_encoder_parms_get_to_decoder.cc b/test/encoder_parms_get_to_decoder.cc similarity index 100% rename from test/vp9_encoder_parms_get_to_decoder.cc rename to test/encoder_parms_get_to_decoder.cc diff --git a/test/vp9_error_block_test.cc b/test/error_block_test.cc similarity index 77% rename from test/vp9_error_block_test.cc rename to test/error_block_test.cc index e203ad749..629ba9708 100644 --- a/test/vp9_error_block_test.cc +++ b/test/error_block_test.cc @@ -160,24 +160,6 @@ TEST_P(ErrorBlockTest, ExtremeValues) { #if HAVE_SSE2 || HAVE_AVX using std::tr1::make_tuple; -int64_t wrap_vp10_highbd_block_error_8bit_c(const tran_low_t *coeff, - const tran_low_t *dqcoeff, - intptr_t block_size, - int64_t *ssz, int bps) { - EXPECT_EQ(8, bps); - return vp10_highbd_block_error_8bit_c(coeff, dqcoeff, block_size, ssz); -} -#endif // HAVE_SSE2 || HAVE_AVX - -#if HAVE_SSE2 -int64_t wrap_vp10_highbd_block_error_8bit_sse2(const tran_low_t *coeff, - const tran_low_t *dqcoeff, - intptr_t block_size, - int64_t *ssz, int bps) { - EXPECT_EQ(8, bps); - return vp10_highbd_block_error_8bit_sse2(coeff, dqcoeff, block_size, ssz); -} - INSTANTIATE_TEST_CASE_P( SSE2, ErrorBlockTest, ::testing::Values( @@ -186,26 +168,8 @@ INSTANTIATE_TEST_CASE_P( make_tuple(&vp10_highbd_block_error_sse2, &vp10_highbd_block_error_c, VPX_BITS_12), make_tuple(&vp10_highbd_block_error_sse2, - &vp10_highbd_block_error_c, VPX_BITS_8), - make_tuple(&wrap_vp10_highbd_block_error_8bit_sse2, - &wrap_vp10_highbd_block_error_8bit_c, VPX_BITS_8))); + &vp10_highbd_block_error_c, VPX_BITS_8))); #endif // HAVE_SSE2 -#if HAVE_AVX -int64_t wrap_vp10_highbd_block_error_8bit_avx(const tran_low_t *coeff, - const tran_low_t *dqcoeff, - intptr_t block_size, - int64_t *ssz, int bps) { - EXPECT_EQ(8, bps); - return vp10_highbd_block_error_8bit_avx(coeff, dqcoeff, block_size, ssz); -} - -INSTANTIATE_TEST_CASE_P( - AVX, ErrorBlockTest, - ::testing::Values( - make_tuple(&wrap_vp10_highbd_block_error_8bit_avx, - &wrap_vp10_highbd_block_error_8bit_c, VPX_BITS_8))); -#endif // HAVE_AVX - #endif // CONFIG_VP9_HIGHBITDEPTH } // namespace diff --git a/test/vp9_ethread_test.cc b/test/ethread_test.cc similarity index 100% rename from test/vp9_ethread_test.cc rename to test/ethread_test.cc diff --git a/test/vp9_intrapred_test.cc b/test/intrapred_test.cc similarity index 100% rename from test/vp9_intrapred_test.cc rename to test/intrapred_test.cc diff --git a/test/vp9_lossless_test.cc b/test/lossless_test.cc similarity index 100% rename from test/vp9_lossless_test.cc rename to test/lossless_test.cc diff --git a/test/vp9_spatial_svc_encoder.sh b/test/spatial_svc_encoder.sh old mode 100755 new mode 100644 similarity index 100% rename from test/vp9_spatial_svc_encoder.sh rename to test/spatial_svc_encoder.sh diff --git a/test/test.mk b/test/test.mk index 46faf07f3..87e2e39e5 100644 --- a/test/test.mk +++ b/test/test.mk @@ -37,8 +37,8 @@ LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += active_map_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += borders_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += cpu_speed_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += frame_size_tests.cc -LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += vp9_lossless_test.cc -LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += vp9_ethread_test.cc +LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += lossless_test.cc +LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += ethread_test.cc LIBVPX_TEST_SRCS-yes += decode_test_driver.cc LIBVPX_TEST_SRCS-yes += decode_test_driver.h @@ -104,13 +104,13 @@ LIBVPX_TEST_SRCS-yes += idct8x8_test.cc LIBVPX_TEST_SRCS-yes += partial_idct_test.cc LIBVPX_TEST_SRCS-yes += superframe_test.cc LIBVPX_TEST_SRCS-yes += tile_independence_test.cc -LIBVPX_TEST_SRCS-yes += vp9_boolcoder_test.cc -#LIBVPX_TEST_SRCS-yes += vp9_encoder_parms_get_to_decoder.cc +LIBVPX_TEST_SRCS-yes += boolcoder_test.cc +#LIBVPX_TEST_SRCS-yes += encoder_parms_get_to_decoder.cc endif #LIBVPX_TEST_SRCS-yes += convolve_test.cc LIBVPX_TEST_SRCS-yes += lpf_8_test.cc -LIBVPX_TEST_SRCS-yes += vp9_intrapred_test.cc +LIBVPX_TEST_SRCS-yes += intrapred_test.cc #LIBVPX_TEST_SRCS-$(CONFIG_VP10_DECODER) += vp9_thread_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += dct16x16_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += dct32x32_test.cc @@ -119,7 +119,7 @@ LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += fdct8x8_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += hadamard_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += minmax_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += variance_test.cc -#LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += vp9_error_block_test.cc +LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += error_block_test.cc #LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += vp9_quantize_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += subtract_test.cc @@ -130,9 +130,9 @@ LIBVPX_TEST_SRCS-$(CONFIG_INTERNAL_STATS) += consistency_test.cc endif ifeq ($(CONFIG_VP10_ENCODER)$(CONFIG_VP10_TEMPORAL_DENOISING),yesyes) -LIBVPX_TEST_SRCS-$(HAVE_SSE2) += vp9_denoiser_sse2_test.cc +LIBVPX_TEST_SRCS-$(HAVE_SSE2) += denoiser_sse2_test.cc endif -LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += vp9_arf_freq_test.cc +LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += arf_freq_test.cc LIBVPX_TEST_SRCS-$(CONFIG_VP10_ENCODER) += vp10_inv_txfm_test.cc