void dts_reader_c::read_headers() { try { if (m_in->read(m_buf[m_cur_buf], READ_SIZE) != READ_SIZE) throw mtx::input::header_parsing_x(); m_in->setFilePointer(0, seek_beginning); } catch (...) { throw mtx::input::open_x(); } detect_dts(m_buf[m_cur_buf], READ_SIZE, m_dts14_to_16, m_swap_bytes); mxdebug_if(m_debug, boost::format("DTS: 14->16 %1% swap %2%\n") % m_dts14_to_16 % m_swap_bytes); decode_buffer(READ_SIZE); int pos = find_dts_header(reinterpret_cast<const unsigned char *>(m_buf[m_cur_buf]), READ_SIZE, &m_dtsheader); if (0 > pos) throw mtx::input::header_parsing_x(); m_ti.m_id = 0; // ID for this track. show_demuxer_info(); }
int mpeg_ts_track_c::new_stream_a_dts() { add_pes_payload_to_probe_data(); if (-1 == find_dts_header(m_probe_data->get_buffer(), m_probe_data->get_size(), &a_dts_header)) return FILE_STATUS_MOREDATA; m_apply_dts_timecode_fix = true; return 0; }
generic_packetizer_c * avi_reader_c::create_dts_packetizer(int aid) { try { AVI_set_audio_track(m_avi, aid); long audio_position = AVI_get_audio_position_index(m_avi); unsigned int num_read = 0; int dts_position = -1; byte_buffer_c buffer; dts_header_t dtsheader; while ((-1 == dts_position) && (10 > num_read)) { int chunk_size = AVI_read_audio_chunk(m_avi, nullptr); if (0 < chunk_size) { memory_cptr chunk = memory_c::alloc(chunk_size); AVI_read_audio_chunk(m_avi, reinterpret_cast<char *>(chunk->get_buffer())); buffer.add(chunk); dts_position = find_dts_header(buffer.get_buffer(), buffer.get_size(), &dtsheader); } else { dts_position = find_dts_header(buffer.get_buffer(), buffer.get_size(), &dtsheader, true); break; } } if (-1 == dts_position) throw false; AVI_set_audio_position_index(m_avi, audio_position); return new dts_packetizer_c(this, m_ti, dtsheader); } catch (...) { mxerror_tid(m_ti.m_fname, aid + 1, Y("Could not find valid DTS headers in this track's first frames.\n")); return nullptr; } }
bool wav_dts_demuxer_c::probe(mm_io_cptr &io) { io->save_pos(); int len = io->read(m_buf[m_cur_buf]->get_buffer(), DTS_READ_SIZE); io->restore_pos(); if (detect_dts(m_buf[m_cur_buf]->get_buffer(), len, m_pack_14_16, m_swap_bytes)) { len = decode_buffer(len); int pos = find_consecutive_dts_headers(m_buf[m_cur_buf]->get_buffer(), len, 5); if (0 <= pos) { if (0 > find_dts_header(m_buf[m_cur_buf]->get_buffer() + pos, len - pos, &m_dtsheader)) return false; mxverb(3, boost::format("DTSinWAV: 14->16 %1% swap %2%\n") % m_pack_14_16 % m_swap_bytes); return true; } } return false; }