Browse Source

Add track and user pointer to PLI handler callback in C API

Paul-Louis Ageneau 1 year ago
parent
commit
d75f231c58
2 changed files with 11 additions and 8 deletions
  1. 2 2
      include/rtc/rtc.h
  2. 9 6
      src/capi.cpp

+ 2 - 2
include/rtc/rtc.h

@@ -157,7 +157,7 @@ typedef void *(RTC_API *rtcInterceptorCallbackFunc)(int pc, const char *message,
                                                     void *ptr);
                                                     void *ptr);
 typedef void(RTC_API *rtcBufferedAmountLowCallbackFunc)(int id, void *ptr);
 typedef void(RTC_API *rtcBufferedAmountLowCallbackFunc)(int id, void *ptr);
 typedef void(RTC_API *rtcAvailableCallbackFunc)(int id, void *ptr);
 typedef void(RTC_API *rtcAvailableCallbackFunc)(int id, void *ptr);
-typedef void(RTC_API *rtcPliHandlerCallbackFunc)();
+typedef void(RTC_API *rtcPliHandlerCallbackFunc)(int tr, void *ptr);
 
 
 // Log
 // Log
 
 
@@ -371,7 +371,7 @@ RTC_C_EXPORT int rtcChainRtcpSrReporter(int tr);
 RTC_C_EXPORT int rtcChainRtcpNackResponder(int tr, unsigned int maxStoredPacketsCount);
 RTC_C_EXPORT int rtcChainRtcpNackResponder(int tr, unsigned int maxStoredPacketsCount);
 
 
 // Chain PliHandler to handler chain for given track
 // Chain PliHandler to handler chain for given track
-RTC_C_EXPORT int rtcChainPliHandler(int tr, rtcPliHandlerCallbackFunc onPli);
+RTC_C_EXPORT int rtcChainPliHandler(int tr, rtcPliHandlerCallbackFunc cb);
 
 
 // Transform seconds to timestamp using track's clock rate, result is written to timestamp
 // Transform seconds to timestamp using track's clock rate, result is written to timestamp
 RTC_C_EXPORT int rtcTransformSecondsToTimestamp(int id, double seconds, uint32_t *timestamp);
 RTC_C_EXPORT int rtcTransformSecondsToTimestamp(int id, double seconds, uint32_t *timestamp);

+ 9 - 6
src/capi.cpp

@@ -1319,7 +1319,7 @@ int rtcSetAACPacketizationHandler(int tr, const rtcPacketizationHandlerInit *ini
 }
 }
 
 
 int rtcChainRtcpSrReporter(int tr) {
 int rtcChainRtcpSrReporter(int tr) {
-	return wrap([tr] {
+	return wrap([&] {
 		auto config = getRtpConfig(tr);
 		auto config = getRtpConfig(tr);
 		auto reporter = std::make_shared<RtcpSrReporter>(config);
 		auto reporter = std::make_shared<RtcpSrReporter>(config);
 		emplaceRtcpSrReporter(reporter, tr);
 		emplaceRtcpSrReporter(reporter, tr);
@@ -1330,7 +1330,7 @@ int rtcChainRtcpSrReporter(int tr) {
 }
 }
 
 
 int rtcChainRtcpNackResponder(int tr, unsigned int maxStoredPacketsCount) {
 int rtcChainRtcpNackResponder(int tr, unsigned int maxStoredPacketsCount) {
-	return wrap([tr, maxStoredPacketsCount] {
+	return wrap([&] {
 		auto responder = std::make_shared<RtcpNackResponder>(maxStoredPacketsCount);
 		auto responder = std::make_shared<RtcpNackResponder>(maxStoredPacketsCount);
 		auto chainableHandler = getMediaChainableHandler(tr);
 		auto chainableHandler = getMediaChainableHandler(tr);
 		chainableHandler->addToChain(responder);
 		chainableHandler->addToChain(responder);
@@ -1338,11 +1338,14 @@ int rtcChainRtcpNackResponder(int tr, unsigned int maxStoredPacketsCount) {
 	});
 	});
 }
 }
 
 
-int rtcChainPliHandler(int tr, rtcPliHandlerCallbackFunc onPli) {
-	return wrap([tr, onPli] {
-		auto responder = std::make_shared<PliHandler>(onPli);
+int rtcChainPliHandler(int tr, rtcPliHandlerCallbackFunc cb) {
+	return wrap([&] {
+		auto pliHandler = std::make_shared<PliHandler>([tr, cb] {
+			if (auto ptr = getUserPointer(tr))
+				cb(tr, *ptr);
+		});
 		auto chainableHandler = getMediaChainableHandler(tr);
 		auto chainableHandler = getMediaChainableHandler(tr);
-		chainableHandler->addToChain(responder);
+		chainableHandler->addToChain(pliHandler);
 		return RTC_ERR_SUCCESS;
 		return RTC_ERR_SUCCESS;
 	});
 	});
 }
 }