Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: paullouisageneau/libdatachannel
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 615688f41307683c9a6d552b7b6a6153e5127f8c
Choose a base ref
..
head repository: paullouisageneau/libdatachannel
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: b2d45cd9ddf47a97e0a66192ad5cd930bca6cb02
Choose a head ref
Showing with 27 additions and 32 deletions.
  1. +1 −1 CMakeLists.txt
  2. +2 −5 include/rtc/{mediasample.hpp → frameinfo.hpp}
  3. +5 −5 include/rtc/message.hpp
  4. +1 −1 include/rtc/track.hpp
  5. +4 −4 src/h264rtpdepacketizer.cpp
  6. +7 −8 src/impl/track.cpp
  7. +2 −2 src/impl/track.hpp
  8. +3 −4 src/message.cpp
  9. +2 −2 src/track.cpp
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -99,7 +99,7 @@ set(LIBDATACHANNEL_HEADERS
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/common.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/global.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/message.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/mediasample.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/frameinfo.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/peerconnection.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/reliability.hpp
${CMAKE_CURRENT_SOURCE_DIR}/include/rtc/rtc.h
7 changes: 2 additions & 5 deletions include/rtc/mediasample.hpp → include/rtc/frameinfo.hpp
Original file line number Diff line number Diff line change
@@ -13,11 +13,8 @@

namespace rtc {

struct RTC_CPP_EXPORT MediaSample : binary {
MediaSample(uint32_t timestamp) : timestamp(timestamp){};
MediaSample(binary &&data, uint32_t timestamp)
: binary(std::move(data)), timestamp(timestamp){};

struct RTC_CPP_EXPORT FrameInfo {
FrameInfo(uint32_t timestamp) : timestamp(timestamp){};
uint32_t timestamp = 0; // RTP Timestamp
};

10 changes: 5 additions & 5 deletions include/rtc/message.hpp
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
#define RTC_MESSAGE_H

#include "common.hpp"
#include "mediasample.hpp"
#include "frameinfo.hpp"
#include "reliability.hpp"

#include <functional>
@@ -33,7 +33,7 @@ struct RTC_CPP_EXPORT Message : binary {
unsigned int stream = 0; // Stream id (SCTP stream or SSRC)
unsigned int dscp = 0; // Differentiated Services Code Point
shared_ptr<Reliability> reliability;
shared_ptr<MediaSample> media_sample;
shared_ptr<FrameInfo> frame_info;
};

using message_ptr = shared_ptr<Message>;
@@ -47,11 +47,11 @@ inline size_t message_size_func(const message_ptr &m) {
template <typename Iterator>
message_ptr make_message(Iterator begin, Iterator end, Message::Type type = Message::Binary,
unsigned int stream = 0, shared_ptr<Reliability> reliability = nullptr,
shared_ptr<MediaSample> media_sample = nullptr) {
shared_ptr<FrameInfo> frame_info = nullptr) {
auto message = std::make_shared<Message>(begin, end, type);
message->stream = stream;
message->reliability = reliability;
message->media_sample = media_sample;
message->frame_info = frame_info;
return message;
}

@@ -62,7 +62,7 @@ RTC_CPP_EXPORT message_ptr make_message(size_t size, Message::Type type = Messag
RTC_CPP_EXPORT message_ptr make_message(binary &&data, Message::Type type = Message::Binary,
unsigned int stream = 0,
shared_ptr<Reliability> reliability = nullptr,
shared_ptr<MediaSample> media_sample = nullptr);
shared_ptr<FrameInfo> frame_info = nullptr);

RTC_CPP_EXPORT message_ptr make_message(size_t size, message_ptr orig);

2 changes: 1 addition & 1 deletion include/rtc/track.hpp
Original file line number Diff line number Diff line change
@@ -41,7 +41,7 @@ class RTC_CPP_EXPORT Track final : private CheshireCat<impl::Track>, public Chan
bool isClosed(void) const override;
size_t maxMessageSize() const override;

void onMediaSample(std::function<void(MediaSample data)> callback);
void onFrame(std::function<void(binary data, FrameInfo frame)> callback);

bool requestKeyframe();
bool requestBitrate(unsigned int bitrate);
8 changes: 4 additions & 4 deletions src/h264rtpdepacketizer.cpp
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@ message_vector H264RtpDepacketizer::buildFrames(message_vector::iterator begin,
message_vector::iterator end, uint32_t timestamp) {
message_vector out = {};
auto fua_buffer = std::vector<std::byte>{};
auto media_sample = std::make_shared<MediaSample>(timestamp);
auto frame_info = std::make_shared<FrameInfo>(timestamp);

for (auto it = begin; it != end; it++) {
auto pkt = it->get();
@@ -60,12 +60,12 @@ message_vector H264RtpDepacketizer::buildFrames(message_vector::iterator begin,
std::byte(nalUnitHeader.idc() | nalUnitFragmentHeader.unitType());

out.push_back(
make_message(std::move(fua_buffer), Message::Binary, 0, nullptr, media_sample));
make_message(std::move(fua_buffer), Message::Binary, 0, nullptr, frame_info));
fua_buffer.clear();
}
} else if (nalUnitHeader.unitType() > 0 && nalUnitHeader.unitType() < 24) {
out.push_back(make_message(pkt->begin() + headerSize, pkt->end(), Message::Binary, 0,
nullptr, media_sample));
nullptr, frame_info));
} else if (nalUnitHeader.unitType() == naluTypeSTAPA) {
auto currOffset = stapaHeaderSize + headerSize;

@@ -81,7 +81,7 @@ message_vector H264RtpDepacketizer::buildFrames(message_vector::iterator begin,

out.push_back(make_message(pkt->begin() + currOffset,
pkt->begin() + currOffset + naluSize, Message::Binary, 0,
nullptr, media_sample));
nullptr, frame_info));
currOffset += naluSize;
}
} else {
15 changes: 7 additions & 8 deletions src/impl/track.cpp
Original file line number Diff line number Diff line change
@@ -216,7 +216,7 @@ void Track::setMediaHandler(shared_ptr<MediaHandler> handler) {
mMediaHandler = handler;
}

if(handler)
if (handler)
handler->media(description());
}

