Implementation for user data sending

This commit is contained in:
dijunkun
2023-09-13 17:31:02 +08:00
parent e2533d18e4
commit a0abb7455c
27 changed files with 513 additions and 233 deletions

View File

@@ -73,7 +73,9 @@ int VideoEncoder::Init() {
return 0;
}
int VideoEncoder::Encode(const uint8_t *pData, int nSize) {
int VideoEncoder::Encode(
const uint8_t *pData, int nSize,
std::function<int(char *encoded_packets, size_t size)> on_encoded_image) {
if (!encoder_) {
LOG_ERROR("Invalid encoder");
return -1;
@@ -104,7 +106,11 @@ int VideoEncoder::Encode(const uint8_t *pData, int nSize) {
}
for (const auto &packet : encoded_packets_) {
OnEncodedImage((char *)packet.data(), packet.size());
if (on_encoded_image) {
on_encoded_image((char *)packet.data(), packet.size());
} else {
OnEncodedImage((char *)packet.data(), packet.size());
}
if (SAVE_ENCODER_STREAM) {
fwrite((unsigned char *)packet.data(), 1, packet.size(), file_);

View File

@@ -1,6 +1,8 @@
#ifndef _NV_ENCODER_H_
#define _NV_ENCODER_H_
#include <functional>
#include "NvEncoderCuda.h"
class VideoEncoder {
@@ -9,8 +11,12 @@ class VideoEncoder {
~VideoEncoder();
int Init();
int Encode(const uint8_t* pData, int nSize);
int Encode(
const uint8_t* pData, int nSize,
std::function<int(char* encoded_packets, size_t size)> on_encoded_image);
virtual int OnEncodedImage(char* encoded_packets, size_t size);
void ForceIdr();
private: