20using RLock = boost::shared_lock<boost::shared_mutex>;
21using WLock = boost::unique_lock<boost::shared_mutex>;
23RecordPlayerFactory::RecordPlayerFactory() {
30 for (
auto iter = s_record_player_map_.begin();
31 iter != s_record_player_map_.end();) {
32 iter->second =
nullptr;
33 s_record_player_map_.erase(iter++);
41 const std::string& record_name) {
42 auto iter = s_record_player_map_.find(record_name);
43 if (iter == s_record_player_map_.end()) {
44 AERROR <<
"Failed to get " << record_name <<
" related player pointer.";
47 iter->second =
nullptr;
48 s_record_player_map_.erase(record_name);
52 std::find(loaded_record_.begin(), loaded_record_.end(), record_name);
53 if (vec_iter != loaded_record_.end()) {
54 loaded_record_.erase(vec_iter);
61 const std::string& record_name,
const std::string& record_file_path) {
67 std::vector<std::string> opt_black_channels;
70 opt_black_channels.push_back(
"/apollo/hmi/status");
71 opt_black_channels.push_back(
"/apollo/monitor/system_status");
72 opt_black_channels.push_back(
"/apollo/cyber/record_info");
74 opt_black_channels.end());
84 const std::string node_name =
"record_player_factory_" + record_name;
85 s_record_player_map_[record_name] = std::unique_ptr<Player>(
87 s_record_player_map_[record_name]->Init();
90 loaded_record_.push_back(record_name);
96 for (
auto iter = s_record_player_map_.begin();
97 iter != s_record_player_map_.end(); iter++) {
98 records->push_back(iter->first);
102 current_record_ = record_name;
108 auto iter = s_record_player_map_.find(record_name);
109 if (iter == s_record_player_map_.end()) {
110 AERROR <<
"Failed to get " << record_name <<
" related player pointer.";
113 return iter->second.get();
119 return loaded_record_.size();
132 const std::string& record_name) {
135 std::find(loaded_record_.begin(), loaded_record_.end(), record_name);
136 if (iter == loaded_record_.end()) {
137 AERROR <<
"Current record is not loaded,invalid operation!";
140 loaded_record_.erase(iter);
141 loaded_record_.push_back(record_name);
147 AERROR <<
"No need to remove record.";
152 auto iter = loaded_record_.begin();
153 *remove_record_id = *loaded_record_.begin();
154 while (iter != loaded_record_.end()) {
156 if (*iter != current_record_) {
157 *remove_record_id = *iter;
std::string GetCurrentRecord()
Player * GetRecordPlayer(const std::string &record_name)
void SetCurrentRecord(const std::string &record_name)
bool RemoveLRURecord(std::string *remove_record_id)
void GetAllRecords(std::vector< std::string > *records)
bool EnableContinueLoad()
void IncreaseRecordPriority(const std::string &record_name)
bool EnableContinuePreload()
bool RegisterRecordPlayer(const std::string &record_namem, const std::string &record_file_path)
void UnregisterRecordPlayer(const std::string &record_name)
bool Init(const char *binary_name, const std::string &dag_info)
std::unique_ptr< Node > CreateNode(const std::string &node_name, const std::string &name_space)
boost::shared_lock< boost::shared_mutex > RLock
boost::unique_lock< boost::shared_mutex > WLock
std::set< std::string > black_channels
bool is_play_all_channels
std::set< std::string > files_to_play