Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 8 additions & 11 deletions src/dataUnit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@

namespace MmtTlv {

bool DataUnit::unpack(Common::ReadStream& stream, bool timedFlag, bool aggregateFlag) {
try {
bool DataUnit::unpack(Common::ReadStream& stream, bool timedFlag, bool aggregateFlag) {
try {
data = {};
if (timedFlag) {
if (aggregateFlag == 0) {
movieFragmentSequenceNumber = stream.getBe32U();
Expand All @@ -12,8 +13,7 @@ bool DataUnit::unpack(Common::ReadStream& stream, bool timedFlag, bool aggregate
priority = stream.get8U();
dependencyCounter = stream.get8U();

data.resize(stream.leftBytes());
stream.read(data.data(), stream.leftBytes());
data = stream.readView(stream.leftBytes());
}
else {
dataUnitLength = stream.getBe16U();
Expand All @@ -29,22 +29,19 @@ bool DataUnit::unpack(Common::ReadStream& stream, bool timedFlag, bool aggregate
return false;
}

data.resize(dataUnitLength - 4 * 3 - 2);
stream.read(data.data(), dataUnitLength - 4 * 3 - 2);
data = stream.readView(dataUnitLength - 4 * 3 - 2);
}
}
else {
if (aggregateFlag == 0) {
itemId = stream.getBe32U();

data.resize(stream.leftBytes());
stream.read(data.data(), stream.leftBytes());
data = stream.readView(stream.leftBytes());
}
else {
dataUnitLength = stream.getBe16U();

data.resize(dataUnitLength);
stream.read(data.data(), dataUnitLength);
data = stream.readView(dataUnitLength);
}
}
}
Expand All @@ -55,4 +52,4 @@ bool DataUnit::unpack(Common::ReadStream& stream, bool timedFlag, bool aggregate
return true;
}

}
}
6 changes: 3 additions & 3 deletions src/dataUnit.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#pragma once
#include <vector>
#include <span>
#include "stream.h"

namespace MmtTlv {
Expand All @@ -15,7 +15,7 @@ class DataUnit {
uint8_t priority;
uint8_t dependencyCounter;
uint32_t itemId;
std::vector<uint8_t> data;
std::span<const uint8_t> data;
};

}
}
4 changes: 2 additions & 2 deletions src/fragmentAssembler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace MmtTlv {

bool FragmentAssembler::assemble(const std::vector<uint8_t>& fragment, FragmentationIndicator fragmentationIndicator, uint32_t packetSequenceNumber) {
bool FragmentAssembler::assemble(std::span<const uint8_t> fragment, FragmentationIndicator fragmentationIndicator, uint32_t packetSequenceNumber) {
switch (fragmentationIndicator) {
case FragmentationIndicator::NotFragmented:
if (state == State::InFragment) {
Expand Down Expand Up @@ -104,4 +104,4 @@ void FragmentValidator::clear() {
state = State::NotStarted;
}

}
}
7 changes: 4 additions & 3 deletions src/fragmentAssembler.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once
#include <vector>
#include <vector>
#include <span>
#include <cstdint>
#include "mmtFragment.h"

Expand All @@ -24,7 +25,7 @@ class FragmentValidator {

class FragmentAssembler {
public:
bool assemble(const std::vector<uint8_t>& fragment, FragmentationIndicator fragmentationIndicator, uint32_t packetSequenceNumber);
bool assemble(std::span<const uint8_t> fragment, FragmentationIndicator fragmentationIndicator, uint32_t packetSequenceNumber);
void checkState(uint32_t packetSequenceNumber);
void clear();

Expand All @@ -41,4 +42,4 @@ class FragmentAssembler {
uint32_t last_seq = 0;
};

}
}
12 changes: 5 additions & 7 deletions src/mmtTlvDemuxer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -792,18 +792,16 @@ void MmtTlvDemuxer::processMpu(Common::ReadStream& stream) {
}
}

void MmtTlvDemuxer::processMfuData(Common::ReadStream& stream) {
void MmtTlvDemuxer::processMfuData(Common::ReadStream& stream) {
MmtStream* mmtStream = getStream(mmtp.packetId);
auto validator = getFragmentValidator(mmtp.packetId);

if (!mmtStream->mpuProcessor) {
return;
}

std::vector<uint8_t> data(stream.leftBytes());
stream.read(data.data(), stream.leftBytes());

const auto ret = mmtStream->mpuProcessor->process(*mmtStream, data, mpu.fragmentationIndicator);
const auto data = stream.readView(stream.leftBytes());
const auto ret = mmtStream->mpuProcessor->process(*mmtStream, data, mpu.fragmentationIndicator);
if (ret) {
const auto& mfuData = ret.value();
auto* mmtStream = getStreamByIdx(mfuData.streamIndex);
Expand Down Expand Up @@ -864,7 +862,7 @@ void MmtTlvDemuxer::processSignalingMessages(Common::ReadStream& stream) {

std::vector<uint8_t> message;
message.resize(length);
stream.read(message.data(), length);
nstream.read(message.data(), length);

if (assembler->assemble(message, signalingMessage.fragmentationIndicator, mmtp.packetSequenceNumber)) {
Common::ReadStream messageStream(assembler->data);
Expand Down Expand Up @@ -913,4 +911,4 @@ bool MmtTlvDemuxer::isValidTlv(Common::ReadStream& stream) const {
return true;
}

}
}
5 changes: 2 additions & 3 deletions src/mpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ bool Mpu::unpack(Common::ReadStream& stream)
fragmentCounter = stream.get8U();
mpuSequenceNumber = stream.getBe32U();

payload.resize(payloadLength - 6);
stream.read(payload.data(), payloadLength - 6);
payload = stream.readView(payloadLength - 6);

}
catch (const std::out_of_range&) {
Expand All @@ -29,4 +28,4 @@ bool Mpu::unpack(Common::ReadStream& stream)
return true;
}

}
}
4 changes: 2 additions & 2 deletions src/mpu.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#pragma once
#include <vector>
#include <span>
#include "stream.h"
#include "mmtFragment.h"

Expand All @@ -16,7 +16,7 @@ class Mpu {
bool aggregateFlag;
uint8_t fragmentCounter;
uint32_t mpuSequenceNumber;
std::vector<uint8_t> payload;
std::span<const uint8_t> payload;
};

}
4 changes: 2 additions & 2 deletions src/mpuApplicationProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace MmtTlv {

std::optional<MfuData> MpuApplicationProcessor::process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) {
std::optional<MfuData> MpuApplicationProcessor::process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) {
Common::ReadStream stream(data);
size_t size = stream.leftBytes();
if (size == 0) {
Expand All @@ -19,4 +19,4 @@ std::optional<MfuData> MpuApplicationProcessor::process(MmtStream& mmtStream, co
return mfuData;
}

}
}
4 changes: 2 additions & 2 deletions src/mpuApplicationProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ namespace MmtTlv {

class MpuApplicationProcessor : public MpuProcessorTemplate<AssetType::aapp> {
public:
std::optional<MfuData> process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) override;
std::optional<MfuData> process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) override;

};

}
}
4 changes: 2 additions & 2 deletions src/mpuAudioProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace MmtTlv {

constexpr int MAX_AAC_FRAME_SIZE = 1024 * 10;

std::optional<MfuData> MpuAudioProcessor::process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) {
std::optional<MfuData> MpuAudioProcessor::process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) {
aacFragment.insert(aacFragment.end(), data.begin(), data.end());

MfuData mfuData;
Expand Down Expand Up @@ -81,4 +81,4 @@ void MpuAudioProcessor::clear() {
aacFragment.clear();
}

}
}
4 changes: 2 additions & 2 deletions src/mpuAudioProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace MmtTlv {

class MpuAudioProcessor : public MpuProcessorTemplate<AssetType::mp4a> {
public:
std::optional<MfuData> process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) override;
std::optional<MfuData> process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) override;
void clear() override;

