Skip to content

Commit b1d7e5e

Browse files
committed
Big refactoring: use queue instead of custom buffer
1 parent d8a147e commit b1d7e5e

29 files changed

+776
-764
lines changed

src/rRTSPServer/include/ADTS2PCMFileSink.hh

+14-12
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,26 @@
2727

2828
class ADTS2PCMFileSink: public FileSink {
2929
public:
30-
static ADTS2PCMFileSink* createNew(UsageEnvironment& env, char const* fileName,
31-
int sampleRate, int numChannels, unsigned bufferSize = 1024);
32-
// "bufferSize" should be at least as large as the largest expected
33-
// input frame.
30+
static ADTS2PCMFileSink* createNew(UsageEnvironment& env, char const* fileName,
31+
int sampleRate, int numChannels, Boolean enableSpeaker,
32+
unsigned bufferSize = 1024);
33+
// "bufferSize" should be at least as large as the largest expected
34+
// input frame.
3435

35-
char* getConfigStr();
36+
char* getConfigStr();
3637

37-
virtual void addData(unsigned char* data, unsigned dataSize,
38-
struct timeval presentationTime);
39-
// (Available in case a client wants to add extra data to the output file)
38+
virtual void addData(unsigned char* data, unsigned dataSize,
39+
struct timeval presentationTime);
40+
// (Available in case a client wants to add extra data to the output file)
4041

4142
protected:
42-
ADTS2PCMFileSink(UsageEnvironment& env, FILE* fid, int sampleRate, int numChannels, unsigned bufferSize);
43-
// called only by createNew()
44-
virtual ~ADTS2PCMFileSink();
43+
ADTS2PCMFileSink(UsageEnvironment& env, FILE* fid, int sampleRate, int numChannels,
44+
Boolean enableSpeaker, unsigned bufferSize);
45+
// called only by createNew()
46+
virtual ~ADTS2PCMFileSink();
4547

4648
protected: // redefined virtual functions:
47-
virtual Boolean continuePlaying();
49+
virtual Boolean continuePlaying();
4850

4951
protected:
5052
static void afterGettingFrame(void* clientData, unsigned frameSize,

src/rRTSPServer/include/ADTSAudioFileServerMediaSubsession_BC.hh

+26-25
Original file line numberDiff line numberDiff line change
@@ -28,38 +28,39 @@
2828

2929
class ADTSAudioFileServerMediaSubsession_BC: public FileServerMediaSubsession_BC {
3030
public:
31-
static ADTSAudioFileServerMediaSubsession_BC*
32-
createNew(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource,
33-
int sampleRate, int numChannels);
31+
static ADTSAudioFileServerMediaSubsession_BC*
32+
createNew(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource,
33+
int sampleRate, int numChannels, Boolean enableSpeaker);
3434

3535
protected:
36-
ADTSAudioFileServerMediaSubsession_BC(UsageEnvironment& env,
37-
char const* fileName, Boolean reuseFirstSource,
38-
int sampleRate, int numChannels);
39-
// called only by createNew();
40-
virtual ~ADTSAudioFileServerMediaSubsession_BC();
36+
ADTSAudioFileServerMediaSubsession_BC(UsageEnvironment& env,
37+
char const* fileName, Boolean reuseFirstSource,
38+
int sampleRate, int numChannels, Boolean enableSpeaker);
39+
// called only by createNew();
40+
virtual ~ADTSAudioFileServerMediaSubsession_BC();
4141

4242
protected: // redefined virtual functions
43-
virtual FramedSource* createNewStreamSource(unsigned clientSessionId,
44-
unsigned& estBitrate);
45-
virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock,
46-
unsigned char rtpPayloadTypeIfDynamic,
47-
FramedSource* inputSource);
43+
virtual FramedSource* createNewStreamSource(unsigned clientSessionId,
44+
unsigned& estBitrate);
45+
virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock,
46+
unsigned char rtpPayloadTypeIfDynamic,
47+
FramedSource* inputSource);
4848

49-
virtual MediaSink* createNewStreamDestination(unsigned clientSessionId,
50-
unsigned& estBitrate);
51-
// "estBitrate" is the stream's estimated bitrate, in kbps
52-
virtual RTPSource* createNewRTPSource(Groupsock* rtpGroupsock,
53-
unsigned char rtpPayloadTypeIfDynamic,
54-
MediaSink* outputSink);
55-
virtual char const* getAuxSDPLineForBackChannel(MediaSink* mediaSink, RTPSource* rtpSource);
49+
virtual MediaSink* createNewStreamDestination(unsigned clientSessionId,
50+
unsigned& estBitrate);
51+
// "estBitrate" is the stream's estimated bitrate, in kbps
52+
virtual RTPSource* createNewRTPSource(Groupsock* rtpGroupsock,
53+
unsigned char rtpPayloadTypeIfDynamic,
54+
MediaSink* outputSink);
55+
virtual char const* getAuxSDPLineForBackChannel(MediaSink* mediaSink, RTPSource* rtpSource);
5656

5757
private:
58-
int fSampleRate;
59-
int fNumChannels;
60-
char* fAuxSDPLine;
61-
unsigned char fRTPPayloadFormat;
62-
unsigned fRTPTimestampFrequency;
58+
int fSampleRate;
59+
int fNumChannels;
60+
Boolean fEnableSpeaker;
61+
char* fAuxSDPLine;
62+
unsigned char fRTPPayloadFormat;
63+
unsigned fRTPTimestampFrequency;
6364
};
6465

