[prev in list] [next in list] [prev in thread] [next in thread]
List: helix-datatype-cvs
Subject: [Datatype-cvs] mp4/fileformat qtatmmgs.cpp, 1.33.2.22.2.17.2.1, 1.33.2.22.2.17.2.2 qttrack.cpp, 1.30
From: hanshunsun () helixcommunity ! org
Date: 2012-05-28 14:19:25
[Download RAW message or body]
Update of /cvsroot/datatype/mp4/fileformat
In directory cvs01.internal.helixcommunity.org:/tmp/cvs-serv17038
Modified Files:
Tag: hxclient_3_6_1_raja
qtatmmgs.cpp qttrack.cpp
Log Message:
Synopsis:
Change to fix the Bug 15006: [New Requirment][AC-3 Passthrough]: New
Requirment for AC-3 Passthrought.
Overview:
In order to support AC-3 Passthrough on HDMI of Avi, MKV and mp4 files,
I Modified files to support this function on HDMI.
Files Added: None
Files Modified:
/audio/device/platform/unix/audAndroid.cpp
/audio/device/platform/unix/audUnix.cpp
/audio/device/pub/hxaudev.h
/client/audiosvc/hxaudply.cpp
/client/audiosvc/pub/hxaudply.h
/client/audiosvc/hxaudses.cpp
/client/audiosvc/pub/hxaudses.h
/client/audiosvc/hxaudstr_new.cpp
/client/audiosvc/pub/hxaudstr.h
/client/core/hxplay.cpp
/client/core/pub/hxplay.h
/common/include/hxcore.h
/common/include/hxiids.h
/common/include/hxrendr.h
/datatype/avi/fileformat/avistrm.cpp
/datatype/common/audrend/audrendf.cpp
/datatype/common/audrend/pub/audrendf.h
/mkv/fileformat/mkv_file_format.cpp
/datatype/mp4/fileformat/fswtchr_passthrough.cpp
/datatype/mp4/fileformat/pub/qtatoms.h
/datatype/mp4/fileformat/qtatmmgs.cpp
/datatype/mp4/fileformat/qttrack.cpp
/datatype-restricted/ac3/renderer/ac3fmt.cpp
/datatype-restricted/ac3/renderer/ac3rend.cpp
/datatype-restricted/ac3/renderer/pub/ac3fmt.h
/datatype-restricted/ac3/renderer/pub/ac3rend.h
/datatype-restricted/ac3/renderer/dllumakefil
/datatype-restricted/ac3/renderer/libumakefil
/player/kit/android/4.0/PlayerDriver.cpp
Index: qtatmmgs.cpp
===================================================================
RCS file: /cvsroot/datatype/mp4/fileformat/qtatmmgs.cpp,v
retrieving revision 1.33.2.22.2.17.2.1
retrieving revision 1.33.2.22.2.17.2.2
diff -u -d -r1.33.2.22.2.17.2.1 -r1.33.2.22.2.17.2.2
--- qtatmmgs.cpp 29 Mar 2012 09:49:07 -0000 1.33.2.22.2.17.2.1
+++ qtatmmgs.cpp 28 May 2012 14:19:22 -0000 1.33.2.22.2.17.2.2
@@ -57,6 +57,91 @@
#include "qtatmmgs_inline.h"
#endif // QTCONFIG_SPEED_OVER_SIZE
+
+
+#if defined(HELIX_FEATURE_HDMI_AC3_PASSTHROUGH)
+// **************************************************************************
+// parse mp4 files to get channel number and bit rate
+// **************************************************************************
+#define AV_CH_FRONT_LEFT 0x00000001
+#define AV_CH_FRONT_RIGHT 0x00000002
+#define AV_CH_FRONT_CENTER 0x00000004
+#define AV_CH_LOW_FREQUENCY 0x00000008
+#define AV_CH_BACK_LEFT 0x00000010
+#define AV_CH_BACK_RIGHT 0x00000020
+#define AV_CH_FRONT_LEFT_OF_CENTER 0x00000040
+#define AV_CH_FRONT_RIGHT_OF_CENTER 0x00000080
+#define AV_CH_BACK_CENTER 0x00000100
+#define AV_CH_SIDE_LEFT 0x00000200
+#define AV_CH_SIDE_RIGHT 0x00000400
+#define AV_CH_TOP_CENTER 0x00000800
+#define AV_CH_TOP_FRONT_LEFT 0x00001000
+#define AV_CH_TOP_FRONT_CENTER 0x00002000
+#define AV_CH_TOP_FRONT_RIGHT 0x00004000
+#define AV_CH_TOP_BACK_LEFT 0x00008000
+#define AV_CH_TOP_BACK_CENTER 0x00010000
+#define AV_CH_TOP_BACK_RIGHT 0x00020000
+#define AV_CH_STEREO_LEFT 0x20000000
+#define AV_CH_STEREO_RIGHT 0x40000000
+#define AV_CH_WIDE_LEFT 0x0000000080000000ULL
+#define AV_CH_WIDE_RIGHT 0x0000000100000000ULL
+#define AV_CH_SURROUND_DIRECT_LEFT 0x0000000200000000ULL
+#define AV_CH_SURROUND_DIRECT_RIGHT 0x0000000400000000ULL
+
+#define AV_CH_LAYOUT_NATIVE 0x8000000000000000ULL
+
+#define AV_CH_LAYOUT_MONO (AV_CH_FRONT_CENTER)
+#define AV_CH_LAYOUT_STEREO (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
+#define AV_CH_LAYOUT_2POINT1 (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)
+#define AV_CH_LAYOUT_2_1 (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
+#define AV_CH_LAYOUT_SURROUND (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
+#define AV_CH_LAYOUT_3POINT1 (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY)
+#define AV_CH_LAYOUT_4POINT0 (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
+#define AV_CH_LAYOUT_4POINT1 (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY)
+#define AV_CH_LAYOUT_2_2 \
(AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) +#define AV_CH_LAYOUT_QUAD \
(AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) +#define AV_CH_LAYOUT_5POINT0 \
(AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) +#define \
AV_CH_LAYOUT_5POINT1 (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) +#define \
AV_CH_LAYOUT_5POINT0_BACK \
(AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) +#define \
AV_CH_LAYOUT_5POINT1_BACK (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) \
+#define AV_CH_LAYOUT_6POINT0 (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) \
+#define AV_CH_LAYOUT_6POINT0_FRONT \
(AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) +#define \
AV_CH_LAYOUT_HEXAGONAL (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) +#define \
AV_CH_LAYOUT_6POINT1 (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) +#define \
AV_CH_LAYOUT_6POINT1_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) +#define \
AV_CH_LAYOUT_6POINT1_FRONT (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) \
+#define AV_CH_LAYOUT_7POINT0 \
(AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) +#define \
AV_CH_LAYOUT_7POINT0_FRONT \
(AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) \
+#define AV_CH_LAYOUT_7POINT1 \
(AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) +#define \
AV_CH_LAYOUT_7POINT1_WIDE \
(AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) \
+#define AV_CH_LAYOUT_7POINT1_WIDE_BACK \
(AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) \
+#define AV_CH_LAYOUT_OCTAGONAL \
(AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) +#define \
AV_CH_LAYOUT_STEREO_DOWNMIX (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT) +
+int av_get_channel_layout_nb_channels(uint64_t channel_layout)
+{
+ int count;
+ uint64_t x = channel_layout;
+ for (count = 0; x; count++)
+ x &= x-1;
+ return count;
+}
+
+const UINT16 avpriv_ac3_channel_layout_tab[8] = {
+ AV_CH_LAYOUT_STEREO,
+ AV_CH_LAYOUT_MONO,
+ AV_CH_LAYOUT_STEREO,
+ AV_CH_LAYOUT_SURROUND,
+ AV_CH_LAYOUT_2_1,
+ AV_CH_LAYOUT_4POINT0,
+ AV_CH_LAYOUT_2_2,
+ AV_CH_LAYOUT_5POINT0
+};
+
+// end parse mp4 files
+// **************************************************************************
+#endif
+
/****************************************************************************
* Manager Tools
*/
@@ -2158,6 +2243,10 @@
#endif /* #ifndef HELIX_FEATURE_3GPPCLIENT_ONLY */
HX_RESULT retVal = HXR_OK;
+ UINT16 ulVersion;
+ UINT8* pVersion;
+ UINT16 uEc3info, uAc3info, uAcmod, uLfeon, uBsmod;
+
// Form Track name
switch (m_TrackType)
@@ -2333,15 +2422,98 @@
pSampleDescEntry)->pDecoderSpecificInfo;
}
break;
+#if defined(HELIX_FEATURE_HDMI_AC3_PASSTHROUGH)
case QT_ac3:
+ pVersion = ((CQT_stsd_Atom::AudioArrayEntry*) \
pSampleDescEntry)->pVersion; + if (pVersion)
+ {
+ UnpackUINT16BE(pVersion, 2, &ulVersion);
+ }
+ char* pAc3Info ;
+ switch ( ulVersion )
+ {
+ case CQT_stsd_Atom::SoundSampleDescriptionVersion0:
+ {
+ if ( ulSampleDescEntrySize >= sizeof( \
CQT_stsd_Atom::AudioAC3Entry ) ) + {
+ pAc3Info = \
(char*)(((CQT_stsd_Atom::AudioAC3Entry*)pSampleDescEntry)->pAc3Chnl); + \
} + break;
+ }
+ case CQT_stsd_Atom::SoundSampleDescriptionVersion1:
+ {
+ if ( ulSampleDescEntrySize >= sizeof( \
CQT_stsd_Atom::AudioAC3EntryV1) ) + {
+ pAc3Info = \
(char*)(((CQT_stsd_Atom::AudioAC3EntryV1*)pSampleDescEntry)->pAc3Chnl); + \
} + break;
+ }
+ case CQT_stsd_Atom::SoundSampleDescriptionVersion2:
+ {
+ if ( ulSampleDescEntrySize >= sizeof( \
CQT_stsd_Atom::AudioAC3EntryV2) ) + {
+ pAc3Info = \
(char*)(((CQT_stsd_Atom::AudioAC3EntryV2*)pSampleDescEntry)->pAc3Chnl); + \
} + break;
+ }
+ default:
+ break;
+ }
+ uAc3info = pAc3Info[0]<<16 | pAc3Info[1] << 8 | pAc3Info[2];
+ uBsmod = (uAc3info >> 14) & 0x7;
+ uAcmod = (uAc3info >> 11) & 0x7;
+ uLfeon = (uAc3info >> 10) & 0x1;
+ m_ulChannels = ((int[]){2,1,2,3,3,4,4,5})[uAcmod] + uLfeon;
+ m_ulOpaqueDataSize = 0;
+ m_pOpaqueData = NULL;
+ retVal = HXR_OK;
+ break;
case QT_ec3:
- m_ulOpaqueDataSize = 0;
+ pVersion = ((CQT_stsd_Atom::AudioArrayEntry*) pSampleDescEntry)->pVersion;
+ if (pVersion)
+ {
+ UnpackUINT16BE(pVersion, 2, &ulVersion);
+ }
+ char* pEc3Info ;
+ int ulayout ;
+ switch ( ulVersion )
+ {
+ case CQT_stsd_Atom::SoundSampleDescriptionVersion0:
+ {
+ pEc3Info = (char*)(((CQT_stsd_Atom::AudioEC3Entry*)pSampleDescEntry)->pEc3Chnl);
+ break;
+ }
+ case CQT_stsd_Atom::SoundSampleDescriptionVersion1:
+ {
+ pEc3Info = (char*)(((CQT_stsd_Atom::AudioEC3EntryV1*)pSampleDescEntry)->pEc3Chnl);
+ break;
+ }
+ case CQT_stsd_Atom::SoundSampleDescriptionVersion2:
+ {
+ pEc3Info = (char*)(((CQT_stsd_Atom::AudioEC3EntryV2*)pSampleDescEntry)->pEc3Chnl);
+ break;
+ }
+ default:
+ break;
+ }
+ uEc3info = pEc3Info[0]<<16 | pEc3Info[1] << 8 | pEc3Info[2];
+ uBsmod = (uEc3info >> 12) & 0x1f;
+ uAcmod = (uEc3info >> 9) & 0x7;
+ ulayout = (uEc3info >> 8) & 0x1;
+ ulayout = avpriv_ac3_channel_layout_tab[uAcmod];
+ if (uLfeon)
+ ulayout = ulayout |= AV_CH_LOW_FREQUENCY;
+
+ m_ulChannels = av_get_channel_layout_nb_channels(ulayout);
+
+ m_ulOpaqueDataSize = 0;
m_pOpaqueData = NULL;
retVal = HXR_OK;
- break;
- default:
- retVal = HXR_IGNORE;
- break;
+ break;
+#endif
+ default:
+ retVal = HXR_IGNORE;
+ break;
}
}
else
Index: qttrack.cpp
===================================================================
RCS file: /cvsroot/datatype/mp4/fileformat/qttrack.cpp,v
retrieving revision 1.30.2.3.20.14.2.1
retrieving revision 1.30.2.3.20.14.2.2
diff -u -d -r1.30.2.3.20.14.2.1 -r1.30.2.3.20.14.2.2
--- qttrack.cpp 29 Mar 2012 09:49:08 -0000 1.30.2.3.20.14.2.1
+++ qttrack.cpp 28 May 2012 14:19:22 -0000 1.30.2.3.20.14.2.2
@@ -632,13 +632,6 @@
{
pHeader->SetPropertyULONG32("Channels", nChannels);
}
-#ifdef DOLBY_DDPDEC51_TEGRA_MULTICHANNEL
- if(!strcmp(m_TrackInfo.GetMimeType(),"audio/AC3") || \
!strcmp(m_TrackInfo.GetMimeType(),"audio/EAC3") || \
!strcmp(m_TrackInfo.GetMimeType(),"audio/AC3-encrypted"))
- {
- pHeader->SetPropertyULONG32("Channels", 2);
- pHeader->SetPropertyULONG32("BitsPerSample", 16);
- }
-#endif
}
break;
}
_______________________________________________
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