private:
Expand All @@ -15,4 +15,4 @@ class MpuAudioProcessor : public MpuProcessorTemplate<AssetType::mp4a> {

};

}
}
7 changes: 4 additions & 3 deletions src/mpuProcessorBase.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#pragma once
#include <vector>
#include <optional>
#include <memory>
#include <memory>
#include <span>
#include "mmtp.h"
#include "dataUnit.h"
#include "mpu.h"
Expand Down Expand Up @@ -36,7 +37,7 @@ class MmtStream;
class MpuProcessorBase {
public:
virtual ~MpuProcessorBase() = default;
virtual std::optional<MfuData> process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) { return std::nullopt; }
virtual std::optional<MfuData> process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) { return std::nullopt; }
virtual void clear() {}

};
Expand All @@ -50,4 +51,4 @@ class MpuProcessorTemplate : public MpuProcessorBase {

};

}
}
4 changes: 2 additions & 2 deletions src/mpuSubtitleProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace MmtTlv {

std::optional<MfuData> MpuSubtitleProcessor::process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) {
std::optional<MfuData> MpuSubtitleProcessor::process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) {
Common::ReadStream stream(data);

uint16_t subsampleNumber = stream.getBe16U();
Expand Down Expand Up @@ -50,4 +50,4 @@ std::optional<MfuData> MpuSubtitleProcessor::process(MmtStream& mmtStream, const
return mfuData;
}

}
}
4 changes: 2 additions & 2 deletions src/mpuSubtitleProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ namespace MmtTlv {

class MpuSubtitleProcessor : public MpuProcessorTemplate<AssetType::stpp> {
public:
std::optional<MfuData> process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) override;
std::optional<MfuData> process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) override;

