/* * Copyright (c) 2020 Amlogic, Inc. All rights reserved. * * This source code is subject to the terms and conditions defined in the * file 'LICENSE' which is part of this source code package. * * Description: */ #ifndef _AML_MP_PLAYER_VIDEO_TEST_H_ #define _AML_MP_PLAYER_VIDEO_TEST_H_ #include #include #include "../amlMpTestSupporter/Playback.h" #if defined(__clang__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wsign-compare" #endif #include #if defined(__clang__) #pragma clang diagnostic pop #endif #include "TestUrlList.h" #include "../amlMpTestSupporter/TestModule.h" #include #include #include #include "source/Source.h" #include #include #include #include #include "string.h" #include #include #include #include std::string get_vfm_map_checkpoint(); std::string get_frame_count_checkpoint(); void check_vfm_map(int timeoutMs); void check_frame_count(int timeoutMs); const std::string VCOM_MAP = "vcom-map-0 { video_composer.0(1) video_render.0}"; namespace aml_mp { extern bool CryptoMode; static const char * mName = LOG_TAG; static const int kWaitFirstVfameTimeOutMs = 2 * 1000ll; static int kWaitPlayingErrorsMs = 15 * 1000ll; static const int kWaitVideoChangedMs = 2 * 1000ll; static const int kWaitAudioChangedMs = 2 * 1000ll; static const int kSleepTimeMs = 0.05 * 1000ll; static const int kCheckFrameTimeOutMs = 50 * 1000ll; #define AML_MP_VIDEO_MODE_1 1 #define AML_MP_VIDEO_MODE_0 0 #define AML_MP_VIDEO_MODE_2 2 #define AML_MP_VIDEO_WINDOW_ZORDER_1 1 #define AML_MP_VIDEO_WINDOW_ZORDER_2 2 #define AML_MP_VIDEO_WINDOW_X 200 #define AML_MP_VIDEO_WINDOW_Y 200 #define AML_MP_VIDEO_WINDOW_HEIGHT 600 #define AML_MP_VIDEO_WINDOW_WIDTH 600 #define AML_MP_MASTER_VOLUME_70 70 #define AML_MP_SLAVE_VOLUME_30 30 #define AML_MP_MASTER_VOLUME_30 30 #define AML_MP_SLAVE_VOLUME_70 70 #define AML_MP_PID_CHANGED_DURATION 38 * 1000ll #define AML_MP_PID_CHANGED_EVENT 2 * 1000ll #define AML_MP_DATA_LOSS_EVENT 5 * 1000ll #define AML_MP_RECORD_PATH "dvr://data/amlMpRecordFile" struct AmlMpBase: public testing::Test { void SetUp() override { MLOGI("SetUp"); printf("Crypto %d \n", CryptoMode); } void TearDown() override { } std::vector audioStreams; //coverity[member_not_init_in_gen_ctor] float volume, volume2; int mRet = 0; public: void runTest(const std::string & url, bool isStop = true); void startPlaying(const std::string & url); //bool getCrypto(); void stopPlaying(); bool waitFirstVFrameEvent(int timeoutMs = kWaitFirstVfameTimeOutMs); bool waitPlayingErrors(int msec = kWaitPlayingErrorsMs); bool waitPlaying(int msec = kWaitPlayingErrorsMs); bool waitVideoChangedEvent(int timeoutMs); bool waitAudioChangedEvent(int timeoutMs); bool waitAVSyncDoneEvent(int timeoutMs); bool waitPidChangedEvent(int timeoutMs); bool waitDataLossEvent(int timeoutMs); bool waitDvrRecorderStatusEvent(int timeoutMs); bool waitDvrRecorderErrorEvent(int timeoutMs); bool waitDvrRecorderSyncEndEvent(int timeoutMs); bool waitDvrRecorderCryptoStatusEvent(int timeoutMs); bool waitDvrRecorderWriteErrorEvent(int timeoutMs); void playereventCallback(Aml_MP_PlayerEventType event, int64_t param); void dvrRecorderEventCallback(AML_MP_DVRRecorderEventType event, int64_t param); void createMpTestSupporter(bool isPlayer = true); void createMpTestSupporter2(bool isPlayer = true); void createMpTestSupporter(sptr* testSupporter, bool isPlayer = true); void DVRSegment(std::string url, bool isDelete = false); void getDVRSourceInfo(Aml_MP_DVRSourceInfo info); void DVRPlayback_SetGetVolume(std::string url, float volume); std::string defaultFailureMessage(const std::string & url) const { std::stringstream ss; ss << "playing " << url << " failed!"; return ss.str(); } AML_MP_PLAYER getPlayer(); AML_MP_DVRRECORDER getRecorder(); AML_MP_DVRPLAYER getDVRPlayer(); AML_MP_DVRRECORDER getRecorder(sptr testSupporter); AML_MP_DVRPLAYER getDVRPlayer(sptr testSupporter); Aml_MP_PlayerParameterKey key = AML_MP_PLAYER_PARAMETER_SET_BASE; Aml_MP_VideoDisplayMode parameter = AML_MP_VIDEO_DISPLAY_MODE_NORMAL; Aml_MP_AVSyncSource mSyncSource = AML_MP_AVSYNC_SOURCE_DEFAULT; void ADVolumeMixTest(const std::string & url, Aml_MP_PlayerParameterKey key, Aml_MP_ADVolume parameter); void checkHasVideo(std::string url); void TeletextControlTest(const std::string & url, Aml_MP_PlayerParameterKey key, AML_MP_TeletextCtrlParam parameter); template void ParameterTest(const std::string & url, T1 key, T2 parameter); void SetVideoWindow(const std::string & url, int32_t x, int32_t y, int32_t width, int32_t height); void setAudioVideoParam(const std::string & url); void SetGetVolume(const std::string & url, float volume); void videoDecoding(const std::string & url, bool mStart, bool mSourceReceiver); void audioDecoding(const std::string & url, bool mStart, bool mSourceReceiver); void FCCAndPIPTest(const std::string & url, bool mPIP); Aml_MP_PlayerWorkMode mWorkMode = AML_MP_PLAYER_MODE_NORMAL; void DVRRecordRecordStream(std::string url); protected: sptr mpTestSupporter; sptr mpTestSupporter2; std::mutex mLock; std::condition_variable mCond; bool mFirstVFrameDisplayed = false; bool mPlayingHaveErrors = false; bool mAVSyncDone = false; bool mPidChanged = false; bool mVideoChanged = false; bool mAudioChanged = false; bool mDataLoss = false; bool mDvrRecorderStatus = false; bool mDvrRecorderError = false; bool mDvrRecorderSyncEnd = false; bool mDvrRecorderCryptoStatus = false; bool mDvrRecorderWriteError = false; //coverity[declaration_with_small_time_t] time_t time_temp = 0; loff_t size_temp = 0; AmlMpTestSupporter::PlayMode mPlayMode = AmlMpTestSupporter::START_ALL_STOP_ALL; }; struct AmlMpTest: AmlMpBase { public: std::list urls; std::string url; std::list mUrls; void SetUp() override { MLOGI("SetUp 2"); std::string name = "AmlMpTest"; if (!TestUrlList::instance().getUrl(name, &url)) { if (!TestUrlList::instance().getUrls(name, &urls)) { printf("haven't get urls------- \n"); } else { mUrls = urls; } } else { mUrls.push_back(url); } } void TearDown() override { } protected: //std::list mUrls; }; } #endif