6566
#endif

src/rRTSPServer/include/ADTSAudioFramedMemoryServerMediaSubsession.hh

+12-10
Original file line numberDiff line numberDiff line change
@@ -31,39 +31,41 @@ class ADTSAudioFramedMemoryServerMediaSubsession: public OnDemandServerMediaSubs
3131
public:
3232
static ADTSAudioFramedMemoryServerMediaSubsession*
3333
createNew(UsageEnvironment& env, StreamReplicator *replicator,
34-
Boolean reuseFirstSource);
34+
Boolean reuseFirstSource, unsigned samplingFrequency,
35+
unsigned char numChannels);
3536

3637
// Used to implement "getAuxSDPLine()":
3738
void checkForAuxSDPLine1();
3839
void afterPlayingDummy1();
3940

4041
protected:
4142
ADTSAudioFramedMemoryServerMediaSubsession(UsageEnvironment& env,
42-
StreamReplicator *replicator,
43-
Boolean reuseFirstSource);
43+
StreamReplicator *replicator,
44+
Boolean reuseFirstSource,
45+
unsigned samplingFrequency,
46+
unsigned char numChannels);
4447
// called only by createNew();
4548
virtual ~ADTSAudioFramedMemoryServerMediaSubsession();
4649

4750
void setDoneFlag() { fDoneFlag = ~0; }
4851

4952
protected: // redefined virtual functions
5053
virtual char const* getAuxSDPLine(RTPSink* rtpSink,
51-
FramedSource* inputSource);
54+
FramedSource* inputSource);
5255
virtual FramedSource* createNewStreamSource(unsigned clientSessionId,
5356
unsigned& estBitrate);
5457
virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock,
55-
unsigned char rtpPayloadTypeIfDynamic,
56-
FramedSource* inputSource);
58+
unsigned char rtpPayloadTypeIfDynamic,
59+
FramedSource* inputSource);
5760

5861
private:
59-
cb_output_buffer *fBuffer;
6062
char* fAuxSDPLine;
6163
char fDoneFlag; // used when setting up "fAuxSDPLine"
62-
unsigned fSamplingFrequency;
63-
unsigned fNumChannels;
64-
char fConfigStr[5];
6564
RTPSink* fDummyRTPSink; // ditto
6665
StreamReplicator *fReplicator;
66+
unsigned fSamplingFrequency;
67+
unsigned char fNumChannels;
68+
char fConfigStr[5];
6769
};
6870

6971
#endif

src/rRTSPServer/include/AudioFramedMemorySource.hh

+13-10
Original file line numberDiff line numberDiff line change
@@ -25,42 +25,45 @@
2525
#include "FramedSource.hh"
2626
#endif
2727

28-
#include <rRTSPServer.h>
28+
#include "rRTSPServer.h"
2929

3030
class AudioFramedMemorySource: public FramedSource {
3131
public:
3232
static AudioFramedMemorySource* createNew(UsageEnvironment& env,
33-
cb_output_buffer *cbBuffer,
33+
output_queue *qBuffer,
3434
unsigned samplingFrequency,
35-
unsigned numChannels);
35+
unsigned char numChannels,
36+
Boolean useTimeForPres);
3637

3738
unsigned samplingFrequency() const { return fSamplingFrequency; }
38-
unsigned numChannels() const { return fNumChannels; }
39+
unsigned char numChannels() const { return fNumChannels; }
3940
char const* configStr() const { return fConfigStr; }
4041
static void doGetNextFrameTask(void *clientData);
4142
void doGetNextFrameEx();
4243

4344
protected:
4445
AudioFramedMemorySource(UsageEnvironment& env,
45-
cb_output_buffer *cbBuffer,
46+
output_queue *qBuffer,
4647
unsigned samplingFrequency,
47-
unsigned numChannels);
48+
unsigned char numChannels,
49+
Boolean useTimeForPres);
4850
// called only by createNew()
4951

