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