#include <string>
#include "media/base/video_codecs.h"
#include "media/capabilities/bucket_utility.h"
#include "media/cdm/clear_key_cdm_common.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/geometry/rect.h"
#include "media/capabilities/video_decode_stats_db.h"
namespace media {
VideoDecodeStatsDB::VideoDescKey MakeKey(VideoCodecProfile codec_profile,
const gfx::Size& size,
int frame_rate,
std::string key_system,
bool use_hw_secure_codecs) {
return VideoDecodeStatsDB::VideoDescKey::MakeBucketedKey(
codec_profile, size, frame_rate, key_system, use_hw_secure_codecs);
}
TEST(VideoDecodeStatsDBTest, KeySerialization) {
auto keyA =
MakeKey(H264PROFILE_BASELINE, gfx::Size(1280, 720), 30, "", false);
ASSERT_EQ("0|1280x720|30", keyA.Serialize());
auto keyB = MakeKey(H264PROFILE_BASELINE, gfx::Size(1280, 720), 30,
kClearKeyKeySystem, false);
ASSERT_EQ("0|1280x720|30|org.w3.clearkey|not_hw_secure", keyB.Serialize());
auto keyC = MakeKey(H264PROFILE_BASELINE, gfx::Size(1280, 720), 30,
"com.widevine.alpha", true);
ASSERT_EQ("0|1280x720|30|com.widevine.alpha|is_hw_secure", keyC.Serialize());
auto keyD = MakeKey(VP9PROFILE_PROFILE0, gfx::Size(640, 360), 25,
"com.example", false);
ASSERT_EQ("12|640x360|25|com.example|not_hw_secure", keyD.Serialize());
}
TEST(VideoDecodeStatsDBTest, OperatorEquals) {
auto keyA =
MakeKey(H264PROFILE_BASELINE, gfx::Size(1280, 720), 30, "", false);
ASSERT_EQ(keyA, keyA);
auto keyB = keyA;
ASSERT_EQ(keyA, keyB);
ASSERT_NE(keyA,
MakeKey(VP9PROFILE_PROFILE0, gfx::Size(1280, 720), 30, "", false));
ASSERT_NE(keyA,
MakeKey(H264PROFILE_BASELINE, gfx::Size(640, 360), 30, "", false));
ASSERT_NE(keyA,
MakeKey(H264PROFILE_BASELINE, gfx::Size(1280, 720), 25, "", false));
ASSERT_NE(keyA, MakeKey(H264PROFILE_BASELINE, gfx::Size(1280, 720), 30,
"com.example", false));
ASSERT_EQ(keyA.frame_rate, GetFpsBucket(29));
ASSERT_EQ(keyA.size, GetSizeBucket(gfx::Size(1279, 719)));
ASSERT_EQ(keyA,
MakeKey(H264PROFILE_BASELINE, gfx::Size(1279, 719), 29, "", false));
}
TEST(VideoDecodeStatsDBTest, KeyBucketting) {
auto keyA =
MakeKey(H264PROFILE_BASELINE, gfx::Size(1279, 719), 29, "", false);
ASSERT_EQ(30, keyA.frame_rate);
ASSERT_EQ(gfx::Size(1280, 720), keyA.size);
}
}