5052
virtual ~AudioFramedMemorySource();
5153

5254
private:
53-
int cb_check_sync_word(unsigned char *str);
55+
int check_sync_word(unsigned char *str);
5456
// redefined virtual functions:
5557
virtual void doGetNextFrame();
5658
virtual void doStopGettingFrames();
5759

5860
private:
59-
cb_output_buffer *fBuffer;
61+
output_queue *fQBuffer;
6062
u_int64_t fCurIndex;
6163
int fProfile;
62-
int fSamplingFrequency;
63-
int fNumChannels;
64+
unsigned fSamplingFrequency;
65+
unsigned char fNumChannels;
66+
Boolean fUseTimeForPres;
6467
unsigned fuSecsPerFrame;
6568
char fConfigStr[5];
6669
Boolean fHaveStartedReading;

src/rRTSPServer/include/H264VideoFramedMemoryServerMediaSubsession.hh

+5-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
class H264VideoFramedMemoryServerMediaSubsession: public OnDemandServerMediaSubsession {
3030
public:
3131
static H264VideoFramedMemoryServerMediaSubsession*
32-
createNew(UsageEnvironment& env, cb_output_buffer *cbBuffer,
32+
createNew(UsageEnvironment& env, output_queue *qBuffer, Boolean useTimeForPres,
3333
Boolean reuseFirstSource);
3434

3535
// Used to implement "getAuxSDPLine()":
@@ -38,7 +38,8 @@ public:
3838

3939
protected:
4040
H264VideoFramedMemoryServerMediaSubsession(UsageEnvironment& env,
41-
cb_output_buffer *cbBuffer,
41+
output_queue *qBuffer,
42+
Boolean useTimeForPres,
4243
Boolean reuseFirstSource);
4344
// called only by createNew();
4445
virtual ~H264VideoFramedMemoryServerMediaSubsession();
@@ -55,7 +56,8 @@ protected: // redefined virtual functions
5556
FramedSource* inputSource);
5657

5758
private:
58-
cb_output_buffer *fBuffer;
59+
output_queue *fQBuffer;
60+
Boolean fUseTimeForPres;
5961
char* fAuxSDPLine;
6062
char fDoneFlag; // used when setting up "fAuxSDPLine"
6163
RTPSink* fDummyRTPSink; // ditto

src/rRTSPServer/include/H265VideoFramedMemoryServerMediaSubsession.hh

+5-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
class H265VideoFramedMemoryServerMediaSubsession: public OnDemandServerMediaSubsession {
3030
public:
3131
static H265VideoFramedMemoryServerMediaSubsession*
32-
createNew(UsageEnvironment& env, cb_output_buffer *cbBuffer,
32+
createNew(UsageEnvironment& env, output_queue *qBuffer, Boolean useTimeForPres,
3333
Boolean reuseFirstSource);
3434

3535
// Used to implement "getAuxSDPLine()":
@@ -38,7 +38,8 @@ public:
3838

3939
protected:
4040
H265VideoFramedMemoryServerMediaSubsession(UsageEnvironment& env,
41-
cb_output_buffer *cbBuffer,
41+
output_queue *qBuffer,
42+
Boolean useTimeForPres,
4243
Boolean reuseFirstSource);
4344
// called only by createNew();
4445
virtual ~H265VideoFramedMemoryServerMediaSubsession();
@@ -55,7 +56,8 @@ protected: // redefined virtual functions
5556
FramedSource* inputSource);
5657

5758
private:
58-
cb_output_buffer *fBuffer;
59+
output_queue *fQBuffer;
60+
Boolean fUseTimeForPres;
5961
char* fAuxSDPLine;
6062
char fDoneFlag; // used when setting up "fAuxSDPLine"
6163
RTPSink* fDummyRTPSink; // ditto

src/rRTSPServer/include/PCMAudioFileServerMediaSubsession_BC.hh

+4-2
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ class PCMAudioFileServerMediaSubsession_BC: public FileServerMediaSubsession_BC
3030
public:
3131
static PCMAudioFileServerMediaSubsession_BC*
3232
createNew(UsageEnvironment& env, char const* fileName, Boolean reuseFirstSource,
33-
int sampleRate, int numChannels, int law);
33+
int sampleRate, int numChannels, int law, Boolean enableSpeaker);
3434

3535
protected:
3636
PCMAudioFileServerMediaSubsession_BC(UsageEnvironment& env,
3737
char const* fileName, Boolean reuseFirstSource,
38-
int sampleRate, int numChannels, int law);
38+
int sampleRate, int numChannels, int law, Boolean enableSpeaker);
3939
// called only by createNew();
4040
virtual ~PCMAudioFileServerMediaSubsession_BC();
4141

