Commit dee93d1de44f481eb3bc9376a505bece3a1a3a0a

Authored by Charles Otto
1 parent 5735462e

Fix an issue preventing stream from working correctly when called via project

Basically, description() now relies on firstAvailablePropertyIndex being
set correctly, and this is done in Object::init(file). If an object is
not created via the plugin system, Object::init(file) is never called.

Also, description is now called as part of smartCopy, which is of course
called when project() const is called on a timeVarying transform.
Showing 1 changed file with 15 additions and 15 deletions
openbr/plugins/stream.cpp
... ... @@ -1535,21 +1535,21 @@ public:
1535 1535  
1536 1536 void project(const Template &src, Template &dst) const
1537 1537 {
1538   - basis.project(src,dst);
  1538 + basis->project(src,dst);
1539 1539 }
1540 1540  
1541 1541 void projectUpdate(const Template &src, Template &dst)
1542 1542 {
1543   - basis.projectUpdate(src,dst);
  1543 + basis->projectUpdate(src,dst);
1544 1544 }
1545 1545 void projectUpdate(const TemplateList &src, TemplateList &dst)
1546 1546 {
1547   - basis.projectUpdate(src,dst);
  1547 + basis->projectUpdate(src,dst);
1548 1548 }
1549 1549  
1550 1550 void train(const QList<TemplateList> &data)
1551 1551 {
1552   - basis.train(data);
  1552 + basis->train(data);
1553 1553 }
1554 1554  
1555 1555 virtual void finalize(TemplateList &output)
... ... @@ -1567,10 +1567,10 @@ public:
1567 1567  
1568 1568 trainable = transform->trainable;
1569 1569  
1570   - basis.setParent(this->parent());
1571   - basis.transforms.clear();
1572   - basis.activeFrames = this->activeFrames;
1573   - basis.readMode = this->readMode;
  1570 + basis = QSharedPointer<DirectStreamTransform>((DirectStreamTransform *) Transform::make("DirectStream",this));
  1571 + basis->transforms.clear();
  1572 + basis->activeFrames = this->activeFrames;
  1573 + basis->readMode = this->readMode;
1574 1574  
1575 1575 // We need at least a CompositeTransform * to acess transform's children.
1576 1576 CompositeTransform *downcast = dynamic_cast<CompositeTransform *> (transform);
... ... @@ -1579,14 +1579,14 @@ public:
1579 1579 // basis with 1 stage.
1580 1580 if (!downcast || QString(transform->metaObject()->className()) != "br::PipeTransform")
1581 1581 {
1582   - basis.transforms.append(transform);
1583   - basis.init();
  1582 + basis->transforms.append(transform);
  1583 + basis->init();
1584 1584 return;
1585 1585 }
1586 1586 if (downcast->transforms.empty())
1587 1587 {
1588 1588 qWarning("Trying to set up empty stream");
1589   - basis.init();
  1589 + basis->init();
1590 1590 return;
1591 1591 }
1592 1592  
... ... @@ -1634,21 +1634,21 @@ public:
1634 1634 }
1635 1635 }
1636 1636  
1637   - basis.transforms = transform_set;
1638   - basis.init();
  1637 + basis->transforms = transform_set;
  1638 + basis->init();
1639 1639 }
1640 1640  
1641 1641 Transform *smartCopy(bool &newTransform)
1642 1642 {
1643 1643 // We just want the DirectStream to begin with, so just return a copy of that.
1644   - DirectStreamTransform *res = (DirectStreamTransform *) basis.smartCopy(newTransform);
  1644 + DirectStreamTransform *res = (DirectStreamTransform *) basis->smartCopy(newTransform);
1645 1645 res->activeFrames = this->activeFrames;
1646 1646 return res;
1647 1647 }
1648 1648  
1649 1649  
1650 1650 private:
1651   - DirectStreamTransform basis;
  1651 + QSharedPointer<DirectStreamTransform> basis;
1652 1652 };
1653 1653  
1654 1654 BR_REGISTER(Transform, StreamTransform)
... ...