From 6faf88ba05f174a80c68f01c0412cae9789dbc8c Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期四, 17 八月 2017 17:55:01 +0800
Subject: [PATCH] aaaaa

---
 RtspFace/PL_AndroidMediaCodecDecoder_ndk.cpp |   53 ++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 44 insertions(+), 9 deletions(-)

diff --git a/RtspFace/PL_AndroidMediaCodecDecoder_ndk.cpp b/RtspFace/PL_AndroidMediaCodecDecoder_ndk.cpp
index c7e624e..f7a258e 100644
--- a/RtspFace/PL_AndroidMediaCodecDecoder_ndk.cpp
+++ b/RtspFace/PL_AndroidMediaCodecDecoder_ndk.cpp
@@ -11,6 +11,7 @@
 #include <stdlib.h>
 #include <liveMedia/liveMedia.hh>
 
+
 // see: https://developer.android.com/reference/android/media/MediaCodecInfo.CodecCapabilities.html#COLOR_FormatYUV420Flexible
 #define AMEDIA_COLOR_FormatYUV420Flexible 0x7f420888
 #define AMEDIA_COLOR_FormatYUV420Planar 0x00000013 // 19, I420
@@ -38,12 +39,15 @@
 
 	AMediaCodec* codec;
 
+	bool auxIsSet;
+
 	PL_AMCD_Internal() : 
 		buffSize(0), buffSizeMax(sizeof(buffer)), 
 		inputFrameCount(0), lastOutputBuffIdx(-1), 
 		lastMbfBuffIdx(), lastMbfBuffer(),
 		config(), 
-		codec(nullptr)
+		codec(nullptr),
+		auxIsSet(false)
 	{
 	}
 	
@@ -53,6 +57,7 @@
 	
 	void reset()
 	{
+        auxIsSet = false;
 		buffSize = 0;
 		
 		inputFrameCount = 0;
@@ -137,10 +142,11 @@
     */
 
 	// J0LgKI1oCgPaEAAAAwAQAAADAoDxB6gA,KM4ySA==
-	//uint8_t sps[] = {0x27,0x42,0xe0,0x28,0x8d,0x68,0x0a,0x03,0xda,0x10,0x00,0x00,0x03,0x00,0x10,0x00,0x00,0x03,0x02,0x80,0xf1,0x07,0xa8,0x00};
-	//uint8_t pps[] = {0x28,0xce,0x32,0x48};
-	//AMediaFormat_setBuffer(format, "csd-0", sps, sizeof(sps)); // sps
-	//AMediaFormat_setBuffer(format, "csd-1", pps, sizeof(pps)); // pps
+
+//	uint8_t sps[] = {0x27,0x42,0xe0,0x28,0x8d,0x68,0x0a,0x03,0xda,0x10,0x00,0x00,0x03,0x00,0x10,0x00,0x00,0x03,0x02,0x80,0xf1,0x07,0xa8,0x00};
+//	uint8_t pps[] = {0x28,0xce,0x32,0x48};
+//	AMediaFormat_setBuffer(format, "csd-0", sps, sizeof(sps)); // sps
+//	AMediaFormat_setBuffer(format, "csd-1", pps, sizeof(pps)); // pps
 
     // should like:
     // mime: string(video/avc), durationUs: int64(10000000), width: int32(480), height: int32(360), max-input-size: int32(55067), csd-0: data, csd-1: data}
@@ -193,7 +199,36 @@
 	
 	if (pm.buffer == nullptr)
 		return false;
-	
+
+#ifdef 0
+	if (!in->auxIsSet)
+	{
+		//#todo
+        std::string base64_sps = this->manager->get_param(PLGP_DEC_SPS_B64);
+        std::string base64_pps = this->manager->get_param(PLGP_DEC_PPS_B64);
+		// find PLGP_DEC_SPS_B64 PLGP_DEC_PPS_B64 in this->manager else nothing
+		// base64 decode
+        if((!base64_sps.empty())
+           &&(!base64_pps.empty()))
+        {
+            size_t result_sps = 0;
+            size_t result_ps = 0;
+
+            uint8_t* uc_sps = base64_decode(base64_sps.c_str(),base64_sps.length(),result_sps);
+            uint8_t* uc_pps = base64_decode(base64_pps.c_str(),base64_pps.length(),result_ps);
+
+            AMediaFormat* format = AMediaCodec_getOutputFormat(in->codec);
+            AMediaFormat_setBuffer(format, "csd-0", uc_sps, result_sps); // sps
+            AMediaFormat_setBuffer(format, "csd-1", uc_pps, result_sps); // pps
+            AMediaCodec_setParameters(in->codec,format);
+            // #todo delete format
+            AMediaFormat_delete(format);
+
+            in->auxIsSet = true;
+        }
+	}
+#endif
+
 	MB_Frame* frame = (MB_Frame*)pm.buffer;
 	if (frame->type != MB_Frame::MBFT_H264_NALU)
 	{
@@ -201,9 +236,9 @@
 		return false;
 	}
 
-	//static FILE *pFile = fopen("/data/bb.264", "wb");
-	//fwrite(frame->buffer, sizeof(char), frame->buffSize, pFile);
-	//fflush(pFile);
+//	static FILE *pFile = fopen("/data/bb.264", "wb");
+//	fwrite(frame->buffer, sizeof(char), frame->buffSize, pFile);
+//	fflush(pFile);
 
     ssize_t bufidx = AMediaCodec_dequeueInputBuffer(in->codec, 2000);
     LOGP(DEBUG, "input buffer bufidx=%zd, inputFrameCount=%d", bufidx, in->inputFrameCount++);

--
Gitblit v1.8.0