Ejemplo n.º 1
0
void
ogm_reader_c::identify() {
  std::vector<std::string> verbose_info;
  size_t i;

  // Check if a video track has a TITLE comment. If yes we use this as the
  // new segment title / global file title.
  for (i = 0; i < sdemuxers.size(); i++)
    if ((sdemuxers[i]->title != "") && (sdemuxers[i]->stype == OGM_STREAM_TYPE_V_MSCOMP)) {
      verbose_info.push_back(std::string("title:") + escape(sdemuxers[i]->title));
      break;
    }

  id_result_container(join(" ", verbose_info));

  for (i = 0; i < sdemuxers.size(); i++) {
    verbose_info.clear();

    if (sdemuxers[i]->language != "")
      verbose_info.push_back(std::string("language:") + escape(sdemuxers[i]->language));

    if ((sdemuxers[i]->title != "") && (sdemuxers[i]->stype != OGM_STREAM_TYPE_V_MSCOMP))
      verbose_info.push_back(std::string("track_name:") + escape(sdemuxers[i]->title));

    if ((0 != sdemuxers[i]->display_width) && (0 != sdemuxers[i]->display_height))
      verbose_info.push_back((boost::format("display_dimensions:%1%x%2%") % sdemuxers[i]->display_width % sdemuxers[i]->display_height).str());

    id_result_track(i, sdemuxers[i]->get_type(), sdemuxers[i]->get_codec(), verbose_info);
  }

  if (m_chapters.get())
    id_result_chapters(count_chapter_atoms(*m_chapters));
}
Ejemplo n.º 2
0
void
mpeg_ts_reader_c::identify() {
  std::vector<std::string> verbose_info;
  auto mpls_in = dynamic_cast<mm_mpls_multi_file_io_c *>(get_underlying_input_as_multi_file_io());
  if (mpls_in)
    mpls_in->create_verbose_identification_info(verbose_info);

  id_result_container(verbose_info);

  size_t i;
  for (i = 0; i < tracks.size(); i++) {
    mpeg_ts_track_ptr &track = tracks[i];

    if (!track->probed_ok)
      continue;

    const char *fourcc = FOURCC('M', 'P', 'G', '1') == track->fourcc ? "MPEG-1"
                       : FOURCC('M', 'P', 'G', '2') == track->fourcc ? "MPEG-2"
                       : FOURCC('A', 'V', 'C', '1') == track->fourcc ? "AVC/h.264"
                       : FOURCC('W', 'V', 'C', '1') == track->fourcc ? "VC1"
                       : FOURCC('M', 'P', '1', ' ') == track->fourcc ? "MPEG-1 layer 1"
                       : FOURCC('M', 'P', '2', ' ') == track->fourcc ? "MPEG-1 layer 2"
                       : FOURCC('M', 'P', '3', ' ') == track->fourcc ? "MPEG-1 layer 3"
                       : FOURCC('A', 'A', 'C', ' ') == track->fourcc ? "AAC"
                       : FOURCC('A', 'C', '3', ' ') == track->fourcc ? "AC3"
                       : FOURCC('D', 'T', 'S', ' ') == track->fourcc ? "DTS"
                       : FOURCC('T', 'R', 'H', 'D') == track->fourcc ? "TrueHD"
                       : FOURCC('P', 'G', 'S', ' ') == track->fourcc ? "HDMV PGS"
                       // : FOURCC('P', 'C', 'M', ' ') == track->fourcc ? "PCM"
                       // : FOURCC('L', 'P', 'C', 'M') == track->fourcc ? "LPCM"
                       :                                               nullptr;

    if (!fourcc)
      continue;

    verbose_info.clear();
    if (!track->language.empty())
      verbose_info.push_back((boost::format("language:%1%") % escape(track->language)).str());

    verbose_info.push_back((boost::format("ts_pid:%1%") % track->pid).str());

    std::string type = ES_AUDIO_TYPE == track->type ? ID_RESULT_TRACK_AUDIO
                     : ES_VIDEO_TYPE == track->type ? ID_RESULT_TRACK_VIDEO
                     :                                ID_RESULT_TRACK_SUBTITLES;

    id_result_track(i, type, fourcc, verbose_info);
  }

  if (!m_chapter_timecodes.empty())
    id_result_chapters(m_chapter_timecodes.size());
}