#include <RTPAVProfilePayload32Receiver.h>
Inheritance diagram for RTPAVProfilePayload32Receiver:

Protected Member Functions | |
| virtual | ~RTPAVProfilePayload32Receiver () |
| virtual void | initialize () |
| virtual void | processPacket (RTPPacket *packet) |
Protected Attributes | |
| cQueue * | _queue |
| u_int32 | _lowestAllowedTimeStamp |
|
|
Destructor. 00034 {
00035 delete _queue;
00036 };
|
|
|
Calls the method of the superclass RTPPayloadReceiver and sets the payload type to 32. Reimplemented from RTPPayloadReceiver. 00039 {
00040 RTPPayloadReceiver::initialize();
00041 _payloadType = 32;
00042 _queue = new cQueue("IncomingQueue", &(RTPPacket::compareFunction));
00043 _lowestAllowedTimeStamp = 0;
00044 };
|
|
|
Writes information about received frames into the output file. The only error correction provided is reordering packets of one frame if needed. Reimplemented from RTPPayloadReceiver. 00047 {
00048 // the first packet sets the lowest allowed time stamp
00049 if (_lowestAllowedTimeStamp == 0) {
00050 _lowestAllowedTimeStamp = rtpPacket->timeStamp();
00051 };
00052
00053 if (rtpPacket->timeStamp() < _lowestAllowedTimeStamp) {
00054 delete rtpPacket;
00055 }
00056 else {
00057 // is this packet from the next frame ?
00058 // this can happen when the marked packet has been
00059 // lost or arrives late
00060 bool nextTimeStamp = rtpPacket->timeStamp() > _lowestAllowedTimeStamp;
00061
00062 // is this packet marked, which means that it's
00063 // the last packet of this frame
00064 bool marked = rtpPacket->marker();
00065
00066 // test if end of frame reached
00067
00068 // check if we received the last (= marked)
00069 // packet of the frame or
00070 // we received a packet of the next frame
00071
00072 if (nextTimeStamp || marked) {
00073
00074 // a marked packet belongs to this frame
00075 if (marked && !nextTimeStamp) {
00076 _queue->insert(rtpPacket);
00077 }
00078
00079 int pictureType = 0;
00080 int frameSize = 0;
00081
00082 // the queue contains all packets for this frame
00083 // we have received
00084 while (!_queue->empty()) {
00085 RTPPacket *readPacket = (RTPPacket *)(_queue->head());
00086 _queue->remove(readPacket);
00087 RTPMpegPacket *mpegPacket = (RTPMpegPacket *)(readPacket->decapsulate());
00088 if (pictureType == 0)
00089 pictureType = mpegPacket->pictureType();
00090 frameSize = frameSize + mpegPacket->payloadLength();
00091
00092 delete mpegPacket;
00093 delete readPacket;
00094 };
00095
00096 // we start the next frame
00097 // set the allowed time stamp
00098 if (nextTimeStamp) {
00099 _lowestAllowedTimeStamp = rtpPacket->timeStamp();
00100 _queue->insert(rtpPacket);
00101 };
00102
00103 // we have calculated a frame
00104 if (frameSize > 0) {
00105 char line[100];
00106 // what picture type is it
00107 char picture = ' ';
00108 if (pictureType == 1)
00109 picture = 'I';
00110 else if (pictureType == 2)
00111 picture = 'P';
00112 else if (pictureType == 3)
00113 picture = 'B';
00114 else if (pictureType == 4)
00115 picture = 'D';
00116
00117 // create sim line
00118 sprintf(line, "%f %i %c-Frame", simTime(), frameSize * 8, picture);
00119 // and write it to the file
00120 _outputFileStream << line << endl;
00121 }
00122 }
00123 // we are not at the end of the frame
00124 // so just insert this packet
00125 else {
00126 _queue->insert(rtpPacket);
00127 }
00128 }
00129 };
|
|
|
Stores the lowest allowed time stamp of rtp data packets. The value is used to throw away packets from mpeg frames already stored in the data file. |
|
|
A reordering queue for incoming packets. |
1.4.1