00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "H261VideoRTPSource.hh"
00022
00023 H261VideoRTPSource*
00024 H261VideoRTPSource::createNew(UsageEnvironment& env, Groupsock* RTPgs,
00025 unsigned char rtpPayloadFormat,
00026 unsigned rtpTimestampFrequency) {
00027 return new H261VideoRTPSource(env, RTPgs, rtpPayloadFormat,
00028 rtpTimestampFrequency);
00029 }
00030
00031 H261VideoRTPSource
00032 ::H261VideoRTPSource(UsageEnvironment& env, Groupsock* RTPgs,
00033 unsigned char rtpPayloadFormat,
00034 unsigned rtpTimestampFrequency)
00035 : MultiFramedRTPSource(env, RTPgs,
00036 rtpPayloadFormat, rtpTimestampFrequency),
00037 fLastSpecialHeader(0) {
00038 }
00039
00040 H261VideoRTPSource::~H261VideoRTPSource() {
00041 }
00042
00043 Boolean H261VideoRTPSource
00044 ::processSpecialHeader(BufferedPacket* packet,
00045 unsigned& resultSpecialHeaderSize) {
00046
00047 if (packet->dataSize() < 4) return False;
00048
00049 unsigned char* headerStart = packet->data();
00050 fLastSpecialHeader
00051 = (headerStart[0]<<24)|(headerStart[1]<<16)|(headerStart[2]<<8)|headerStart[3];
00052
00053 #ifdef DELIVER_COMPLETE_FRAMES
00054 fCurrentPacketBeginsFrame = fCurrentPacketCompletesFrame;
00055
00056
00057
00058 fCurrentPacketCompletesFrame = packet->rtpMarkerBit();
00059 #endif
00060
00061 resultSpecialHeaderSize = 4;
00062 return True;
00063 }
00064
00065 char const* H261VideoRTPSource::MIMEtype() const {
00066 return "video/H261";
00067 }