in src/main/java/com/aws/iot/edgeconnectorforkvs/videorecorder/base/RecorderBranchBase.java [216:253]
protected void detach() {
this.bindLock.lock();
try {
this.detachCnt.set(0);
for (Map.Entry<Element, Element> queue : this.teeSrc2Que.entrySet()) {
Element queueElm = queue.getValue();
Pad quePadSink = this.gstCore.getElementStaticPad(queueElm, "sink");
Pad teePadSrc = this.gstCore.getPadPeer(quePadSink);
this.gstCore.addPadProbe(teePadSrc, PadProbeType.IDLE, this.teeBlockProbe);
}
log.info("waiting for queues detaching");
this.condLock.lock();
try {
while (this.detachCnt.get() != this.teeSrc2Que.size()) {
this.padProbeUnlink.await();
}
} catch (Exception e) {
log.error(String.format("detach fails: %s", e.getMessage()));
} finally {
this.condLock.unlock();
}
log.info("all queues are detached");
// release tee pads
for (Map.Entry<Pad, Element> pads : this.teeSrcPad2Tee.entrySet()) {
Element teeSrc = pads.getValue();
Pad teePadSrc = pads.getKey();
this.gstCore.relElementRequestPad(teeSrc, teePadSrc);
}
this.teeSrcPad2Tee.clear();
this.branchAttached.set(false);
} finally {
this.bindLock.unlock();
}
}