Ticket #7409: t7409_mythtv_dts_skip_dts_hd_v3.diff

File t7409_mythtv_dts_skip_dts_hd_v3.diff, 2.9 KB (added by taylor.ralph@…, 14 years ago)

final update (trunk 23210)

  • libs/libmythtv/avformatdecoder.cpp

     
    6363
    6464#define MAX_AC3_FRAME_SIZE 6144
    6565
     66// defines from libavcodec/dca.h
     67#define DCA_MARKER_RAW_BE 0x7FFE8001
     68#define DCA_MARKER_RAW_LE 0xFE7F0180
     69#define DCA_MARKER_14B_BE 0x1FFFE800
     70#define DCA_MARKER_14B_LE 0xFF1F00E8
     71#define DCA_HD_MARKER     0x64582025
     72
    6673static const float eps = 1E-5;
    6774
    6875static const int max_video_queue_size = 180;
     
    37323739        while (!have_err && len > 0)
    37333740        {
    37343741            int ret = 0;
     3742            bool dts = false;
    37353743            switch (ctype)
    37363744            {
    37373745                case CODEC_TYPE_AUDIO:
     
    38483856                    if (audioOut.do_passthru)
    38493857                    {
    38503858                        data_size = pkt->size;
    3851                         bool dts = CODEC_ID_DTS == curstream->codec->codec_id;
     3859                        dts = CODEC_ID_DTS == curstream->codec->codec_id;
    38523860                        ret = encode_frame(dts, ptr, len,
    38533861                                           audioSamples, data_size);
    38543862                        s = (char *)audioSamples;
     
    39403948
    39413949                    if (ret < 0)
    39423950                    {
    3943                         VERBOSE(VB_IMPORTANT, LOC_ERR +
    3944                                 "Unknown audio decoding error");
     3951                        if (dts && ret == -2)
     3952                        {
     3953                            VERBOSE(VB_AUDIO+VB_EXTRA, LOC +
     3954                                    "DTS frame not supported");
     3955                        }
     3956                        else
     3957                        {
     3958                            VERBOSE(VB_IMPORTANT, LOC_ERR +
     3959                                    "Unknown audio decoding error");
     3960                        }
    39453961                        have_err = true;
    39463962                        continue;
    39473963                    }
     
    45554571    if (dts)
    45564572    {
    45574573        enc_len = dts_syncinfo(data, &flags, &sample_rate, &bit_rate);
     4574        if (enc_len < 0)
     4575            return enc_len;
    45584576        int rate, sfreq, nblks;
    45594577        dts_decode_header(data, &rate, &nblks, &sfreq);
    45604578        nr_samples = nblks * 32;
     
    46704688    uint id = ((indata_ptr[0] << 24) | (indata_ptr[1] << 16) |
    46714689               (indata_ptr[2] << 8)  | (indata_ptr[3]));
    46724690
    4673     if (id != 0x7ffe8001)
    4674         return -1;
     4691    switch (id)
     4692    {
     4693        case DCA_MARKER_RAW_BE: break;
     4694        case DCA_MARKER_RAW_LE: return -2; // DTS frame not supported
     4695        case DCA_MARKER_14B_BE: return -2; // DTS frame not supported
     4696        case DCA_MARKER_14B_LE: return -2; // DTS frame not supported
     4697        case DCA_HD_MARKER:     return -2; // DTS frame not supported
     4698        default:                return -1; // DTS frame unknown
     4699    }
    46754700
    46764701    int ftype = indata_ptr[4] >> 7;
    46774702