---
 libavcodec/ac3.h        | 9 +++++++++
 libavcodec/ac3_parser.c | 5 ++++-
 libavcodec/ac3dec.c     | 1 +
 libavcodec/ac3dec.h     | 1 +
 4 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/libavcodec/ac3.h b/libavcodec/ac3.h
index 647432f..c68f80b 100644
--- a/libavcodec/ac3.h
+++ b/libavcodec/ac3.h
@@ -80,6 +80,14 @@ typedef enum {
     AC3_CHMODE_3F2R
 } AC3ChannelMode;
 
+/** Dolby Surround mode */
+typedef enum AC3DolbySurroundMode {
+    AC3_DSURMOD_NOTINDICATED = 0,
+    AC3_DSURMOD_OFF,
+    AC3_DSURMOD_ON,
+    AC3_DSURMOD_RESERVED
+} AC3DolbySurroundMode;
+
 typedef struct AC3BitAllocParameters {
     int sr_code;
     int sr_shift;
@@ -108,6 +116,7 @@ typedef struct AC3HeaderInfo {
     int surround_mix_level;                 ///< Surround mix level index
     uint16_t channel_map;
     int num_blocks;                         ///< number of audio blocks
+    uint8_t dolby_surround_mode;
     /** @} */
 
     /** @name Derived values
diff --git a/libavcodec/ac3_parser.c b/libavcodec/ac3_parser.c
index 4abcf16..5ea09f8 100644
--- a/libavcodec/ac3_parser.c
+++ b/libavcodec/ac3_parser.c
@@ -68,6 +68,9 @@ int avpriv_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo 
*hdr)
     hdr->center_mix_level   = 5;  // -4.5dB
     hdr->surround_mix_level = 6;  // -6.0dB
 
+    /* set default dolby surround mode */
+    hdr->dolby_surround_mode = AC3_DSURMOD_NOTINDICATED;
+
     if(hdr->bitstream_id <= 10) {
         /* Normal AC-3 */
         hdr->crc1 = get_bits(gbc, 16);
@@ -85,7 +88,7 @@ int avpriv_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo 
*hdr)
         hdr->channel_mode = get_bits(gbc, 3);
 
         if(hdr->channel_mode == AC3_CHMODE_STEREO) {
-            skip_bits(gbc, 2); // skip dsurmod
+            hdr->dolby_surround_mode = get_bits(gbc, 2);
         } else {
             if((hdr->channel_mode & 1) && hdr->channel_mode != AC3_CHMODE_MONO)
                 hdr->  center_mix_level =   center_levels[get_bits(gbc, 2)];
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 7172e63..730d8c9 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -274,6 +274,7 @@ static int parse_frame_header(AC3DecodeContext *s)
     s->num_blocks                   = hdr.num_blocks;
     s->frame_type                   = hdr.frame_type;
     s->substreamid                  = hdr.substreamid;
+    s->dolby_surround_mode          = hdr.dolby_surround_mode;
 
     if (s->lfe_on) {
         s->start_freq[s->lfe_ch]     = 0;
diff --git a/libavcodec/ac3dec.h b/libavcodec/ac3dec.h
index 7b4a528..d8e4d50 100644
--- a/libavcodec/ac3dec.h
+++ b/libavcodec/ac3dec.h
@@ -86,6 +86,7 @@ typedef struct AC3DecodeContext {
     int center_mix_level;                   ///< Center mix level index
     int surround_mix_level;                 ///< Surround mix level index
     int eac3;                               ///< indicates if current frame is 
E-AC-3
+    int dolby_surround_mode;                ///< dolby surround mode           
         (dsurmod)
 ///@}
 
 ///@name Frame syntax parameters
-- 
1.8.3.4 (Apple Git-47)

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to