@@ -57,9 +57,11 @@ private:
5757
int fSampleRate;
5858
int fNumChannels;
5959
int fLaw;
60+
Boolean fEnableSpeaker;
6061
char* fAuxSDPLine;
6162
unsigned char fRTPPayloadFormat;
6263
unsigned fRTPTimestampFrequency;
64+
6365
};
6466

6567
#endif

src/rRTSPServer/include/PCMFileSink.hh

+14-12
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,25 @@
3131

3232
class PCMFileSink: public FileSink {
3333
public:
34-
static PCMFileSink* createNew(UsageEnvironment& env, char const* fileName,
35-
int destSampleRate, int srcLaw,
36-
unsigned bufferSize = 8192);
37-
// "bufferSize" should be at least as large as the largest expected
38-
// input frame.
34+
static PCMFileSink* createNew(UsageEnvironment& env, char const* fileName,
35+
int destSampleRate, int srcLaw,
36+
Boolean enableSpeaker,
37+
unsigned bufferSize = 8192);
38+
// "bufferSize" should be at least as large as the largest expected
39+
// input frame.
3940

40-
virtual void addData(unsigned char* data, unsigned dataSize,
41-
struct timeval presentationTime);
42-
// (Available in case a client wants to add extra data to the output file)
41+
virtual void addData(unsigned char* data, unsigned dataSize,
42+
struct timeval presentationTime);
43+
// (Available in case a client wants to add extra data to the output file)
4344

4445
protected:
45-
PCMFileSink(UsageEnvironment& env, FILE* fid, int destSampleRate, int srcLaw, unsigned bufferSize);
46-
// called only by createNew()
47-
virtual ~PCMFileSink();
46+
PCMFileSink(UsageEnvironment& env, FILE* fid, int destSampleRate, int srcLaw,
47+
Boolean enableSpeaker, unsigned bufferSize);
48+
// called only by createNew()
49+
virtual ~PCMFileSink();
4850

4951
protected: // redefined virtual functions:
50-
virtual Boolean continuePlaying();
52+
virtual Boolean continuePlaying();
5153

5254
protected:
5355
static void afterGettingFrame(void* clientData, unsigned frameSize,

src/rRTSPServer/include/Speaker.hh

-10
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,9 @@
2121
#ifndef _SPEAKER_HH
2222
#define _SPEAKER_HH
2323

24-
#include <stdio.h>
25-
#include <stdlib.h>
26-
#include <string.h>
27-
#include <fcntl.h>
28-
#include <stdio.h>
29-
#include <unistd.h>
30-
#include <sys/ioctl.h>
3124
#include <pthread.h>
3225
#include <semaphore.h>
3326

34-
#include "Boolean.hh"
35-
#include "strDup.hh"
36-
3727
#define SPEAKER_OFF 0
3828
#define SPEAKER_ON 1
3929

src/rRTSPServer/include/VideoFramedMemorySource.hh

+6-4
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ class VideoFramedMemorySource: public FramedSource {
3131
public:
3232
static VideoFramedMemorySource* createNew(UsageEnvironment& env,
3333
int hNumber,
34-
cb_output_buffer *cbBuffer,
34+
output_queue *qBuffer,
35+
Boolean useTimeForPres,
3536
unsigned playTimePerFrame = 0);
3637

3738
void seekToByteAbsolute(u_int64_t byteNumber, u_int64_t numBytesToStream = 0);
@@ -42,22 +43,23 @@ public:
4243
protected:
4344
VideoFramedMemorySource(UsageEnvironment& env,
4445
int hNumber,
45-
cb_output_buffer *cbBuffer,
46+
output_queue *qBuffer,
47+
Boolean useTimeForPres,
4648
unsigned playTimePerFrame);
4749
// called only by createNew()
4850

4951
virtual ~VideoFramedMemorySource();
5052

5153
private:
52-
int cb_memcmp(unsigned char *str1, unsigned char*str2, size_t n);
5354
// redefined virtual functions:
5455
virtual void doGetNextFrame();
5556
virtual void doStopGettingFrames();
5657

5758
private:
5859
int fHNumber;
59-
cb_output_buffer *fBuffer;
60+
output_queue *fQBuffer;
6061
u_int64_t fCurIndex;
62+
Boolean fUseTimeForPres;
6163
unsigned fPlayTimePerFrame;
6264
unsigned fLastPlayTime;
6365
Boolean fLimitNumBytesToStream;

0 commit comments

Comments
 (0)