From 41bc5a329c73e3b43695f73f11c47c97c44cc1b6 Mon Sep 17 00:00:00 2001
From: chenke <chenke@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 20 七月 2017 09:45:41 +0800
Subject: [PATCH] 

---
 RtspFace/PL_H264Decoder.cpp |   53 ++++++++++-------------------------------------------
 1 files changed, 10 insertions(+), 43 deletions(-)

diff --git a/RtspFace/PL_H264Decoder.cpp b/RtspFace/PL_H264Decoder.cpp
index 7426bac..90681c1 100644
--- a/RtspFace/PL_H264Decoder.cpp
+++ b/RtspFace/PL_H264Decoder.cpp
@@ -1,9 +1,10 @@
 #include "PL_H264Decoder.h"
 #include "MaterialBuffer.h"
+#include "MediaHelper.h"
 #include "logger.h"
 
-#include <H264VideoRTPSource.hh> // for SPropRecord
-#include <libbase64.h>
+#include <liveMedia/H264VideoRTPSource.hh> // for SPropRecord
+//#include <libbase64.h>
 
 extern "C"
 {
@@ -91,41 +92,6 @@
 	
 }
 
-SPropRecord* parseSPropParameterSets(char const* sPropParameterSetsStr, size_t& numSPropRecords) {  
-  // Make a copy of the input string, so we can replace the commas with '\0's:  
-  char* inStr = strDup(sPropParameterSetsStr);  
-  if (inStr == NULL) {  
-    numSPropRecords = 0;  
-    return NULL;  
-  }  
-  
-  // Count the number of commas (and thus the number of parameter sets):  
-  numSPropRecords = 1;  
-  char* s;  
-  for (s = inStr; *s != '\0'; ++s) {  
-    if (*s == ',') {  
-      ++numSPropRecords;  
-      *s = '\0';  
-    }  
-  }  
-  
-  // Allocate and fill in the result array:  
-  SPropRecord* resultArray = new SPropRecord[numSPropRecords];
-  s = inStr;  
-  for (unsigned i = 0; i < numSPropRecords; ++i) {  
-    resultArray[i].sPropBytes = new uint8_t[256];
-	
-	size_t sPropLength = 0;
-	base64_decode(s, strlen(s), (char*)resultArray[i].sPropBytes, &sPropLength, 0);
-	resultArray[i].sPropLength = sPropLength;
-	
-    s += strlen(s) + 1;  
-  }  
-  
-  delete[] inStr;  
-  return resultArray;  
-}
-
 bool initH264DecoderEnv(H264Decoder_Internal* in, 
 	uint8_t* sps, size_t spsSize, uint8_t* pps, size_t ppsSize)
 {
@@ -136,7 +102,7 @@
 
 	if (!avCodec)   
 	{  
-		LOG_WARN << "codec not found!";  
+		LOG_WARN << "codec not found!" << std::endl;  
 		return false;  
 	}  
 
@@ -185,7 +151,7 @@
 
 	if (av_packet_from_data(&packet, buffer, buffSize) != 0)
 	{  
-		LOG_WARN << "av_packet_from_data error";
+		LOG_WARN << "av_packet_from_data error" << std::endl;
 		return false;
 	}
 	
@@ -200,7 +166,8 @@
 	}
 	else
 	{
-		LOG_WARN << "incomplete frame";
+		//#todo  sps sps changing
+		LOG_WARN << "incomplete frame" << std::endl;
 		return false;
 	}
 }
@@ -220,11 +187,11 @@
 		if (fmtp.empty())
 			return false;
 		
-		size_t numSPropRecords = 0;
+		int numSPropRecords = 0;
 		SPropRecord *p_record = parseSPropParameterSets(fmtp.c_str(), numSPropRecords);
 		if (numSPropRecords < 2)
 		{
-			LOG_WARN << "numSPropRecords < 2";
+			LOG_WARN << "numSPropRecords < 2" << std::endl;
 			return false;
 		}
 
@@ -234,7 +201,7 @@
 		bool ret = initH264DecoderEnv(in, sps.sPropBytes, sps.sPropLength, pps.sPropBytes, pps.sPropLength);
 		if (!ret)
 		{
-			LOG_ERROR << "initH264DecoderEnv error";
+			LOG_ERROR << "initH264DecoderEnv error" << std::endl;
 			return false;
 		}
 		else

--
Gitblit v1.8.0