00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "MPEG1or2VideoHTTPSink.hh"
00022
00024
00025 MPEG1or2VideoHTTPSink* MPEG1or2VideoHTTPSink::createNew(UsageEnvironment& env, Port ourPort) {
00026 int ourSocket = -1;
00027
00028 do {
00029 int ourSocket = setUpOurSocket(env, ourPort);
00030 if (ourSocket == -1) break;
00031
00032 MPEG1or2VideoHTTPSink* newSink = new MPEG1or2VideoHTTPSink(env, ourSocket);
00033 if (newSink == NULL) break;
00034
00035 appendPortNum(env, ourPort);
00036
00037 return newSink;
00038 } while (0);
00039
00040 if (ourSocket != -1) ::closeSocket(ourSocket);
00041 return NULL;
00042 }
00043
00044 MPEG1or2VideoHTTPSink::MPEG1or2VideoHTTPSink(UsageEnvironment& env, int ourSocket)
00045 : HTTPSink(env, ourSocket), fHaveSeenFirstVSH(False) {
00046 }
00047
00048 MPEG1or2VideoHTTPSink::~MPEG1or2VideoHTTPSink() {
00049 }
00050
00051 #define VIDEO_SEQUENCE_HEADER_START_CODE 0x000001B3
00052
00053 Boolean MPEG1or2VideoHTTPSink::isUseableFrame(unsigned char* framePtr,
00054 unsigned frameSize) {
00055
00056
00057
00058
00059
00060 if (frameSize < 4) return False;
00061
00062 if (fHaveSeenFirstVSH) return True;
00063
00064 unsigned first4Bytes
00065 = (framePtr[0]<<24)|(framePtr[1]<<16)|(framePtr[2]<<8)|framePtr[3];
00066
00067 if (first4Bytes == VIDEO_SEQUENCE_HEADER_START_CODE) {
00068 fHaveSeenFirstVSH = True;
00069 return True;
00070 } else {
00071 return False;
00072 }
00073 }