00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "SimpleRTPSink.hh"
00023
00024 SimpleRTPSink::SimpleRTPSink(UsageEnvironment& env, Groupsock* RTPgs,
00025 unsigned char rtpPayloadFormat,
00026 unsigned rtpTimestampFrequency,
00027 char const* sdpMediaTypeString,
00028 char const* rtpPayloadFormatName,
00029 unsigned numChannels,
00030 Boolean allowMultipleFramesPerPacket,
00031 Boolean doNormalMBitRule)
00032 : MultiFramedRTPSink(env, RTPgs, rtpPayloadFormat,
00033 rtpTimestampFrequency, rtpPayloadFormatName,
00034 numChannels),
00035 fAllowMultipleFramesPerPacket(allowMultipleFramesPerPacket) {
00036 fSDPMediaTypeString
00037 = strDup(sdpMediaTypeString == NULL ? "unknown" : sdpMediaTypeString);
00038 fSetMBitOnLastFrames
00039 = strcmp(fSDPMediaTypeString, "video") == 0 && doNormalMBitRule;
00040 }
00041
00042 SimpleRTPSink::~SimpleRTPSink() {
00043 delete[] (char*)fSDPMediaTypeString;
00044 }
00045
00046 SimpleRTPSink*
00047 SimpleRTPSink::createNew(UsageEnvironment& env, Groupsock* RTPgs,
00048 unsigned char rtpPayloadFormat,
00049 unsigned rtpTimestampFrequency,
00050 char const* sdpMediaTypeString,
00051 char const* rtpPayloadFormatName,
00052 unsigned numChannels,
00053 Boolean allowMultipleFramesPerPacket,
00054 Boolean doNormalMBitRule) {
00055 return new SimpleRTPSink(env, RTPgs,
00056 rtpPayloadFormat, rtpTimestampFrequency,
00057 sdpMediaTypeString, rtpPayloadFormatName,
00058 numChannels,
00059 allowMultipleFramesPerPacket,
00060 doNormalMBitRule);
00061 }
00062
00063 void SimpleRTPSink::doSpecialFrameHandling(unsigned fragmentationOffset,
00064 unsigned char* frameStart,
00065 unsigned numBytesInFrame,
00066 struct timeval frameTimestamp,
00067 unsigned numRemainingBytes) {
00068 if (numRemainingBytes == 0) {
00069
00070
00071 if (fSetMBitOnLastFrames) setMarkerBit();
00072 }
00073
00074
00075
00076 MultiFramedRTPSink::doSpecialFrameHandling(fragmentationOffset,
00077 frameStart, numBytesInFrame,
00078 frameTimestamp,
00079 numRemainingBytes);
00080 }
00081
00082 Boolean SimpleRTPSink::
00083 frameCanAppearAfterPacketStart(unsigned char const* ,
00084 unsigned ) const {
00085 return fAllowMultipleFramesPerPacket;
00086 }
00087
00088 char const* SimpleRTPSink::sdpMediaType() const {
00089 return fSDPMediaTypeString;
00090 }