protected void detach()

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();
        }
    }