private:
std::vector<uint8_t> pendingData;
};

}
}
4 changes: 2 additions & 2 deletions src/mpuVideoProcessor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ constexpr uint8_t CRA_NUT = 0x15;
constexpr uint8_t NAL_AUD = 0x23;
constexpr uint32_t MAX_NAL_SIZE = 1024 * 1024;

std::optional<MfuData> MpuVideoProcessor::process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) {
std::optional<MfuData> MpuVideoProcessor::process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) {
Common::ReadStream stream(data);
MfuData mfuData;

Expand Down Expand Up @@ -89,4 +89,4 @@ void MpuVideoProcessor::clear() {

}

}
}
4 changes: 2 additions & 2 deletions src/mpuVideoProcessor.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ namespace MmtTlv {

class MpuVideoProcessor : public MpuProcessorTemplate<AssetType::hev1> {
public:
std::optional<MfuData> process(MmtStream& mmtStream, const std::vector<uint8_t>& data, FragmentationIndicator fragmentationIndicator) override;
std::optional<MfuData> process(MmtStream& mmtStream, std::span<const uint8_t> data, FragmentationIndicator fragmentationIndicator) override;
void clear();

private:
Expand All @@ -18,4 +18,4 @@ class MpuVideoProcessor : public MpuProcessorTemplate<AssetType::hev1> {

};

}
}
27 changes: 14 additions & 13 deletions src/stream.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,31 @@

namespace MmtTlv {

namespace Common {

ReadStream::ReadStream(const std::vector<uint8_t>& buffer)
: buffer(buffer)
{
this->hasSize = true;
this->size = buffer.size();
}
namespace Common {

ReadStream::ReadStream(std::span<const uint8_t> buffer)
: buffer(buffer), hasSize(true), size(buffer.size())
{
}

ReadStream::ReadStream(const std::vector<uint8_t>& buffer)
: ReadStream(std::span<const uint8_t>(buffer)) {}

ReadStream::ReadStream(const std::vector<uint8_t>& buffer, size_t size)
: buffer(buffer)
: buffer(buffer)
{
if (buffer.size() < size) {
if (this->buffer.size() < size) {
throw std::out_of_range("Access out of bounds");
}

this->hasSize = true;
this->size = size;
}

ReadStream::ReadStream(ReadStream& stream, size_t size)
ReadStream::ReadStream(ReadStream& stream, size_t size)
: buffer(stream.buffer)
{
if (stream.buffer.size() < stream.pos + size) {
if (stream.size < stream.pos + size) {
throw std::out_of_range("Access out of bounds");
}

Expand All @@ -44,4 +45,4 @@ ReadStream::ReadStream(ReadStream& stream)

}

}
}
Loading
Loading