From 87d2a9dc6feba9e20cf40f6fd9cd6bac79838504 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期二, 18 四月 2017 18:12:27 +0800
Subject: [PATCH]
---
VisitFace/RtspNativeCodec/app/libs/live555/include/liveMedia/AVIFileSink.hh | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 115 insertions(+), 0 deletions(-)
diff --git a/VisitFace/RtspNativeCodec/app/libs/live555/include/liveMedia/AVIFileSink.hh b/VisitFace/RtspNativeCodec/app/libs/live555/include/liveMedia/AVIFileSink.hh
new file mode 100644
index 0000000..6390f45
--- /dev/null
+++ b/VisitFace/RtspNativeCodec/app/libs/live555/include/liveMedia/AVIFileSink.hh
@@ -0,0 +1,115 @@
+/**********
+This library is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.)
+
+This library is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+**********/
+// "liveMedia"
+// Copyright (c) 1996-2017 Live Networks, Inc. All rights reserved.
+// A sink that generates an AVI file from a composite media session
+// C++ header
+
+#ifndef _AVI_FILE_SINK_HH
+#define _AVI_FILE_SINK_HH
+
+#ifndef _MEDIA_SESSION_HH
+#include "MediaSession.hh"
+#endif
+
+class AVIFileSink: public Medium {
+public:
+ static AVIFileSink* createNew(UsageEnvironment& env,
+ MediaSession& inputSession,
+ char const* outputFileName,
+ unsigned bufferSize = 20000,
+ unsigned short movieWidth = 240,
+ unsigned short movieHeight = 180,
+ unsigned movieFPS = 15,
+ Boolean packetLossCompensate = False);
+
+ typedef void (afterPlayingFunc)(void* clientData);
+ Boolean startPlaying(afterPlayingFunc* afterFunc,
+ void* afterClientData);
+
+ unsigned numActiveSubsessions() const { return fNumSubsessions; }
+
+private:
+ AVIFileSink(UsageEnvironment& env, MediaSession& inputSession,
+ char const* outputFileName, unsigned bufferSize,
+ unsigned short movieWidth, unsigned short movieHeight,
+ unsigned movieFPS, Boolean packetLossCompensate);
+ // called only by createNew()
+ virtual ~AVIFileSink();
+
+ Boolean continuePlaying();
+ static void afterGettingFrame(void* clientData, unsigned frameSize,
+ unsigned numTruncatedBytes,
+ struct timeval presentationTime,
+ unsigned durationInMicroseconds);
+ static void onSourceClosure(void* clientData);
+ void onSourceClosure1();
+ static void onRTCPBye(void* clientData);
+ void addIndexRecord(class AVIIndexRecord* newIndexRecord);
+ void completeOutputFile();
+
+private:
+ friend class AVISubsessionIOState;
+ MediaSession& fInputSession;
+ FILE* fOutFid;
+ class AVIIndexRecord *fIndexRecordsHead, *fIndexRecordsTail;
+ unsigned fNumIndexRecords;
+ unsigned fBufferSize;
+ Boolean fPacketLossCompensate;
+ Boolean fAreCurrentlyBeingPlayed;
+ afterPlayingFunc* fAfterFunc;
+ void* fAfterClientData;
+ unsigned fNumSubsessions;
+ unsigned fNumBytesWritten;
+ struct timeval fStartTime;
+ Boolean fHaveCompletedOutputFile;
+
+private:
+ ///// Definitions specific to the AVI file format:
+
+ unsigned addWord(unsigned word); // outputs "word" in little-endian order
+ unsigned addHalfWord(unsigned short halfWord);
+ unsigned addByte(unsigned char byte) {
+ putc(byte, fOutFid);
+ return 1;
+ }
+ unsigned addZeroWords(unsigned numWords);
+ unsigned add4ByteString(char const* str);
+ void setWord(unsigned filePosn, unsigned size);
+
+ // Define member functions for outputting various types of file header:
+#define _header(name) unsigned addFileHeader_##name()
+ _header(AVI);
+ _header(hdrl);
+ _header(avih);
+ _header(strl);
+ _header(strh);
+ _header(strf);
+ _header(JUNK);
+// _header(JUNK);
+ _header(movi);
+private:
+ unsigned short fMovieWidth, fMovieHeight;
+ unsigned fMovieFPS;
+ unsigned fRIFFSizePosition, fRIFFSizeValue;
+ unsigned fAVIHMaxBytesPerSecondPosition;
+ unsigned fAVIHFrameCountPosition;
+ unsigned fMoviSizePosition, fMoviSizeValue;
+ class AVISubsessionIOState* fCurrentIOState;
+ unsigned fJunkNumber;
+};
+
+#endif
--
Gitblit v1.8.0