From 15d0c49e85159b9e27870aff5280c0cd95b103c4 Mon Sep 17 00:00:00 2001
From: xuxiuxi <xuxiuxi@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 04 五月 2017 17:16:56 +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