1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Copyright (c) 2012 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/codec_factory.h" 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/decode_test_driver.h" 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "third_party/googletest/src/include/gtest/gtest.h" 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/register_state_check.h" 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "test/video_source.h" 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan 16233d2500723e5594f3e7c70896ffeeef32b9c950ywannamespace libvpx_test { 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan 18233d2500723e5594f3e7c70896ffeeef32b9c950ywanvpx_codec_err_t Decoder::DecodeFrame(const uint8_t *cxdata, size_t size) { 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan vpx_codec_err_t res_dec; 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan InitOnce(); 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan REGISTER_STATE_CHECK( 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan res_dec = vpx_codec_decode(&decoder_, 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan cxdata, static_cast<unsigned int>(size), 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan NULL, 0)); 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan return res_dec; 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan 28233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid DecoderTest::RunLoop(CompressedVideoSource *video) { 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan vpx_codec_dec_cfg_t dec_cfg = {0}; 30233d2500723e5594f3e7c70896ffeeef32b9c950ywan Decoder* const decoder = codec_->CreateDecoder(dec_cfg, 0); 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan ASSERT_TRUE(decoder != NULL); 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan // Decode frames. 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan for (video->Begin(); video->cxdata(); video->Next()) { 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan PreDecodeFrameHook(*video, decoder); 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan vpx_codec_err_t res_dec = decoder->DecodeFrame(video->cxdata(), 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan video->frame_size()); 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan ASSERT_EQ(VPX_CODEC_OK, res_dec) << decoder->DecodeError(); 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan DxDataIterator dec_iter = decoder->GetDxData(); 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan const vpx_image_t *img = NULL; 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan // Get decompressed data 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan while ((img = dec_iter.Next())) 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan DecompressedFrameHook(*img, video->frame_number()); 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan } 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan delete decoder; 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan} 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // namespace libvpx_test 51