bamInfo recognizes session recordings
This commit is contained in:
parent
220c028394
commit
86526ce0b4
|
|
@ -3,7 +3,7 @@
|
|||
#define LOCAL_LIBS \
|
||||
progbase
|
||||
#define OTHER_LIBS \
|
||||
parametrics:c collide:c chan:c char:c \
|
||||
recorder:c parametrics:c collide:c chan:c char:c \
|
||||
egg:c pnmimagetypes:c pgraph:c gobj:c \
|
||||
putil:c linmath:c event:c express:c pandaegg:m panda:m pandaexpress:m \
|
||||
interrogatedb:c dtoolutil:c dtoolbase:c dconfig:c dtoolconfig:m dtool:m pystub
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@
|
|||
#include "bamFile.h"
|
||||
#include "pandaNode.h"
|
||||
#include "geomNode.h"
|
||||
#include "recorderHeader.h"
|
||||
#include "recorderFrame.h"
|
||||
#include "recorderTable.h"
|
||||
#include "dcast.h"
|
||||
#include "pvector.h"
|
||||
|
||||
|
|
@ -125,7 +128,6 @@ get_info(const Filename &filename) {
|
|||
nout << filename << " : Bam version " << bam_file.get_file_major_ver()
|
||||
<< "." << bam_file.get_file_minor_ver() << "\n";
|
||||
|
||||
typedef pvector<TypedWritable *> Objects;
|
||||
Objects objects;
|
||||
TypedWritable *object = bam_file.read_object();
|
||||
while (object != (TypedWritable *)NULL || !bam_file.is_eof()) {
|
||||
|
|
@ -134,13 +136,18 @@ get_info(const Filename &filename) {
|
|||
}
|
||||
object = bam_file.read_object();
|
||||
}
|
||||
bam_file.resolve();
|
||||
if (!bam_file.resolve()) {
|
||||
nout << "Unable to fully resolve file.\n";
|
||||
}
|
||||
bam_file.close();
|
||||
|
||||
if (objects.size() == 1 &&
|
||||
objects[0]->is_of_type(PandaNode::get_class_type())) {
|
||||
describe_scene_graph(DCAST(PandaNode, objects[0]));
|
||||
|
||||
} else if (!objects.empty() && objects[0]->is_of_type(RecorderHeader::get_class_type())) {
|
||||
describe_session(DCAST(RecorderHeader, objects[0]), objects);
|
||||
|
||||
} else {
|
||||
for (int i = 0; i < (int)objects.size(); i++) {
|
||||
describe_general_object(objects[i]);
|
||||
|
|
@ -182,6 +189,48 @@ describe_scene_graph(PandaNode *node) {
|
|||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: BamInfo::describe_session
|
||||
// Access: Private
|
||||
// Description: Called for Bam files that contain a recorded session
|
||||
// table.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void BamInfo::
|
||||
describe_session(RecorderHeader *header, const BamInfo::Objects &objects) {
|
||||
char time_buffer[1024];
|
||||
strftime(time_buffer, 1024, "%c",
|
||||
localtime(&header->_start_time));
|
||||
|
||||
pset<string> recorders;
|
||||
double last_timestamp = 0.0;
|
||||
|
||||
for (size_t i = 1; i < objects.size(); i++) {
|
||||
if (objects[i]->is_of_type(RecorderFrame::get_class_type())) {
|
||||
RecorderFrame *frame = DCAST(RecorderFrame, objects[i]);
|
||||
if (frame->_table_changed) {
|
||||
RecorderTable::Recorders::const_iterator ri;
|
||||
for (ri = frame->_table->_recorders.begin();
|
||||
ri != frame->_table->_recorders.end();
|
||||
++ri) {
|
||||
recorders.insert((*ri).first);
|
||||
}
|
||||
}
|
||||
last_timestamp = frame->_timestamp;
|
||||
}
|
||||
}
|
||||
|
||||
nout << "Session, " << last_timestamp
|
||||
<< " secs, " << objects.size() - 1 << " frames, "
|
||||
<< time_buffer << ".\n"
|
||||
<< "Recorders:";
|
||||
for (pset<string>::iterator ni = recorders.begin();
|
||||
ni != recorders.end();
|
||||
++ni) {
|
||||
nout << " " << (*ni);
|
||||
}
|
||||
nout << "\n";
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: BamInfo::describe_general_object
|
||||
// Access: Private
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "pvector.h"
|
||||
|
||||
class TypedWritable;
|
||||
class RecorderHeader;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : BamInfo
|
||||
|
|
@ -43,8 +44,11 @@ protected:
|
|||
virtual bool handle_args(Args &args);
|
||||
|
||||
private:
|
||||
typedef pvector<TypedWritable *> Objects;
|
||||
|
||||
bool get_info(const Filename &filename);
|
||||
void describe_scene_graph(PandaNode *node);
|
||||
void describe_session(RecorderHeader *header, const Objects &objects);
|
||||
void describe_general_object(TypedWritable *object);
|
||||
void list_hierarchy(PandaNode *node, int indent_level);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue