* Copyright (c) 2024 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <cstddef>
#include <cstdint>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include "securec.h"
#include <string>
#include <malloc.h>
#include <sys/stat.h>
#include <cinttypes>
#include <thread>
#include <chrono>
#include "plugin/plugin_event.h"
#include "demuxer/stream_demuxer.h"
#include <iostream>
#include "mediademuxer_mock_fuzz.h"
#include "media_demuxer.h"
#define FUZZ_PROJECT_NAME "mediademuxer_fuzzer"
using namespace std;
using namespace OHOS::Media;
namespace OHOS {
namespace Media {
const int NUMBER_1 = 1;
const int NUMBER_2 = 2;
const int NUMBER_3 = 3;
const int NUMBER_4 = 4;
const int NUMBER_5 = 5;
const int NUMBER_8 = 8;
const int NUMBER_10 = 10;
const int NUMBER_11 = 11;
const int NUMBER_12 = 12;
const int NUMBER_21 = 21;
const int NUMBER_22 = 22;
const int NUMBER_23 = 23;
const int NUMBER_24 = 24;
const int NUMBER_25 = 25;
const int NUMBER_30 = 30;
const int NUMBER_60 = 60;
const int NUMBER_100 = 100;
const int NUMBER_111 = 111;
const int NUMBER_200 = 200;
const int NUMBER_256 = 256;
const int NUMBER_320 = 320;
const int NUMBER_720 = 720;
const int NUMBER_1080 = 1080;
const int NUMBER_1280 = 1280;
const int NUMBER_1500 = 1500;
const int NUMBER_1800 = 1800;
const int NUMBER_1920 = 1920;
const int NUMBER_65536 = 65536;
const float NUMBER_SPEED = 111.5;
const double NUMBER_FRAMERATE_1 = 1.5;
const double NUMBER_FRAMERATE_2 = 15000;
const char *DATA_PATH = "/data/test/fuzz_create.mp4";
void DoFuzzTest();
void FuzzTest1();
void FuzzTest6();
void FuzzTest7();
void FuzzTest8();
void FuzzTest9();
void FuzzTest10();
void FuzzTest11();
void FuzzTest12();
void FuzzTest13();
void FuzzTest14();
void FuzzTest15();
void FuzzTest16();
void FuzzTest17();
void FuzzTest18();
void FuzzTest19();
void FuzzTest20();
void FuzzTest21();
void FuzzTest22();
void FuzzTest23();
void FuzzTest24();
void FuzzTest25();
void FuzzTest27();
void FuzzTest28();
void FuzzTest29();
void FuzzTest30();
void FuzzTest31();
void FuzzTest32();
void FuzzTest33();
void FuzzTest34();
void FuzzTest35();
void FuzzTest37();
void FuzzTest38();
void FuzzTest39();
void FuzzTest40();
void FuzzTest41();
void FuzzTest45();
void FuzzTest46();
void FuzzTest47();
void FuzzTest48();
void FuzzTest49();
void FuzzTest50();
void FuzzTest51();
void FuzzTest52();
void FuzzTest53();
void FuzzTest54();
void FuzzTest55();
void FuzzTest56();
void FuzzTest57();
class MediaDemuxerTestCallback : public OHOS::MediaAVCodec::AVDemuxerCallback {
public:
explicit MediaDemuxerTestCallback()
{
}
~MediaDemuxerTestCallback()
{
}
void OnDrmInfoChanged(const std::multimap<std::string, std::vector<uint8_t>> &drmInfo) override
{
}
};
class TestEventReceiver : public Pipeline::EventReceiver {
public:
explicit TestEventReceiver()
{
}
void OnEvent(const Event &event)
{
}
};
class VideoStreamReadyTestCallback : public VideoStreamReadyCallback {
public:
bool IsVideoStreamDiscardable(const std::shared_ptr<AVBuffer> buffer)
{
(void)buffer;
return true;
}
protected:
};
bool RunMediaDemuxerFuzz(uint8_t *data, size_t size)
{
if (size < sizeof(int64_t)) {
return false;
}
int32_t fd = open(DATA_PATH, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
if (fd < 0) {
return false;
}
int len = write(fd, data, size);
if (len <= 0) {
close(fd);
return false;
}
close(fd);
FuzzTest1();
FuzzTest6();
FuzzTest7();
FuzzTest8();
FuzzTest9();
FuzzTest10();
FuzzTest11();
FuzzTest12();
FuzzTest13();
FuzzTest14();
FuzzTest15();
FuzzTest16();
FuzzTest17();
FuzzTest18();
FuzzTest19();
FuzzTest20();
FuzzTest21();
FuzzTest22();
FuzzTest23();
FuzzTest24();
FuzzTest25();
FuzzTest27();
FuzzTest28();
FuzzTest29();
FuzzTest30();
DoFuzzTest();
unlink(DATA_PATH);
return true;
}
void DoFuzzTest()
{
FuzzTest31();
FuzzTest32();
FuzzTest33();
FuzzTest34();
FuzzTest35();
FuzzTest37();
FuzzTest38();
FuzzTest39();
FuzzTest40();
FuzzTest41();
FuzzTest45();
FuzzTest46();
FuzzTest47();
FuzzTest48();
FuzzTest49();
FuzzTest50();
FuzzTest51();
FuzzTest52();
FuzzTest53();
FuzzTest54();
FuzzTest55();
FuzzTest56();
FuzzTest57();
}
void FuzzTest1()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
return;
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
std::shared_ptr<MediaSource> source = std::make_shared<MediaSource>(uri);
Status ret = demuxer->SetDataSource(source);
if (ret != Status::OK) {
close(fd);
return;
}
demuxer->OnInterrupted(false);
demuxer->SetBundleName("fuzzTest");
std::shared_ptr<AVBufferQueue> inputQueue =
AVBufferQueue::Create(NUMBER_4, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> producer = inputQueue->GetProducer();
demuxer->SetOutputBufferQueue(0, producer);
auto queueMap = demuxer->GetBufferQueueProducerMap();
close(fd);
return;
}
void FuzzTest6()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(0, inputBufferQueueProducer);
demuxer->SetDecoderFramerateUpperLimit(NUMBER_111, 0);
demuxer->SetSpeed(NUMBER_SPEED);
demuxer->SetFrameRate(1, NUMBER_25);
demuxer->DisableMediaTrack(Plugins::MediaType::VIDEO);
demuxer->IsRenderNextVideoFrameSupported();
close(fd);
}
void FuzzTest7()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
int32_t invalidTrackId = NUMBER_100;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->SetTrackNotifyFlag(invalidTrackId, true);
demuxer->SetTrackNotifyFlag(trackId, true);
demuxer->OnBufferAvailable(trackId);
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
close(fd);
}
void FuzzTest8()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
std::shared_ptr<MediaDemuxerTestCallback> callback = std::make_shared<MediaDemuxerTestCallback>();
demuxer->SetDrmCallback(callback);
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
close(fd);
}
void FuzzTest9()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
int64_t duration = 0;
demuxer->mediaMetaData_.globalMeta = std::make_shared<Meta>();
demuxer->GetDuration(duration);
close(fd);
}
void FuzzTest10()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
close(fd);
}
void FuzzTest11()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->AddDemuxerCopyTask(trackId, TaskType::GLOBAL);
close(fd);
}
void FuzzTest12()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
int32_t invalidTrackId = NUMBER_100;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->bufferQueueMap_.erase(trackId);
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->AddDemuxerCopyTask(invalidTrackId, TaskType::GLOBAL);
demuxer->bufferQueueMap_.insert(
std::pair<int32_t, sptr<AVBufferQueueProducer>>(invalidTrackId, inputBufferQueueProducer));
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
close(fd);
}
void FuzzTest13()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->OnDumpInfo(-1);
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
close(fd);
}
void FuzzTest14()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->useBufferQueue_ = true;
demuxer->SelectTrack(trackId);
demuxer->UnselectTrack(trackId);
close(fd);
}
void FuzzTest15()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
int64_t realSeekTime = 0;
demuxer->SeekTo(0, SeekMode::SEEK_CLOSEST_INNER, realSeekTime);
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->SeekTo(0, SeekMode::SEEK_CLOSEST_INNER, realSeekTime);
close(fd);
}
void FuzzTest16()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->isSelectBitRate_.store(true);
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->SelectBitRate(0);
close(fd);
}
void FuzzTest17()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
demuxer->isSelectBitRate_.store(true);
demuxer->SelectBitRate(0);
close(fd);
}
void FuzzTest18()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->videoTrackId_ = 0;
demuxer->audioTrackId_ = NUMBER_1;
demuxer->subtitleTrackId_ = NUMBER_2;
demuxer->IsRightMediaTrack(MediaDemuxer::TRACK_ID_INVALID, DemuxerTrackType::VIDEO);
demuxer->IsRightMediaTrack(0, DemuxerTrackType::VIDEO);
demuxer->IsRightMediaTrack(NUMBER_1, DemuxerTrackType::AUDIO);
demuxer->IsRightMediaTrack(NUMBER_2, DemuxerTrackType::SUBTITLE);
}
void FuzzTest19()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
int32_t invalidTrackId = NUMBER_100;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->Flush();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->bufferQueueMap_.insert(
std::pair<int32_t, sptr<AVBufferQueueProducer>>(invalidTrackId, inputBufferQueueProducer));
demuxer->Flush();
close(fd);
}
void FuzzTest20()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t invalidTrackId = NUMBER_100;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->taskMap_[invalidTrackId] = nullptr;
demuxer->PauseAllTask();
demuxer->source_ = nullptr;
demuxer->StopAllTask();
close(fd);
}
void FuzzTest21()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->Resume();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
close(fd);
}
void FuzzTest22()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = nullptr;
demuxer->source_ = nullptr;
demuxer->inPreroll_.store(true);
demuxer->Resume();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->inPreroll_.store(false);
demuxer->Resume();
}
void FuzzTest23()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
int32_t invalidTrackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
demuxer->taskMap_[invalidTrackId] = nullptr;
demuxer->Start();
close(fd);
}
void FuzzTest24()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
close(fd);
}
void FuzzTest25()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t aTrackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(aTrackId, inputBufferQueueProducer);
demuxer->isDump_ = true;
close(fd);
}
void FuzzTest27()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t trackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(trackId, inputBufferQueueProducer);
std::shared_ptr<Pipeline::EventReceiver> receiver = std::make_shared<TestEventReceiver>();
demuxer->SetEventReceiver(receiver);
demuxer->OnEvent({Plugins::PluginEventType::CLIENT_ERROR, "", "CLIENT_ERROR"});
demuxer->OnEvent({Plugins::PluginEventType::BUFFERING_END, "", "BUFFERING_END"});
demuxer->OnEvent({Plugins::PluginEventType::BUFFERING_START, "", "BUFFERING_START"});
demuxer->OnEvent({Plugins::PluginEventType::CACHED_DURATION, "", "CACHED_DURATION"});
demuxer->OnEvent({Plugins::PluginEventType::SOURCE_BITRATE_START, "", "SOURCE_BITRATE_START"});
demuxer->OnEvent({Plugins::PluginEventType::EVENT_BUFFER_PROGRESS, "", "EVENT_BUFFER_PROGRESS"});
demuxer->OnEvent({Plugins::PluginEventType::EVENT_CHANNEL_CLOSED, "", "EVENT_CHANNEL_CLOSED"});
close(fd);
}
void FuzzTest28()
{
std::shared_ptr<DemuxerPluginManager> demuxerPluginManager = std::make_shared<DemuxerPluginManager>();
std::vector<StreamInfo> streams;
Plugins::StreamInfo info;
info.streamId = 0;
info.bitRate = 0;
info.type = Plugins::AUDIO;
streams.push_back(info);
streams.push_back(info);
Plugins::StreamInfo info1;
info1.streamId = NUMBER_1;
info1.bitRate = 0;
info1.type = Plugins::VIDEO;
streams.push_back(info1);
streams.push_back(info1);
Plugins::StreamInfo info2;
info2.streamId = NUMBER_2;
info2.bitRate = 0;
info2.type = Plugins::SUBTITLE;
streams.push_back(info2);
streams.push_back(info2);
demuxerPluginManager->InitDefaultPlay(streams);
demuxerPluginManager->GetStreamCount();
demuxerPluginManager->LoadDemuxerPlugin(-1, nullptr);
demuxerPluginManager->curSubTitleStreamID_ = -1;
Plugins::MediaInfo mediaInfo;
demuxerPluginManager->LoadCurrentSubtitlePlugin(nullptr, mediaInfo);
demuxerPluginManager->GetTmpInnerTrackIDByTrackID(-1);
demuxerPluginManager->GetInnerTrackIDByTrackID(-1);
int32_t trackId = -1;
int32_t innerTrackId = -1;
demuxerPluginManager->GetTrackInfoByStreamID(0, trackId, innerTrackId);
demuxerPluginManager->AddTrackMapInfo(0, 0);
demuxerPluginManager->AddTrackMapInfo(NUMBER_1, NUMBER_1);
demuxerPluginManager->AddTrackMapInfo(NUMBER_2, NUMBER_2);
demuxerPluginManager->GetTrackInfoByStreamID(0, trackId, innerTrackId);
demuxerPluginManager->GetInnerTrackIDByTrackID(0);
demuxerPluginManager->CheckTrackIsActive(-1);
}
void FuzzTest29()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock = std::make_shared<DemuxerPluginMock>("StatusOK");
demuxer->audioTrackId_ = NUMBER_1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[0].streamID = 0;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[NUMBER_1].streamID = NUMBER_1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[NUMBER_2].streamID = NUMBER_2;
demuxer->demuxerPluginManager_->streamInfoMap_[0].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_1].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_2].plugin = pluginMock;
demuxer->isParserTaskEnd_ = false;
uint32_t frameId = 0;
std::vector<uint32_t> IFramePos = { NUMBER_100 };
demuxer->Dts2FrameId(NUMBER_100, frameId);
demuxer->GetIFramePos(IFramePos);
demuxer->source_ = nullptr;
demuxer->Dts2FrameId(NUMBER_100, frameId);
demuxer->GetIFramePos(IFramePos);
demuxer->demuxerPluginManager_ = nullptr;
demuxer->Dts2FrameId(NUMBER_100, frameId);
demuxer->GetIFramePos(IFramePos);
demuxer->SetFrameRate(-1.0, 0);
demuxer->SetFrameRate(1.0, 0);
}
void FuzzTest30()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock = std::make_shared<DemuxerPluginMock>("StatusOK");
demuxer->audioTrackId_ = NUMBER_1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[0].streamID = 0;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[NUMBER_1].streamID = NUMBER_1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[NUMBER_2].streamID = NUMBER_2;
demuxer->demuxerPluginManager_->streamInfoMap_[0].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_1].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_2].plugin = pluginMock;
demuxer->isParserTaskEnd_ = false;
uint32_t frameId = 0;
std::vector<uint32_t> IFramePos = { NUMBER_100 };
demuxer->SeekMs2FrameId(NUMBER_100, frameId);
demuxer->GetIFramePos(IFramePos);
demuxer->source_ = nullptr;
demuxer->SeekMs2FrameId(NUMBER_100, frameId);
demuxer->GetIFramePos(IFramePos);
demuxer->demuxerPluginManager_ = nullptr;
demuxer->SeekMs2FrameId(NUMBER_100, frameId);
demuxer->GetIFramePos(IFramePos);
demuxer->SetFrameRate(-1.0, 0);
demuxer->SetFrameRate(1.0, 0);
}
void FuzzTest31()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock = std::make_shared<DemuxerPluginMock>("StatusOK");
demuxer->audioTrackId_ = NUMBER_1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[0].streamID = 0;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[NUMBER_1].streamID = NUMBER_1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[NUMBER_2].streamID = NUMBER_2;
demuxer->demuxerPluginManager_->streamInfoMap_[0].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_1].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_2].plugin = pluginMock;
demuxer->isParserTaskEnd_ = false;
int64_t seekMs = 0;
std::vector<uint32_t> IFramePos = { NUMBER_2 };
demuxer->FrameId2SeekMs(NUMBER_100, seekMs);
demuxer->GetIFramePos(IFramePos);
demuxer->source_ = nullptr;
demuxer->FrameId2SeekMs(NUMBER_100, seekMs);
demuxer->GetIFramePos(IFramePos);
demuxer->demuxerPluginManager_ = nullptr;
demuxer->FrameId2SeekMs(NUMBER_100, seekMs);
demuxer->GetIFramePos(IFramePos);
demuxer->SetFrameRate(-1.0, 0);
demuxer->SetFrameRate(1.0, 0);
}
void FuzzTest32()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
uint64_t relativePresentationTimeUs;
demuxer->GetRelativePresentationTimeUsByIndex(0, NUMBER_1, relativePresentationTimeUs);
uint32_t index;
demuxer->GetIndexByRelativePresentationTimeUs(0, NUMBER_1, index);
demuxer->demuxerPluginManager_ = nullptr;
demuxer->GetRelativePresentationTimeUsByIndex(0, NUMBER_1, relativePresentationTimeUs);
demuxer->GetIndexByRelativePresentationTimeUs(0, NUMBER_1, index);
}
void FuzzTest33()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
std::shared_ptr<AVBuffer> sample = std::make_shared<AVBuffer>();
sample->pts_ = NUMBER_100;
demuxer->audioTrackId_ = 0;
demuxer->shouldCheckAudioFramePts_ = false;
demuxer->CheckDropAudioFrame(sample, 0);
demuxer->lastAudioPts_ = NUMBER_100 + 1;
demuxer->CheckDropAudioFrame(sample, 0);
demuxer->shouldCheckAudioFramePts_ = true;
demuxer->CheckDropAudioFrame(sample, 0);
demuxer->lastAudioPts_ = NUMBER_100 - 1;
demuxer->CheckDropAudioFrame(sample, 0);
demuxer->subtitleTrackId_ = 1;
demuxer->shouldCheckSubtitleFramePts_ = false;
demuxer->CheckDropAudioFrame(sample, 1);
demuxer->shouldCheckSubtitleFramePts_ = true;
demuxer->lastSubtitlePts_ = NUMBER_100 + 1;
demuxer->CheckDropAudioFrame(sample, 1);
demuxer->lastSubtitlePts_ = NUMBER_100 - 1;
demuxer->CheckDropAudioFrame(sample, 1);
demuxer->CheckDropAudioFrame(sample, NUMBER_2);
demuxer->videoTrackId_ = 1;
demuxer->isDecodeOptimizationEnabled_ = true;
uint8_t* data = new uint8_t[NUMBER_100];
std::shared_ptr<AVBuffer> buffer = AVBuffer::CreateAVBuffer(data, NUMBER_100, NUMBER_100);
demuxer->framerate_ = NUMBER_FRAMERATE_1;
demuxer->speed_ = 1.0;
demuxer->decoderFramerateUpperLimit_ = NUMBER_100;
demuxer->IsBufferDroppable(buffer, 1);
demuxer->framerate_ = NUMBER_FRAMERATE_2;
demuxer->speed_ = 1.0;
demuxer->decoderFramerateUpperLimit_ = NUMBER_100;
demuxer->IsBufferDroppable(buffer, 1);
buffer->meta_->SetData(Media::Tag::VIDEO_BUFFER_CAN_DROP, true);
demuxer->IsBufferDroppable(buffer, 1);
delete[] data;
}
void FuzzTest34()
{
int32_t fd = open(DATA_PATH, O_RDONLY);
struct stat statBuffer;
if (fstat(fd, &statBuffer) == -1) {
perror("Error getting file status");
close(fd);
}
std::string uri = "fd://" + std::to_string(fd) + "?offset=0&size=" + std::to_string(statBuffer.st_size);
int32_t aTrackId = 1;
int32_t vTrackId = 0;
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetDataSource(std::make_shared<MediaSource>(uri));
std::shared_ptr<AVBufferQueue> inputBufferQueue =
AVBufferQueue::Create(NUMBER_8, MemoryType::SHARED_MEMORY, "testInputBufferQueue");
sptr<AVBufferQueueProducer> inputBufferQueueProducer = inputBufferQueue->GetProducer();
demuxer->SetOutputBufferQueue(aTrackId, inputBufferQueueProducer);
demuxer->demuxerPluginManager_->isDash_ = true;
demuxer->SetDumpInfo(true, 0);
demuxer->isDecodeOptimizationEnabled_ = true;
std::shared_ptr<AVBuffer> aBuffer = AVBuffer::CreateAVBuffer();
std::shared_ptr<AVBuffer> vBuffer = AVBuffer::CreateAVBuffer();
demuxer->bufferMap_[aTrackId] = aBuffer;
demuxer->bufferMap_[vTrackId] = vBuffer;
vBuffer->meta_->SetData(Media::Tag::VIDEO_BUFFER_CAN_DROP, true);
close(fd);
}
void FuzzTest35()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock = std::make_shared<DemuxerPluginMock>("StatusErrorUnknown");
demuxer->audioTrackId_ = 1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[0].streamID = 0;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[1].streamID = 1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[NUMBER_2].streamID = NUMBER_2;
demuxer->demuxerPluginManager_->streamInfoMap_[0].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[1].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_2].plugin = pluginMock;
uint64_t relativePresentationTimeUs = 0;
demuxer->GetRelativePresentationTimeUsByIndex(0, 0, relativePresentationTimeUs);
}
void FuzzTest37()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
std::vector<uint8_t> val{0, 0};
std::multimap<std::string, std::vector<uint8_t>> info;
info.insert(std::pair<std::string, std::vector<uint8_t>>("key", val));
demuxer->localDrmInfos_ = info;
demuxer->HandleSourceDrmInfoEvent(info);
}
void FuzzTest38()
{
std::shared_ptr<DemuxerPluginManager> demuxerManager = std::make_shared<DemuxerPluginManager>();
demuxerManager->curSubTitleStreamID_ = 0;
demuxerManager->AddExternalSubtitle();
Meta metaTmp1;
metaTmp1.Set<Tag::MIME_TYPE>("audio/xxx");
demuxerManager->curMediaInfo_.tracks.push_back(metaTmp1);
Meta metaTmp2;
metaTmp2.Set<Tag::MIME_TYPE>("video/xxx");
demuxerManager->curMediaInfo_.tracks.push_back(metaTmp2);
Meta metaTmp3;
metaTmp3.Set<Tag::MIME_TYPE>("text/vtt");
demuxerManager->curMediaInfo_.tracks.push_back(metaTmp3);
Meta metaTmp4;
metaTmp4.Set<Tag::MIME_TYPE>("aaaa");
demuxerManager->curMediaInfo_.tracks.push_back(metaTmp4);
demuxerManager->GetTrackTypeByTrackID(0);
demuxerManager->GetTrackTypeByTrackID(1);
demuxerManager->GetTrackTypeByTrackID(NUMBER_2);
demuxerManager->GetTrackTypeByTrackID(NUMBER_3);
demuxerManager->IsSubtitleMime("application/x-subrip");
demuxerManager->IsSubtitleMime("text/vtt");
demuxerManager->IsSubtitleMime("aaaaa");
}
void FuzzTest39()
{
std::shared_ptr<DemuxerPluginManager> demuxerManager = std::make_shared<DemuxerPluginManager>();
Plugins::MediaInfo mediaInfo;
demuxerManager->UpdateDefaultStreamID(mediaInfo, AUDIO, 1);
demuxerManager->UpdateDefaultStreamID(mediaInfo, SUBTITLE, 1);
demuxerManager->UpdateDefaultStreamID(mediaInfo, VIDEO, 1);
}
void FuzzTest40()
{
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock = std::make_shared<DemuxerPluginMock>("StatusErrorUnknown");
std::shared_ptr<DemuxerPluginManager> demuxerManager = std::make_shared<DemuxerPluginManager>();
demuxerManager->needResetEosStatus_ = true;
MediaStreamInfo info1;
info1.plugin = pluginMock;
demuxerManager->streamInfoMap_[0] = info1;
MediaStreamInfo info2;
info2.plugin = pluginMock;
demuxerManager->streamInfoMap_[1] = info1;
MediaStreamInfo info3;
info3.plugin = pluginMock;
demuxerManager->streamInfoMap_[NUMBER_2] = info1;
demuxerManager->curVideoStreamID_ = 0;
demuxerManager->curAudioStreamID_ = -1;
demuxerManager->curSubTitleStreamID_ = -1;
demuxerManager->Start();
demuxerManager->Stop();
demuxerManager->Reset();
demuxerManager->Flush();
int64_t realSeekTime;
demuxerManager->SeekTo(1, Plugins::SeekMode::SEEK_PREVIOUS_SYNC, realSeekTime);
}
void FuzzTest41()
{
std::shared_ptr<DemuxerPluginManager> demuxerManager = std::make_shared<DemuxerPluginManager>();
std::string pluginName = "avdemux_mov,mp4,m4a,3gp,3g2,mj2";
MediaStreamInfo info;
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock =
std::make_shared<DemuxerPluginSetDataSourceFailMock<0>>("StatusOK");
info.plugin = pluginMock;
info.pluginName = pluginName;
demuxerManager->streamInfoMap_[0] = info;
std::shared_ptr<StreamDemuxer> streamDemuxer = std::make_shared<StreamDemuxerMock>();
std::thread initPluginThread([demuxerManager, streamDemuxer, pluginName]() {
demuxerManager->InitPlugin(streamDemuxer, pluginName, 0);
});
initPluginThread.join();
}
void FuzzTest45()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->source_->seekToTimeFlag_ = true;
demuxer->videoTrackId_ = 0;
demuxer->demuxerPluginManager_->isDash_ = false;
std::shared_ptr<AVBuffer> sample = std::make_shared<AVBuffer>();
sample->pts_ = NUMBER_100;
demuxer->DoSelectTrack(0, MediaDemuxer::TRACK_ID_INVALID);
}
void FuzzTest46()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->HandleSegmentMediaSelectTrack(0);
Meta metaTmp1;
metaTmp1.Set<Tag::MIME_TYPE>("audio/xxx");
demuxer->demuxerPluginManager_->curMediaInfo_.tracks.push_back(metaTmp1);
Meta metaTmp2;
metaTmp2.Set<Tag::MIME_TYPE>("video/xxx");
demuxer->demuxerPluginManager_->curMediaInfo_.tracks.push_back(metaTmp2);
Meta metaTmp3;
metaTmp3.Set<Tag::MIME_TYPE>("text/vtt");
demuxer->demuxerPluginManager_->curMediaInfo_.tracks.push_back(metaTmp3);
Meta metaTmp4;
metaTmp4.Set<Tag::MIME_TYPE>("aaaaa");
demuxer->demuxerPluginManager_->curMediaInfo_.tracks.push_back(metaTmp4);
demuxer->demuxerPluginManager_->AddTrackMapInfo(0, 0);
demuxer->demuxerPluginManager_->AddTrackMapInfo(1, 0);
demuxer->demuxerPluginManager_->AddTrackMapInfo(NUMBER_2, 0);
demuxer->demuxerPluginManager_->AddTrackMapInfo(NUMBER_3, 0);
demuxer->audioTrackId_ = 0;
demuxer->videoTrackId_ = 1;
demuxer->subtitleTrackId_ = NUMBER_2;
demuxer->HandleSegmentMediaSelectTrack(0);
demuxer->HandleSegmentMediaSelectTrack(1);
demuxer->HandleSegmentMediaSelectTrack(NUMBER_2);
demuxer->HandleSegmentMediaSelectTrack(NUMBER_3);
}
void FuzzTest47()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->audioTrackId_ = 0;
demuxer->videoTrackId_ = 0;
demuxer->subtitleTrackId_ = 0;
demuxer->demuxerPluginManager_->isDash_ = false;
demuxer->SeekToTimeAfter();
demuxer->demuxerPluginManager_->isDash_ = true;
demuxer->isSelectBitRate_ = true;
demuxer->SeekToTimeAfter();
}
void FuzzTest48()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
std::shared_ptr<AVBuffer> sample = std::make_shared<AVBuffer>();
sample->pts_ = NUMBER_100;
demuxer->audioTrackId_ = 0;
demuxer->subtitleTrackId_ = NUMBER_2;
demuxer->shouldCheckAudioFramePts_ = true;
demuxer->lastAudioPts_ = NUMBER_200;
demuxer->CheckDropAudioFrame(sample, 0);
demuxer->shouldCheckAudioFramePts_ = false;
demuxer->CheckDropAudioFrame(sample, NUMBER_2);
demuxer->lastSubtitlePts_ = NUMBER_200;
demuxer->shouldCheckAudioFramePts_ = true;
demuxer->CheckDropAudioFrame(sample, NUMBER_2);
demuxer->IsVideoEos();
demuxer->videoTrackId_ = 0;
demuxer->eosMap_[0] = true;
demuxer->IsVideoEos();
demuxer->IsRenderNextVideoFrameSupported();
demuxer->ResumeDragging();
}
void FuzzTest49()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->streamDemuxer_->SetNewAudioStreamID(0);
demuxer->streamDemuxer_->SetNewVideoStreamID(1);
demuxer->streamDemuxer_->SetNewSubtitleStreamID(NUMBER_2);
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock = std::make_shared<DemuxerPluginMock>("StatusErrorUnknown");
demuxer->audioTrackId_ = 0;
demuxer->videoTrackId_ = 1;
demuxer->subtitleTrackId_ = NUMBER_2;
Meta metaTmp1;
metaTmp1.Set<Tag::MIME_TYPE>("audio/xxx");
demuxer->demuxerPluginManager_->curMediaInfo_.tracks.push_back(metaTmp1);
Meta metaTmp2;
metaTmp2.Set<Tag::MIME_TYPE>("video/xxx");
demuxer->demuxerPluginManager_->curMediaInfo_.tracks.push_back(metaTmp2);
Meta metaTmp3;
metaTmp3.Set<Tag::MIME_TYPE>("text/vtt");
demuxer->demuxerPluginManager_->curMediaInfo_.tracks.push_back(metaTmp3);
Meta metaTmp4;
metaTmp4.Set<Tag::MIME_TYPE>("aaaa");
demuxer->demuxerPluginManager_->curMediaInfo_.tracks.push_back(metaTmp4);
demuxer->SelectTrackChangeStream(NUMBER_5);
demuxer->demuxerPluginManager_->AddTrackMapInfo(0, 0);
demuxer->demuxerPluginManager_->AddTrackMapInfo(1, 0);
demuxer->demuxerPluginManager_->AddTrackMapInfo(NUMBER_2, 0);
MediaStreamInfo info1;
info1.plugin = pluginMock;
info1.streamID = 0;
info1.type = StreamType::AUDIO;
demuxer->demuxerPluginManager_->streamInfoMap_[0] = info1;
MediaStreamInfo info2;
info2.plugin = pluginMock;
info2.streamID = 1;
info2.type = StreamType::VIDEO;
demuxer->demuxerPluginManager_->streamInfoMap_[1] = info2;
MediaStreamInfo info3;
info3.plugin = pluginMock;
info3.streamID = NUMBER_2;
info3.type = StreamType::SUBTITLE;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_2] = info3;
demuxer->SelectTrackChangeStream(0);
}
void FuzzTest50()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->source_->plugin_ = std::make_shared<SourcePluginMock>("StatusOK");
demuxer->demuxerPluginManager_->isDash_ = true;
demuxer->streamDemuxer_->changeStreamFlag_ = false;
demuxer->SelectBitRate(1);
std::shared_ptr<Meta> meta1 = std::make_shared<Meta>();
demuxer->mediaMetaData_.trackMetas.push_back(meta1);
demuxer->mediaMetaData_.trackMetas.push_back(meta1);
demuxer->mediaMetaData_.trackMetas.push_back(meta1);
demuxer->mediaMetaData_.trackMetas.push_back(meta1);
demuxer->mediaMetaData_.trackMetas.push_back(meta1);
demuxer->videoTrackId_ = NUMBER_2;
demuxer->useBufferQueue_ = true;
demuxer->SelectBitRate(NUMBER_3);
std::vector<uint32_t> bitRates;
demuxer->GetBitRates(bitRates);
demuxer->source_ = nullptr;
int64_t durationMs;
demuxer->GetDuration(durationMs);
}
void FuzzTest51()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->videoTrackId_ = 1;
demuxer->StartReferenceParser(1, false);
demuxer->demuxerPluginManager_ = nullptr;
demuxer->StartReferenceParser(1, false);
demuxer->videoTrackId_ = MediaDemuxer::TRACK_ID_INVALID;
demuxer->StartReferenceParser(1, false);
demuxer->source_ = nullptr;
demuxer->StartReferenceParser(1, false);
demuxer->StartReferenceParser(-1, false);
}
void FuzzTest52()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock = std::make_shared<DemuxerPluginMock>("StatusErrorUnknown");
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock1 = std::make_shared<DemuxerPluginMock>("StatusOK");
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[0].streamID = 0;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[1].streamID = 1;
demuxer->demuxerPluginManager_->temp2TrackInfoMap_[NUMBER_2].streamID = NUMBER_2;
demuxer->demuxerPluginManager_->streamInfoMap_[0].plugin = nullptr;
demuxer->demuxerPluginManager_->streamInfoMap_[1].plugin = pluginMock;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_2].plugin = pluginMock1;
demuxer->videoTrackId_ = 0;
demuxer->StartReferenceParser(1, false);
demuxer->videoTrackId_ = 1;
demuxer->StartReferenceParser(1, false);
demuxer->videoTrackId_ = NUMBER_2;
demuxer->isFirstParser_ = true;
demuxer->StartReferenceParser(1, false);
}
void FuzzTest53()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
FrameLayerInfo frameLayerInfo;
demuxer->GetFrameLayerInfo(nullptr, frameLayerInfo);
std::shared_ptr<AVBuffer> sample = std::make_shared<AVBuffer>();
demuxer->demuxerPluginManager_ = nullptr;
demuxer->GetFrameLayerInfo(sample, frameLayerInfo);
demuxer->source_ = nullptr;
demuxer->GetFrameLayerInfo(sample, frameLayerInfo);
}
void FuzzTest54()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
std::shared_ptr<Plugins::DemuxerPlugin> pluginMock1 = std::make_shared<DemuxerPluginMock>("StatusOK");
demuxer->demuxerPluginManager_->curVideoStreamID_ = 0;
demuxer->demuxerPluginManager_->curAudioStreamID_ = 1;
demuxer->demuxerPluginManager_->curSubTitleStreamID_ = NUMBER_2;
demuxer->demuxerPluginManager_->streamInfoMap_[0].plugin = pluginMock1;
demuxer->demuxerPluginManager_->streamInfoMap_[0].type = StreamType::VIDEO;
demuxer->demuxerPluginManager_->streamInfoMap_[1].plugin = pluginMock1;
demuxer->demuxerPluginManager_->streamInfoMap_[1].type = StreamType::AUDIO;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_2].plugin = pluginMock1;
demuxer->demuxerPluginManager_->streamInfoMap_[NUMBER_2].type = StreamType::SUBTITLE;
demuxer->SetCacheLimit(NUMBER_10);
demuxer->demuxerPluginManager_->AddTrackMapInfo(0, 0);
demuxer->demuxerPluginManager_->AddTrackMapInfo(1, 0);
demuxer->demuxerPluginManager_->AddTrackMapInfo(NUMBER_2, 0);
demuxer->demuxerPluginManager_->GetStreamTypeByTrackID(0);
}
void FuzzTest55()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
demuxer->SetIsTriggerAutoMode(false);
demuxer->SetIsTriggerAutoMode(true);
demuxer->SetPlayStrategy(nullptr);
auto playStrategy = std::make_shared<PlayStrategy>();
playStrategy->audioLanguage = "en";
playStrategy->subtitleLanguage = "zh";
playStrategy->preferHDR = true;
playStrategy->width = NUMBER_1920;
playStrategy->height = NUMBER_1080;
demuxer->SetPlayStrategy(playStrategy);
auto invalidPlayStrategy = std::make_shared<PlayStrategy>();
invalidPlayStrategy->width = NUMBER_65536;
invalidPlayStrategy->height = NUMBER_65536;
demuxer->SetPlayStrategy(invalidPlayStrategy);
}
void FuzzTest56()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
std::shared_ptr<Source> source = std::make_shared<Source>();
std::shared_ptr<SourcePluginMock> pluginMock = std::make_shared<SourcePluginMock>("StatusOK");
StreamInfo videoStream;
videoStream.streamId = NUMBER_10;
videoStream.type = StreamType::VIDEO;
videoStream.bitRate = NUMBER_1500;
videoStream.frameRate = NUMBER_30;
videoStream.mimeType = "video/avc";
videoStream.codecs = "video/avc";
videoStream.originCodecs = "avc1.64001f";
videoStream.videoWidth = NUMBER_1280;
videoStream.videoHeight = NUMBER_720;
StreamInfo audioStream;
audioStream.streamId = NUMBER_11;
audioStream.type = StreamType::AUDIO;
audioStream.bitRate = NUMBER_256;
audioStream.channels = NUMBER_2;
audioStream.mimeType = "audio/aac";
audioStream.codecs = "audio/aac";
audioStream.originCodecs = "mp4a.40.2";
audioStream.lang = "en";
StreamInfo subtitleStream;
subtitleStream.streamId = NUMBER_12;
subtitleStream.type = StreamType::SUBTITLE;
subtitleStream.lang = "zh";
pluginMock->streams_ = {videoStream, audioStream, subtitleStream};
source->plugin_ = pluginMock;
demuxer->source_ = source;
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->isPrepared_.store(true);
int32_t defaultVideoStreamId = videoStream.streamId;
int32_t defaultAudioStreamId = audioStream.streamId;
int32_t defaultSubtitleStreamId = subtitleStream.streamId;
source->SetDefaultStreamId(defaultVideoStreamId, defaultAudioStreamId, defaultSubtitleStreamId);
TrackSelectionFilter filter;
filter.preferredVideoMimeTypes.push_back("video/avc");
filter.preferredAudioLanguages.push_back("en");
filter.preferredSubtitleLanguages.push_back("zh");
demuxer->trackSelectionFilter_ = filter;
demuxer->OnEvent({Plugins::PluginEventType::STREAM_UPDATE, std::string("hls"), "STREAM_UPDATE"});
demuxer->OnEvent({Plugins::PluginEventType::NETWORK_BITRATE_CHANGED, static_cast<uint32_t>(4096),
"NETWORK_BITRATE_CHANGED"});
demuxer->OnEvent({Plugins::PluginEventType::STREAM_UPDATE, 1, "STREAM_UPDATE_INVALID"});
demuxer->OnEvent({Plugins::PluginEventType::NETWORK_BITRATE_CHANGED, std::string("invalid"),
"NETWORK_BITRATE_CHANGED_INVALID"});
}
void FuzzTest57()
{
std::shared_ptr<MediaDemuxer> demuxer = std::make_shared<MediaDemuxer>();
std::shared_ptr<Source> source = std::make_shared<Source>();
std::shared_ptr<SourcePluginMock> pluginMock = std::make_shared<SourcePluginMock>("StatusOK");
StreamInfo videoStream;
videoStream.streamId = NUMBER_21;
videoStream.type = StreamType::VIDEO;
videoStream.bitRate = NUMBER_1800;
videoStream.frameRate = NUMBER_60;
videoStream.mimeType = "video/hevc";
videoStream.codecs = "video/hevc";
videoStream.originCodecs = "hvc1.1.6.L93";
videoStream.videoWidth = NUMBER_1920;
videoStream.videoHeight = NUMBER_1080;
StreamInfo audioStream;
audioStream.streamId = NUMBER_22;
audioStream.type = StreamType::AUDIO;
audioStream.bitRate = NUMBER_320;
audioStream.channels = NUMBER_2;
audioStream.mimeType = "audio/aac";
audioStream.codecs = "audio/aac";
audioStream.originCodecs = "mp4a.40.2";
audioStream.lang = "en";
StreamInfo subtitleStream;
subtitleStream.streamId = NUMBER_23;
subtitleStream.type = StreamType::SUBTITLE;
subtitleStream.lang = "zh";
pluginMock->streams_ = {videoStream, audioStream, subtitleStream};
source->plugin_ = pluginMock;
demuxer->source_ = source;
demuxer->streamDemuxer_ = std::make_shared<StreamDemuxer>();
demuxer->isPrepared_.store(true);
demuxer->currentPlayType_ = "hls";
TrackSelectionFilter filter;
filter.preferredVideoMimeTypes.push_back("video/hevc");
filter.preferredAudioMimeTypes.push_back("audio/aac");
filter.preferredAudioLanguages.push_back("en");
filter.preferredSubtitleLanguages.push_back("zh");
filter.minVideoFrameRate = NUMBER_24;
filter.maxAudioChannels = NUMBER_2;
demuxer->SetTrackSelectionFilter(filter);
demuxer->SelectStreamId(-1);
demuxer->SelectStreamId(audioStream.streamId);
demuxer->currentPlayType_ = "http";
demuxer->SetTrackSelectionFilter(filter);
demuxer->demuxerPluginManager_->isDash_ = true;
demuxer->streamDemuxer_->changeStreamFlag_ = false;
demuxer->SelectStreamId(videoStream.streamId);
}
}
}
extern "C" int LLVMFuzzerTestOneInput(uint8_t* data, size_t size)
{
OHOS::Media::RunMediaDemuxerFuzz(data, size);
return 0;
}