1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00
srs/trunk/src/utest/srs_utest_kernel.hpp
Mr. Li b352fd0cfe Fix RBSP issue, where 0x03 should be removed. v5.0.178 (#3597)
ISO_IEC_14496-10-AVC-2012.pdf, page 65
7.4.1.1 Encapsulation of an SODB within an RBSP (informative)

... 00 00 03 xx, the 03 byte should be drop where xx represents any 2
bit pattern: 00, 01, 10, or 11.

---------

Co-authored-by: john <hondaxiao@tencent.com>
Co-authored-by: chundonglinlin <chundonglinlin@163.com>
Co-authored-by: winlin <winlin@vip.126.com>
2023-09-09 11:15:30 +08:00

162 lines
3.7 KiB
C++

//
// Copyright (c) 2013-2023 The SRS Authors
//
// SPDX-License-Identifier: MIT or MulanPSL-2.0
//
#ifndef SRS_UTEST_KERNEL_HPP
#define SRS_UTEST_KERNEL_HPP
/*
#include <srs_utest_kernel.hpp>
*/
#include <srs_utest.hpp>
#include <string>
#include <vector>
#include <srs_kernel_file.hpp>
#include <srs_kernel_buffer.hpp>
#include <srs_protocol_stream.hpp>
#include <srs_kernel_ts.hpp>
#include <srs_kernel_ps.hpp>
#include <srs_kernel_stream.hpp>
#include <srs_kernel_utility.hpp>
class MockSrsFile
{
public:
SrsBuffer* _buf;
SrsSimpleStream _data;
public:
MockSrsFile();
virtual ~MockSrsFile();
public:
virtual srs_error_t open(std::string file);
virtual void close();
public:
virtual srs_error_t write(void* data, size_t count, ssize_t* pnwrite);
virtual srs_error_t read(void* data, size_t count, ssize_t* pnread);
virtual srs_error_t lseek(off_t offset, int whence, off_t* seeked);
};
class MockFileRemover
{
private:
std::string path_;
public:
MockFileRemover(std::string p);
virtual ~MockFileRemover();
};
class MockSrsFileWriter : public SrsFileWriter
{
public:
MockSrsFile* uf;
srs_error_t err;
// Error if exceed this offset.
int error_offset;
// Whether opened.
bool opened;
public:
MockSrsFileWriter();
virtual ~MockSrsFileWriter();
public:
virtual srs_error_t open(std::string file);
virtual void close();
public:
virtual bool is_open();
virtual void seek2(int64_t offset);
virtual int64_t tellg();
virtual int64_t filesize();
virtual char* data();
virtual string str();
public:
virtual srs_error_t write(void* buf, size_t count, ssize_t* pnwrite);
virtual srs_error_t lseek(off_t offset, int whence, off_t* seeked);
// for mock
public:
void mock_reset_offset();
};
class MockSrsFileReader : public SrsFileReader
{
public:
MockSrsFile* uf;
bool opened;
// Could seek.
bool seekable;
public:
MockSrsFileReader();
MockSrsFileReader(const char* data, int nb_data);
virtual ~MockSrsFileReader();
public:
virtual srs_error_t open(std::string file);
virtual void close();
public:
virtual bool is_open();
virtual int64_t tellg();
virtual void skip(int64_t size);
virtual int64_t seek2(int64_t offset);
virtual int64_t filesize();
public:
virtual srs_error_t read(void* buf, size_t count, ssize_t* pnread);
virtual srs_error_t lseek(off_t offset, int whence, off_t* seeked);
// for mock
public:
// append data to current offset, modify the offset and size.
void mock_append_data(const char* _data, int _size);
void mock_reset_offset();
};
class MockBufferReader: public ISrsReader
{
private:
std::string str;
public:
MockBufferReader(const char* data);
virtual ~MockBufferReader();
public:
virtual srs_error_t read(void* buf, size_t size, ssize_t* nread);
};
class MockSrsCodec : public ISrsCodec
{
public:
MockSrsCodec();
virtual ~MockSrsCodec();
public:
virtual uint64_t nb_bytes();
virtual srs_error_t encode(SrsBuffer* buf);
virtual srs_error_t decode(SrsBuffer* buf);
};
class MockTsHandler : public ISrsTsHandler
{
public:
SrsTsMessage* msg;
public:
MockTsHandler();
virtual ~MockTsHandler();
public:
virtual srs_error_t on_ts_message(SrsTsMessage* m);
};
class MockPsHandler : public ISrsPsMessageHandler
{
public:
std::vector<SrsTsMessage*> msgs_;
public:
MockPsHandler();
virtual ~MockPsHandler();
public:
virtual srs_error_t on_ts_message(SrsTsMessage* m);
virtual void on_recover_mode(int nn_recover);
virtual void on_recover_done(srs_utime_t duration);
MockPsHandler* clear();
};
extern int srs_rbsp_remove_emulation_bytes(SrsBuffer* stream, std::vector<uint8_t>& rbsp);
#endif