/**
 * gst_encoding_list_all_targets:
 * @categoryname: (allow-none): The category, for ex: #GST_ENCODING_CATEGORY_DEVICE.
 * Can be %NULL.
 *
 * List all available #GstEncodingTarget for the specified category, or all categories
 * if @categoryname is %NULL.
 *
 * Returns: (transfer full) (element-type GstEncodingTarget): The list of #GstEncodingTarget
 */
GList *
gst_encoding_list_all_targets (const gchar * categoryname)
{
  GList *res = NULL;
  gchar *topdir;
  gchar **encoding_target_dirs;

  const gchar *envvar = g_getenv ("GST_ENCODING_TARGET_PATH");
  if (envvar) {
    gint i;

    encoding_target_dirs = g_strsplit (envvar, G_SEARCHPATH_SEPARATOR_S, -1);
    for (i = 0; encoding_target_dirs[i]; i++)
      res =
          merge_targets (res, get_all_targets (encoding_target_dirs[i],
              categoryname));

    g_strfreev (encoding_target_dirs);
  }

  /* Get user-locals */
  topdir =
      g_build_filename (g_get_user_data_dir (), "gstreamer-" GST_API_VERSION,
      GST_ENCODING_TARGET_DIRECTORY, NULL);
  res = merge_targets (res, get_all_targets (topdir, categoryname));
  g_free (topdir);

  /* Get system-wide */
  topdir = g_build_filename (GST_DATADIR, "gstreamer-" GST_API_VERSION,
      GST_ENCODING_TARGET_DIRECTORY, NULL);
  res = merge_targets (res, get_all_targets (topdir, categoryname));
  g_free (topdir);

  return res;
}
示例#2
0
void
options_c::find_elements(kax_analyzer_c *analyzer) {
  ebml_element_cptr tracks(read_element<KaxTracks>(analyzer, Y("Track headers")));
  ebml_element_cptr info, tags, chapters, attachments;
  attachment_id_manager_cptr attachment_id_manager;

  for (auto &target_ptr : m_targets) {
    target_c &target = *target_ptr;
    if (dynamic_cast<segment_info_target_c *>(&target)) {
      if (!info)
        info = read_element<KaxInfo>(analyzer, Y("Segment information"));
      target.set_level1_element(info);

    } else if (dynamic_cast<tag_target_c *>(&target)) {
      if (!tags) {
        tags = read_element<KaxTags>(analyzer, Y("Tags"), false);
        if (!tags)
          tags = ebml_element_cptr(new KaxTags);
      }

      target.set_level1_element(tags, tracks);

    } else if (dynamic_cast<chapter_target_c *>(&target)) {
      if (!chapters) {
        chapters = read_element<KaxChapters>(analyzer, Y("Chapters"), false);
        if (!chapters)
          chapters = ebml_element_cptr(new KaxChapters);
      }

      target.set_level1_element(chapters, tracks);

    } else if (dynamic_cast<attachment_target_c *>(&target)) {
      if (!attachments) {
        attachments = read_element<KaxAttachments>(analyzer, Y("Attachments"), false);
        if (!attachments)
          attachments = ebml_element_cptr(new KaxAttachments);

        attachment_id_manager = std::make_shared<attachment_id_manager_c>(static_cast<EbmlMaster *>(attachments.get()), 1);
      }

      static_cast<attachment_target_c &>(target).set_id_manager(attachment_id_manager);
      target.set_level1_element(attachments);

    } else if (dynamic_cast<track_target_c *>(&target))
      target.set_level1_element(tracks);

    else
      assert(false);
  }

  merge_targets();
}