[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