void CustomPublisherListener::on_data_available(DDSDataReader * reader) { DDSPublicationBuiltinTopicDataDataReader * builtin_reader = static_cast<DDSPublicationBuiltinTopicDataDataReader *>(reader); DDS_PublicationBuiltinTopicDataSeq data_seq; DDS_SampleInfoSeq info_seq; DDS_ReturnCode_t retcode = builtin_reader->take( data_seq, info_seq, DDS_LENGTH_UNLIMITED, DDS_ANY_SAMPLE_STATE, DDS_ANY_VIEW_STATE, DDS_ANY_INSTANCE_STATE); if (retcode == DDS_RETCODE_NO_DATA) { return; } if (retcode != DDS_RETCODE_OK) { fprintf(stderr, "failed to access data from the built-in reader\n"); return; } for (auto i = 0; i < data_seq.length(); ++i) { if (info_seq[i].valid_data) { add_information( info_seq[i].instance_handle, data_seq[i].topic_name, data_seq[i].type_name, EntityType::Publisher); } else { remove_information(info_seq[i].instance_handle, EntityType::Publisher); } } if (data_seq.length() > 0) { this->trigger_graph_guard_condition(); } builtin_reader->return_loan(data_seq, info_seq); }
void extract_cli_parser_c::init_parser() { add_information(YT("mkvextract <mode> <source-filename> [options] <extraction-spec>")); add_section_header(YT("Usage")); add_information(YT("mkvextract tracks <inname> [options] [TID1:out1 [TID2:out2 ...]]")); add_information(YT("mkvextract tags <inname> [options]")); add_information(YT("mkvextract attachments <inname> [options] [AID1:out1 [AID2:out2 ...]]")); add_information(YT("mkvextract chapters <inname> [options]")); add_information(YT("mkvextract cuesheet <inname> [options]")); add_information(YT("mkvextract timecodes_v2 <inname> [TID1:out1 [TID2:out2 ...]]")); add_information(YT("mkvextract <-h|-V>")); add_separator(); add_information(YT("The first word tells mkvextract what to extract. The second must be the source file. " "There are few global options that can be used with all modes. " "All other options depend on the mode.")); add_section_header(YT("Global options")); OPT("f|parse-fully", set_parse_fully, YT("Parse the whole file instead of relying on the index.")); add_common_options(); add_section_header(YT("Track extraction")); add_information(YT("The first mode extracts some tracks to external files.")); OPT("c=charset", set_charset, YT("Convert text subtitles to this charset (default: UTF-8).")); OPT("cuesheet", set_cuesheet, YT("Also try to extract the CUE sheet from the chapter information and tags for this track.")); OPT("blockadd=level", set_blockadd, YT("Keep only the BlockAdditions up to this level (default: keep all levels)")); OPT("raw", set_raw, YT("Extract the data to a raw file.")); OPT("fullraw", set_fullraw, YT("Extract the data to a raw file including the CodecPrivate as a header.")); add_informational_option("TID:out", YT("Write track with the ID TID to the file 'out'.")); add_section_header(YT("Example")); add_information(YT("mkvextract tracks \"a movie.mkv\" 2:audio.ogg -c ISO8859-1 3:subs.srt")); add_separator(); add_section_header(YT("Tag extraction")); add_information(YT("The second mode extracts the tags and converts them to XML. The output is written to the standard output. The output can be used as a source for mkvmerge.")); add_section_header(YT("Example")); add_information(YT("mkvextract tags \"a movie.mkv\" > movie_tags.xml")); add_section_header(YT("Attachment extraction")); add_information(YT("The third mode extracts attachments from the source file.")); add_informational_option("AID:outname", YT("Write the attachment with the ID 'AID' to 'outname'.")); add_section_header(YT("Example")); add_information(YT("mkvextract attachments \"a movie.mkv\" 4:cover.jpg")); add_section_header(YT("Chapter extraction")); add_information(YT("The fourth mode extracts the chapters and converts them to XML. The output is written to the standard output. The output can be used as a source for mkvmerge.")); OPT("s|simple", set_simple, YT("Exports the chapter information in the simple format used in OGM tools (CHAPTER01=... CHAPTER01NAME=...).")); add_section_header(YT("Example")); add_information(YT("mkvextract chapters \"a movie.mkv\" > movie_chapters.xml")); add_section_header(YT("CUE sheet extraction")); add_information(YT("The fifth mode tries to extract chapter information and tags and outputs them as a CUE sheet. This is the reverse of using a CUE sheet with " "mkvmerge's '--chapters' option.")); add_section_header(YT("Example")); add_information(YT("mkvextract cuesheet \"audiofile.mka\" > audiofile.cue")); add_section_header(YT("Timecode extraction")); add_information(YT("The sixth mode finds the timecodes of all blocks for a track and outputs a timecode v2 file with these timecodes.")); add_section_header(YT("Example")); add_information(YT("mkvextract timecodes_v2 \"a movie.mkv\" 1:timecodes_track1.txt")); add_hook(cli_parser_c::ht_unknown_option, std::bind(&extract_cli_parser_c::set_mode_or_extraction_spec, this)); }