[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-datatype-cvs
Subject: [Datatype-cvs] tools/dtdriver/decoder/video vdepacker.cpp, 1.4, 1.4.10.1
From: yuxinliu () helixcommunity ! org
Date: 2012-07-20 8:10:24
[Download RAW message or body]
Update of /cvsroot/datatype/tools/dtdriver/decoder/video
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv12599
Modified Files:
Tag: PRODUCER_14_0_RN
vdepacker.cpp
Log Message:
Synopsis
========
This CR implement Pass through feature for producer.
Branch : PRODUCER_14_0_RN
Suggested by Sujeet
Description:
==========
The most of IP camera support H.264 video encoding from the camera. In this case, HMP \
doesn't need to transcode it again. It saves system resource and content quality. \
If RTSP stream source has H.264/AAC codec, HMP pass through encoded data.
This CR support pass through all input stream at the same time. This CR never support \
pass through one stream and encoder another stream.
My solution:
1 Add two option in input: "PassThroughVideo" and "PassThroughAudio", their default \
value are false. Customer can set PassThroughVideo=true and PassThroughAudio=true to \
enable pass through. If the input video stream is h.264 and audio stream is AAC, and \
the PassThroughVideo and PassThroughAudio are true, HMP will pass through the input \
stream.
2 If pass through is enable, HMP will create a pass through pipeline, like the \
following:
Input filter(Dtdriver-> depacketizer->dtdrreader) ==>packetizer filter==> packetizer \
asm mux filter ==> destination filter(rbs)
Input filter(Dtdriver-> depacketizer->dtdrreader) ==>unpacketizer asm mux filter ==> \
destination filter(file write)
3 Implement audio depacketizer and video depacketizer plug-in so that Dtdriver \
plug-in can depacketizer H264 and AAC stream. 264depacketizer.rar and \
aacdepacketizer.rar are source code of the new depacketizer plug-in. Path of the two \
plug-in are: datatype\mp4\audio\aacdepacketizer.
datatype\mp4\video\264depacketizer.
4 Implement new class CAudioSourceDepacketizer in source file adepacker.cpp and \
adepacker.h. Dtdriver plug-in will through class CAudioSourceDepacketizer to search \
audio depacketizer plug-in, and depacketize input stream.
5 I add a new macro HELIX_FEATURE_PASS_THROUGH into source file h264pyld.cpp and \
mp4apyld.cpp so that Passthrough feature can share source file with other feature. I \
define macro HELIX_FEATURE_PASS_THROUGH at Umakefil of 264depacketizer folder and \
aacdepacketizer folder.
Files affected:
=========
datatype/mp4/payload/h264pyld.cpp
datatype/mp4/payload/mp4apyld.cpp
client_rn/encodesvc/plugins/input/dtdrreader/hxdtdrreader.cpp
client_rn/encodesvc/plugins/input/dtdrreader/hxdtdrreader.h
client_rn/encodesvc/plugins/input/dtdrreader/hxdtdrservice.cpp
client/encodesvc/include/ihxtconstants.h
producerapps/installer/root/xmlschemas/job.3.0.xsd
datatype/tools/dtdriver/decoder/audio/Umakefil
datatype/tools/dtdriver/decoder/common/decslcfn.cpp
datatype/tools/dtdriver/decoder/common/pub/decslcfn.h
datatype/tools/dtdriver/decoder/video/vdepacker.cpp
client/encodesvc/engine/encpipeline/inputpipeline.cpp
client/encodesvc/engine/encpipeline/outputpipeline.cpp
client/encodesvc/engine/encpipeline/outputpipeline.h
client/encodesvc/engine/encsession/inputsource.cpp
client/build/BIF/PRODUCER_14.bif
producerapps_rn/installer/producer/make_tempdir
Testing Performed:
================
Unit Tests:
1. enable pass through by set PassThroughVideo="true", PassThroughVideo="true"
Input: only one audio stream, type is AAC.
Output: save as a MP4 file.
Expected: HMP never decode and encode the input stream, just pass through it.
Real result: Yes
2. enable pass through by set PassThroughVideo="true", PassThroughVideo="true"
Input: only one video stream, type is H264.
Output: save as a MP4 file.
Expected: HMP never decode and encode the input stream, just pass through it.
Real result: Yes
3. enable pass through by set PassThroughVideo="true", PassThroughVideo="true"
Input: two input stream, video is H264, audio is AAC
Output: save as a MP4 file.
Expected: HMP never decode and encode the input stream, just pass through it.
Real result: Yes
4. enable pass through by set PassThroughVideo="true", PassThroughVideo="true"
Input: two input stream, video is H264, audio is AAC
Output: RBS.
Expected: HMP never decode and encode the input stream, just pass through it to \
server. Real result: Yes. But there are some warning message.
5. disable pass through by set PassThroughVideo="false", PassThroughVideo="false"
Input: two input stream, video is H264, audio is AAC
Output: save as a MP4 file.
Expected: HMP will decode and encode the input stream.
Real result: Yes
Unit Tests: None
Leak Tests: None
Performance Tests: N/A
Platforms Tested: win32-i386-vc9
Builds Verified: win32-i386-vc9
QA Hints
no
Index: vdepacker.cpp
===================================================================
RCS file: /cvsroot/datatype/tools/dtdriver/decoder/video/vdepacker.cpp,v
retrieving revision 1.4
retrieving revision 1.4.10.1
diff -u -d -r1.4 -r1.4.10.1
--- vdepacker.cpp 23 Oct 2009 09:44:42 -0000 1.4
+++ vdepacker.cpp 20 Jul 2012 08:08:08 -0000 1.4.10.1
@@ -268,7 +268,9 @@
m_ulStartTime = GetULONG32Option("StartTime", m_ulStartTime);
// Load the depacker
HX_RELEASE(m_pDepacker);
+
retVal = LoadDepackerForStreamHeader(m_pStreamHeaderIn, m_pDepacker);
+
if (SUCCEEDED(retVal))
{
// Init the depacker
@@ -336,15 +338,14 @@
if (SUCCEEDED(retVal))
{
// get the depacked frame(s) and send to sink...
- while (m_pDepacker->GetPacket(pOutputPacket) == HXR_OK)
- {
- if (m_pSourceSink)
- {
- m_pSourceSink->OnPacket(HXR_OK, pOutputPacket);
- }
-
- HX_RELEASE(pOutputPacket);
- }
+ while (m_pDepacker->GetPacket(pOutputPacket) == HXR_OK && pOutputPacket)
+ {
+ if (m_pSourceSink)
+ {
+ m_pSourceSink->OnPacket(HXR_OK, pOutputPacket);
+ }
+ HX_RELEASE(pOutputPacket);
+ }
}
return retVal;
@@ -427,7 +428,6 @@
return retVal;
}
-
HX_RESULT CVideoSourceDepacketizer::LoadDepackerForStreamHeader(IHXValues* \
pStreamHeader, REF(IHXPayloadFormatObject*) rpDepacker)
{
@@ -455,7 +455,7 @@
retVal = pHandler->FindPluginUsingStrings(PLUGIN_CLASS,
PLUGIN_DEPACKER_TYPE,
PLUGIN_DEPACKER_MIME,
- (char*) \
m_pMimeTypeStr->GetBuffer(), + \
(char*) m_pMimeTypeStr->GetBuffer(), \
NULL,
NULL,
pUnk);
_______________________________________________
Datatype-cvs mailing list
Datatype-cvs@helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/datatype-cvs
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic