Merge commit '25f613f8be3b51e4396b93cda131e4631ba54302'
authorMichael Niedermayer <michaelni@gmx.at>
Wed, 4 Mar 2015 18:24:12 +0000 (19:24 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Wed, 4 Mar 2015 18:28:53 +0000 (19:28 +0100)
* commit '25f613f8be3b51e4396b93cda131e4631ba54302':
  dca: Move syncword definitions to a separate header

Conflicts:
libavcodec/dca_parser.c
libavformat/dtsdec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/dca.c
libavcodec/dca.h
libavcodec/dca_parser.c
libavcodec/dca_syncwords.h
libavcodec/dcadec.c
libavformat/dtsdec.c
libavformat/spdifenc.c

Simple merge
Simple merge
@@@ -35,9 -36,9 +36,9 @@@ typedef struct DCAParseContext 
  } DCAParseContext;
  
  #define IS_MARKER(state, i, buf, buf_size) \
-     ((state == DCA_MARKER_14B_LE && (i < buf_size - 2) && (buf[i + 1] & 0xF0) == 0xF0 &&  buf[i + 2]         == 0x07) || \
-      (state == DCA_MARKER_14B_BE && (i < buf_size - 2) &&  buf[i + 1]         == 0x07 && (buf[i + 2] & 0xF0) == 0xF0) || \
-       state == DCA_MARKER_RAW_LE || state == DCA_MARKER_RAW_BE || state == DCA_HD_MARKER)
+     ((state == DCA_SYNCWORD_CORE_14B_LE && (i < buf_size - 2) && (buf[i + 1] & 0xF0) == 0xF0 &&  buf[i + 2]         == 0x07) || \
+      (state == DCA_SYNCWORD_CORE_14B_BE && (i < buf_size - 2) &&  buf[i + 1]         == 0x07 && (buf[i + 2] & 0xF0) == 0xF0) || \
 -      state == DCA_SYNCWORD_CORE_LE || state == DCA_SYNCWORD_CORE_BE)
++      state == DCA_SYNCWORD_CORE_LE || state == DCA_SYNCWORD_CORE_BE || state == DCA_SYNCWORD_SUBSTREAM)
  
  /**
   * Find the end of the current frame in the bitstream.
@@@ -58,7 -59,11 +59,7 @@@ static int dca_find_frame_end(DCAParseC
          for (i = 0; i < buf_size; i++) {
              state = (state << 8) | buf[i];
              if (IS_MARKER(state, i, buf, buf_size)) {
-                 if (!pc1->lastmarker || state == pc1->lastmarker || pc1->lastmarker == DCA_HD_MARKER) {
 -                if (pc1->lastmarker && state == pc1->lastmarker) {
 -                    start_found = 1;
 -                    i++;
 -                    break;
 -                } else if (!pc1->lastmarker) {
++                if (!pc1->lastmarker || state == pc1->lastmarker || pc1->lastmarker == DCA_SYNCWORD_SUBSTREAM) {
                      start_found     = 1;
                      pc1->lastmarker = state;
                      i++;
@@@ -71,9 -76,9 +72,9 @@@
          for (; i < buf_size; i++) {
              pc1->size++;
              state = (state << 8) | buf[i];
-             if (state == DCA_HD_MARKER && !pc1->hd_pos)
+             if (state == DCA_SYNCWORD_SUBSTREAM && !pc1->hd_pos)
                  pc1->hd_pos = pc1->size;
-             if (IS_MARKER(state, i, buf, buf_size) && (state == pc1->lastmarker || pc1->lastmarker == DCA_HD_MARKER)) {
 -            if (state == pc1->lastmarker && IS_MARKER(state, i, buf, buf_size)) {
++            if (IS_MARKER(state, i, buf, buf_size) && (state == pc1->lastmarker || pc1->lastmarker == DCA_SYNCWORD_SUBSTREAM)) {
                  if (pc1->framesize > pc1->size)
                      continue;
                  pc->frame_start_found = 0;
index 0000000,5abd480..24f43a4
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,37 +1,37 @@@
 - * This file is part of Libav.
+ /*
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * FFmpeg is free software; you can redistribute it and/or
+  * modify it under the terms of the GNU Lesser General Public
+  * License as published by the Free Software Foundation; either
+  * version 2.1 of the License, or (at your option) any later version.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * FFmpeg is distributed in the hope that it will be useful,
+  * but WITHOUT ANY WARRANTY; without even the implied warranty of
+  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+  * Lesser General Public License for more details.
+  *
+  * You should have received a copy of the GNU Lesser General Public
++ * License along with FFmpeg; if not, write to the Free Software
+  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+  */
+ #ifndef AVCODEC_DCA_SYNCWORDS_H
+ #define AVCODEC_DCA_SYNCWORDS_H
+ enum DCASyncwords {
+     DCA_SYNCWORD_CORE_BE        = 0x7FFE8001,
+     DCA_SYNCWORD_CORE_LE        = 0xFE7F0180,
+     DCA_SYNCWORD_CORE_14B_BE    = 0x1FFFE800,
+     DCA_SYNCWORD_CORE_14B_LE    = 0xFF1F00E8,
+     DCA_SYNCWORD_XCH            = 0x5A5A5A5A,
+     DCA_SYNCWORD_XXCH           = 0x47004A03,
+     DCA_SYNCWORD_X96            = 0x1D95F262,
+     DCA_SYNCWORD_XBR            = 0x655E315E,
+     DCA_SYNCWORD_LBR            = 0x0A801921,
+     DCA_SYNCWORD_XLL            = 0x41A29547,
+     DCA_SYNCWORD_SUBSTREAM      = 0x64582025,
+     DCA_SYNCWORD_SUBSTREAM_CORE = 0x02B09261,
+ };
+ #endif /* AVCODEC_DCA_SYNCWORDS_H */
Simple merge
   */
  
  #include "libavcodec/bytestream.h"
