Commit 97d0cb58 authored by Jim Bankoski's avatar Jim Bankoski Committed by Gerrit Code Review
Browse files

Merge "Add Check for Peek Stream validity to decoder test."

parents 6118dcfe 96727b95
No related merge requests found
Showing with 37 additions and 0 deletions
...@@ -15,6 +15,14 @@ ...@@ -15,6 +15,14 @@
namespace libvpx_test { namespace libvpx_test {
const char kVP8Name[] = "WebM Project VP8";
vpx_codec_err_t Decoder::PeekStream(const uint8_t *cxdata, size_t size,
vpx_codec_stream_info_t *stream_info) {
return vpx_codec_peek_stream_info(CodecInterface(), cxdata, size,
stream_info);
}
vpx_codec_err_t Decoder::DecodeFrame(const uint8_t *cxdata, size_t size) { vpx_codec_err_t Decoder::DecodeFrame(const uint8_t *cxdata, size_t size) {
vpx_codec_err_t res_dec; vpx_codec_err_t res_dec;
InitOnce(); InitOnce();
...@@ -29,10 +37,32 @@ void DecoderTest::RunLoop(CompressedVideoSource *video) { ...@@ -29,10 +37,32 @@ void DecoderTest::RunLoop(CompressedVideoSource *video) {
vpx_codec_dec_cfg_t dec_cfg = {0}; vpx_codec_dec_cfg_t dec_cfg = {0};
Decoder* const decoder = codec_->CreateDecoder(dec_cfg, 0); Decoder* const decoder = codec_->CreateDecoder(dec_cfg, 0);
ASSERT_TRUE(decoder != NULL); ASSERT_TRUE(decoder != NULL);
const char *codec_name = decoder->GetDecoderName();
const bool is_vp8 = strncmp(kVP8Name, codec_name, sizeof(kVP8Name) - 1) == 0;
// Decode frames. // Decode frames.
for (video->Begin(); video->cxdata(); video->Next()) { for (video->Begin(); video->cxdata(); video->Next()) {
PreDecodeFrameHook(*video, decoder); PreDecodeFrameHook(*video, decoder);
vpx_codec_stream_info_t stream_info;
stream_info.sz = sizeof(stream_info);
const vpx_codec_err_t res_peek = decoder->PeekStream(video->cxdata(),
video->frame_size(),
&stream_info);
if (is_vp8) {
/* Vp8's implementation of PeekStream returns an error if the frame you
* pass it is not a keyframe, so we only expect VPX_CODEC_OK on the first
* frame, which must be a keyframe. */
if (video->frame_number() == 0)
ASSERT_EQ(VPX_CODEC_OK, res_peek) << "Peek return failed: "
<< vpx_codec_err_to_string(res_peek);
} else {
/* The Vp9 implementation of PeekStream returns an error only if the
* data passed to it isn't a valid Vp9 chunk. */
ASSERT_EQ(VPX_CODEC_OK, res_peek) << "Peek return failed: "
<< vpx_codec_err_to_string(res_peek);
}
vpx_codec_err_t res_dec = decoder->DecodeFrame(video->cxdata(), vpx_codec_err_t res_dec = decoder->DecodeFrame(video->cxdata(),
video->frame_size()); video->frame_size());
if (!HandleDecodeResult(res_dec, *video, decoder)) if (!HandleDecodeResult(res_dec, *video, decoder))
......
...@@ -49,6 +49,9 @@ class Decoder { ...@@ -49,6 +49,9 @@ class Decoder {
vpx_codec_destroy(&decoder_); vpx_codec_destroy(&decoder_);
} }
vpx_codec_err_t PeekStream(const uint8_t *cxdata, size_t size,
vpx_codec_stream_info_t *stream_info);
vpx_codec_err_t DecodeFrame(const uint8_t *cxdata, size_t size); vpx_codec_err_t DecodeFrame(const uint8_t *cxdata, size_t size);
DxDataIterator GetDxData() { DxDataIterator GetDxData() {
...@@ -85,6 +88,10 @@ class Decoder { ...@@ -85,6 +88,10 @@ class Decoder {
&decoder_, cb_get, cb_release, user_priv); &decoder_, cb_get, cb_release, user_priv);
} }
const char* GetDecoderName() {
return vpx_codec_iface_name(CodecInterface());
}
protected: protected:
virtual vpx_codec_iface_t* CodecInterface() const = 0; virtual vpx_codec_iface_t* CodecInterface() const = 0;
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment