Add support for parsing VPx track codec private data.

Currently only the VP9 profile level is supported.

http://www.webmproject.org/vp9/profiles/

Change-Id: Iff7238e104621b53fdd51a67d752bd72b2dbbacb
This commit is contained in:
Tom Finegan
2016-04-01 10:29:14 -07:00
parent 4cbdbf1978
commit 5c50e310e7
4 changed files with 109 additions and 1 deletions

View File

@@ -14,6 +14,7 @@
#include <iomanip>
#include <string>
#include "common/hdr_util.h"
#include "mkvparser/mkvparser.h"
#include "mkvparser/mkvreader.h"
#include "testing/test_util.h"
@@ -662,6 +663,27 @@ TEST_F(ParserTest, StereoModeParsedCorrectly) {
EXPECT_EQ(144, video_track->GetDisplayHeight());
}
TEST_F(ParserTest, Vp9CodecProfileTest) {
const int kCodecPrivateLength = 3;
// Test invalid codec private data; all of these should return 0.
const uint8_t bad_codec_private[kCodecPrivateLength] = {0, 0, 0};
EXPECT_EQ(0, libwebm::ParseVpxCodecPrivate(NULL, kCodecPrivateLength));
EXPECT_EQ(0, libwebm::ParseVpxCodecPrivate(&bad_codec_private[0], 0));
EXPECT_EQ(0, libwebm::ParseVpxCodecPrivate(&bad_codec_private[0],
kCodecPrivateLength));
const uint8_t good_codec_private[kCodecPrivateLength] = {1, 1, 11};
// Test parse of codec private chunks, but lie about length.
EXPECT_EQ(0, libwebm::ParseVpxCodecPrivate(&bad_codec_private[0], 0));
EXPECT_EQ(0, libwebm::ParseVpxCodecPrivate(&good_codec_private[0], 0));
// Test a valid codec private; this should return 11.
// ID: 1, Length: 1, Profile: 11
EXPECT_EQ(11, libwebm::ParseVpxCodecPrivate(&good_codec_private[0],
kCodecPrivateLength));
}
} // namespace test
int main(int argc, char* argv[]) {