Merge "Add Check for Peek Stream validity to decoder test."
This commit is contained in:
commit
97d0cb58f8
@ -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) {
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
&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;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user