liveMedia/DVVideoRTPSource.cpp

Go to the documentation of this file.
00001 /**********
00002 This library is free software; you can redistribute it and/or modify it under
00003 the terms of the GNU Lesser General Public License as published by the
00004 Free Software Foundation; either version 2.1 of the License, or (at your
00005 option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)
00006 
00007 This library is distributed in the hope that it will be useful, but WITHOUT
00008 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00009 FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
00010 more details.
00011 
00012 You should have received a copy of the GNU Lesser General Public License
00013 along with this library; if not, write to the Free Software Foundation, Inc.,
00014 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
00015 **********/
00016 // "liveMedia"
00017 // Copyright (c) 1996-2012 Live Networks, Inc.  All rights reserved.
00018 // DV Video RTP Sources
00019 // Implementation
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; // TARFU!
00050   
00051   u_int8_t const* data = packet->data();
00052   fCurrentPacketBeginsFrame = data[0] == DV_SECTION_HEADER && (data[1]&0xf8) == 0 && data[2] == 0; // thanks to Ben Hutchings
00053 
00054   // The RTP "M" (marker) bit indicates the last fragment of a frame:
00055   fCurrentPacketCompletesFrame = packet->rtpMarkerBit();
00056 
00057   // There is no special header
00058   resultSpecialHeaderSize = 0;
00059   return True;
00060 }
00061 
00062 char const* DVVideoRTPSource::MIMEtype() const {
00063   return "video/DV";
00064 }
00065 

Generated on Thu May 17 07:11:45 2012 for live by  doxygen 1.5.2