@@ -225,26 +225,25 @@ shared_ptr<MediaHandler> Track::getMediaHandler() {
return mMediaHandler;
}

void Track::onMediaSample(std::function<void(MediaSample data)> callback) {
mediaSampleCallback = callback;
void Track::onFrame(std::function<void(binary data, FrameInfo frame)> callback) {
frameCallback = callback;
flushPendingMessages();
}

void Track::flushPendingMessages() {
if (!mOpenTriggered)
return;

while (messageCallback || mediaSampleCallback) {
while (messageCallback || frameCallback) {
auto next = mRecvQueue.pop();
if (!next)
break;

auto message = next.value();
try {
if (message->media_sample != nullptr && mediaSampleCallback) {
mediaSampleCallback(
MediaSample(std::move(*message), message->media_sample->timestamp));
} else if (message->media_sample == nullptr && messageCallback) {
if (message->frame_info != nullptr && frameCallback) {
frameCallback(std::move(*message), std::move(*message->frame_info));
} else if (message->frame_info == nullptr && messageCallback) {
messageCallback(trackMessageToVariant(message));
}
} catch (const std::exception &e) {
4 changes: 2 additions & 2 deletions src/impl/track.hpp
Original file line number Diff line number Diff line change
@@ -41,7 +41,7 @@ class Track final : public std::enable_shared_from_this<Track>, public Channel {
void flushPendingMessages() override;
message_variant trackMessageToVariant(message_ptr message);

void onMediaSample(std::function<void(MediaSample data)> callback);
void onFrame(std::function<void(binary data, FrameInfo frame)> callback);

bool isOpen() const;
bool isClosed() const;
@@ -76,7 +76,7 @@ class Track final : public std::enable_shared_from_this<Track>, public Channel {

Queue<message_ptr> mRecvQueue;

synchronized_callback<MediaSample> mediaSampleCallback;
synchronized_callback<binary, FrameInfo> frameCallback;
};

} // namespace rtc::impl
7 changes: 3 additions & 4 deletions src/message.cpp
Original file line number Diff line number Diff line change
@@ -19,17 +19,16 @@ message_ptr make_message(size_t size, Message::Type type, unsigned int stream,
}

message_ptr make_message(binary &&data, Message::Type type, unsigned int stream,
shared_ptr<Reliability> reliability,
shared_ptr<MediaSample> media_sample) {
shared_ptr<Reliability> reliability, shared_ptr<FrameInfo> frame_info) {
auto message = std::make_shared<Message>(std::move(data), type);
message->stream = stream;
message->reliability = reliability;
message->media_sample = media_sample;
message->frame_info = frame_info;
return message;
}

message_ptr make_message(size_t size, message_ptr orig) {
if(!orig)
if (!orig)
return nullptr;

auto message = std::make_shared<Message>(size, orig->type);
4 changes: 2 additions & 2 deletions src/track.cpp
Original file line number Diff line number Diff line change
@@ -70,8 +70,8 @@ bool Track::requestBitrate(unsigned int bitrate) {

shared_ptr<MediaHandler> Track::getMediaHandler() { return impl()->getMediaHandler(); }

void Track::onMediaSample(std::function<void(MediaSample data)> callback) {
impl()->onMediaSample(callback);
void Track::onFrame(std::function<void(binary data, FrameInfo frame)> callback) {
impl()->onFrame(callback);
}

} // namespace rtc