- #include "libavcodec/get_bits.h"
 +#include "libavcodec/dca.h"
+ #include "libavcodec/dca_syncwords.h"
++#include "libavcodec/get_bits.h"
  #include "avformat.h"
  #include "rawdec.h"
  
@@@ -49,71 -38,25 +46,71 @@@ static int dts_probe(AVProbeData *p
          bufp = buf;
          state = (state << 16) | bytestream_get_be16(&bufp);
  
 +        if (buf - p->buf >= 4)
 +            diff += FFABS(((int16_t)AV_RL16(buf)) - (int16_t)AV_RL16(buf-4));
 +
          /* regular bitstream */
-         if (state == DCA_MARKER_RAW_BE)
 -        if (state == DCA_SYNCWORD_CORE_BE || state == DCA_SYNCWORD_CORE_LE)
 -            markers[0]++;
++        if (state == DCA_SYNCWORD_CORE_BE)
 +            marker = 0;
-         else if (state == DCA_MARKER_RAW_LE)
++        else if (state == DCA_SYNCWORD_CORE_LE)
 +            marker = 1;
  
          /* 14 bits big-endian bitstream */
-         else if (state == DCA_MARKER_14B_BE &&
 -        if (state == DCA_SYNCWORD_CORE_14B_BE)
 -            if ((bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0)
 -                markers[1]++;
++        else if (state == DCA_SYNCWORD_CORE_14B_BE &&
 +                 (bytestream_get_be16(&bufp) & 0xFFF0) == 0x07F0)
 +            marker = 2;
  
          /* 14 bits little-endian bitstream */
-         else if (state == DCA_MARKER_14B_LE &&
 -        if (state == DCA_SYNCWORD_CORE_14B_LE)
 -            if ((bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007)
 -                markers[2]++;
++        else if (state == DCA_SYNCWORD_CORE_14B_LE &&
 +                 (bytestream_get_be16(&bufp) & 0xF0FF) == 0xF007)
 +            marker = 3;
 +        else
 +            continue;
 +
 +        if (avpriv_dca_convert_bitstream(buf-2, 12, hdr, 12) < 0)
 +            continue;
 +
 +        init_get_bits(&gb, hdr, 96);
 +        skip_bits_long(&gb, 39);
 +
 +        sample_blocks = get_bits(&gb, 7) + 1;
 +        if (sample_blocks < 8)
 +            continue;
 +
 +        framesize = get_bits(&gb, 14) + 1;
 +        if (framesize < 95)
 +            continue;
 +
 +        skip_bits(&gb, 6);
 +        sr_code = get_bits(&gb, 4);
 +        sample_rate = avpriv_dca_sample_rates[sr_code];
 +        if (sample_rate == 0)
 +            continue;
 +
 +        get_bits(&gb, 5);
 +        if (get_bits(&gb, 1))
 +            continue;
 +
 +        skip_bits_long(&gb, 9);
 +        lfe = get_bits(&gb, 2);
 +        if (lfe > 2)
 +            continue;
 +
 +        marker += 4* sr_code;
 +
 +        markers[marker] ++;
      }
 -    sum = markers[0] + markers[1] + markers[2];
 -    max = markers[1] > markers[0];
 -    max = markers[2] > markers[max] ? 2 : max;
 +
 +    sum = max = 0;
 +    for (i=0; i<FF_ARRAY_ELEMS(markers); i++) {
 +        sum += markers[i];
 +        if (markers[max] < markers[i])
 +            max = i;
 +    }
 +
      if (markers[max] > 3 && p->buf_size / markers[max] < 32*1024 &&
 -        markers[max] * 4 > sum * 3)
 +        markers[max] * 4 > sum * 3 &&
 +        diff / p->buf_size > 200)
          return AVPROBE_SCORE_EXTENSION + 1;
  
      return 0;
Simple merge