All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bugvm.apple.coremedia.CMBufferQueue Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2013-2015 RoboVM AB
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.bugvm.apple.coremedia;

/**/
import java.io.*;
import java.nio.*;
import java.util.*;
import com.bugvm.objc.*;
import com.bugvm.objc.annotation.*;
import com.bugvm.objc.block.*;
import com.bugvm.rt.*;
import com.bugvm.rt.annotation.*;
import com.bugvm.rt.bro.*;
import com.bugvm.rt.bro.annotation.*;
import com.bugvm.rt.bro.ptr.*;
import com.bugvm.apple.foundation.*;
import com.bugvm.apple.corefoundation.*;
import com.bugvm.apple.dispatch.*;
import com.bugvm.apple.coreaudio.*;
import com.bugvm.apple.coregraphics.*;
import com.bugvm.apple.corevideo.*;
import com.bugvm.apple.audiotoolbox.*;
/**/

/**/
/**/
/**/@Library("CoreMedia")/**/
/**/public/**/ class /**/CMBufferQueue/**/ 
    extends /**/CFType/**/ 
    /**//**/ {

    /**/public static class CMBufferQueuePtr extends Ptr {}/**/
    
    public interface ResetCallback {
        void reset(CMBuffer buffer);
    }
    public interface TriggerCallback {
        void trigger(CMBufferQueueTriggerToken triggerToken);
    }
    public interface ValidationCallback {
        void validate(CMBufferQueue bufferQueue, CMBuffer buffer);
    }
    public interface ForEachCallback {
        void invoke(CMBuffer buffer) throws OSStatusException;
    }
    
    private static java.util.concurrent.atomic.AtomicLong refconId = new java.util.concurrent.atomic.AtomicLong();
    private static java.util.concurrent.atomic.AtomicLong triggerId = new java.util.concurrent.atomic.AtomicLong();
    private static final LongMap bufferQueueCallbacks = new LongMap<>();
    private static final LongMap resetCallbacks = new LongMap<>();
    private static final LongMap triggerCallbacks = new LongMap<>();
    private static final LongMap validationCallbacks = new LongMap<>();
    private static final LongMap forEachCallbacks = new LongMap<>();
    private static final java.lang.reflect.Method cbGetDecodeTimeStamp;
    private static final java.lang.reflect.Method cbGetPresentationTimeStamp;
    private static final java.lang.reflect.Method cbGetDuration;
    private static final java.lang.reflect.Method cbIsDataReady;
    private static final java.lang.reflect.Method cbCompare;
    private static final java.lang.reflect.Method cbGetSize;
    private static final java.lang.reflect.Method cbReset;
    private static final java.lang.reflect.Method cbTrigger;
    private static final java.lang.reflect.Method cbValidate;
    private static final java.lang.reflect.Method cbForEach;
    
    static {
        try {
            cbGetDecodeTimeStamp = CMBufferQueue.class.getDeclaredMethod("cbGetDecodeTimeStamp", CFType.class, long.class);
            cbGetPresentationTimeStamp = CMBufferQueue.class.getDeclaredMethod("cbGetPresentationTimeStamp", CFType.class, long.class);
            cbGetDuration = CMBufferQueue.class.getDeclaredMethod("cbGetDuration", CFType.class, long.class);
            cbIsDataReady = CMBufferQueue.class.getDeclaredMethod("cbIsDataReady", CFType.class, long.class);         
            cbCompare = CMBufferQueue.class.getDeclaredMethod("cbCompare", CFType.class, CFType.class, long.class);
            cbGetSize = CMBufferQueue.class.getDeclaredMethod("cbGetSize", CFType.class, long.class);
            cbReset = CMBufferQueue.class.getDeclaredMethod("cbReset", CFType.class, long.class);
            cbTrigger = CMBufferQueue.class.getDeclaredMethod("cbTrigger", long.class, CMBufferQueueTriggerToken.class);
            cbValidate = CMBufferQueue.class.getDeclaredMethod("cbValidate", CMBufferQueue.class, CFType.class, long.class);
            cbForEach = CMBufferQueue.class.getDeclaredMethod("cbForEach", CFType.class, long.class);
        } catch (Throwable e) {
            throw new Error(e);
        }
    }
    /**/static { Bro.bind(CMBufferQueue.class); }/**/
    /**//**/
    /**/
    protected CMBufferQueue() {}
    /**/
    /**//**/
    /**//**/
    @Callback
    private static CMTime cbGetDecodeTimeStamp(CFType buffer, @Pointer long refcon) {
        CMBufferQueueCallbacks callback = null;
        synchronized (bufferQueueCallbacks) {
            callback = bufferQueueCallbacks.get(refcon);
        }
        return callback.getDecodeTimeStamp((CMBuffer)buffer);
    }
    @Callback
    private static CMTime cbGetPresentationTimeStamp(CFType buffer, @Pointer long refcon) {
        CMBufferQueueCallbacks callback = null;
        synchronized (bufferQueueCallbacks) {
            callback = bufferQueueCallbacks.get(refcon);
        }
        return callback.getPresentationTimeStamp((CMBuffer)buffer);
    }
    @Callback
    private static CMTime cbGetDuration(CFType buffer, @Pointer long refcon) {
        CMBufferQueueCallbacks callback = null;
        synchronized (bufferQueueCallbacks) {
            callback = bufferQueueCallbacks.get(refcon);
        }
        return callback.getDuration((CMBuffer)buffer);
    }
    @Callback
    private static boolean cbIsDataReady(CFType buffer, @Pointer long refcon) {
        CMBufferQueueCallbacks callback = null;
        synchronized (bufferQueueCallbacks) {
            callback = bufferQueueCallbacks.get(refcon);
        }
        return callback.isDataReady((CMBuffer)buffer);
    }
    @Callback
    private static CFComparisonResult cbCompare(CFType buffer1, CFType buffer2, @Pointer long refcon) {
        CMBufferQueueCallbacks callback = null;
        synchronized (bufferQueueCallbacks) {
            callback = bufferQueueCallbacks.get(refcon);
        }
        return callback.compare((CMBuffer)buffer1, (CMBuffer)buffer2);
    }
    @Callback
    private static int cbGetSize(CFType buffer, @Pointer long refcon) {
        CMBufferQueueCallbacks callback = null;
        synchronized (bufferQueueCallbacks) {
            callback = bufferQueueCallbacks.get(refcon);
        }
        return callback.getSize((CMBuffer)buffer);
    }
    @Callback
    private static void cbReset(CFType buffer, @Pointer long refcon) {
        ResetCallback callback = null;
        synchronized (resetCallbacks) {
            callback = resetCallbacks.get(refcon);
        }
        callback.reset((CMBuffer)buffer);
    }
    @Callback
    private static void cbTrigger(@Pointer long refcon, CMBufferQueueTriggerToken triggerToken) {
        TriggerCallback callback = null;
        synchronized (triggerCallbacks) {
            callback = triggerCallbacks.get(refcon);
        }
        callback.trigger(triggerToken);
    }
    @Callback
    private static void cbValidate(CMBufferQueue bufferQueue, CFType buffer, @Pointer long refcon) {
        ValidationCallback callback = null;
        synchronized (validationCallbacks) {
            callback = validationCallbacks.get(refcon);
        }
        callback.validate(bufferQueue, (CMBuffer)buffer);
    }
    @Callback
    private static OSStatus cbForEach(CFType buffer, @Pointer long refcon) {
        synchronized (forEachCallbacks) {
            try {
                forEachCallbacks.get(refcon).invoke((CMBuffer)buffer);
            } catch (OSStatusException e) {
                return e.getStatus();
            }
            return OSStatus.NO_ERR;
        }
    }
    
    
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public static CMBufferQueue create(@MachineSizedSInt long capacity, CMBufferQueueCallbacks callback) throws OSStatusException {
        long refconId = CMBufferQueue.refconId.getAndIncrement();
        CMBufferCallbacksStruct callbacks = new CMBufferCallbacksStruct();
        callbacks.setRefcon(refconId);
        callbacks.setGetDecodeTimeStamp(new FunctionPtr(cbGetDecodeTimeStamp));
        callbacks.setGetPresentationTimeStamp(new FunctionPtr(cbGetPresentationTimeStamp));
        callbacks.setGetDuration(new FunctionPtr(cbGetDuration));
        callbacks.setIsDataReady(new FunctionPtr(cbIsDataReady));
        callbacks.setCompare(new FunctionPtr(cbCompare));
        callbacks.setGetSize(new FunctionPtr(cbGetSize));
        CMBufferQueuePtr ptr = new CMBufferQueuePtr();
        OSStatus status = create0(null, capacity, callbacks, ptr);
        if (OSStatusException.throwIfNecessary(status)) {
            synchronized (bufferQueueCallbacks) {
                bufferQueueCallbacks.put(refconId, callback);
            }
            return ptr.get();
        }
        return null;
    }
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public void markEndOfData() throws OSStatusException {
        OSStatus status = markEndOfData0();
        OSStatusException.throwIfNecessary(status);
    }
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public void reset() throws OSStatusException {
        OSStatus status = reset0();
        OSStatusException.throwIfNecessary(status);
    }
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public void reset(ResetCallback callback) throws OSStatusException {
        long refconId = CMBufferQueue.refconId.get();
        OSStatus status = reset0(new FunctionPtr(cbReset), refconId);
        if (OSStatusException.throwIfNecessary(status)) {
            synchronized (resetCallbacks) {
                resetCallbacks.put(refconId, callback);
            }
        }
    }
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public void installTrigger(TriggerCallback callback, CMBufferQueueTriggerCondition triggerCondition, @ByVal CMTime triggerTime) throws OSStatusException {
        long refconId = CMBufferQueue.triggerId.getAndIncrement();
        OSStatus status = installTrigger0(new FunctionPtr(cbTrigger), refconId, triggerCondition, triggerTime, null);
        if (OSStatusException.throwIfNecessary(status)) {
            synchronized (triggerCallbacks) {
                triggerCallbacks.put(refconId, callback);
            }
        }
    }
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public void installTrigger(TriggerCallback callback, CMBufferQueueTriggerCondition triggerCondition, @MachineSizedSInt long triggerThreshold) throws OSStatusException {
        long refconId = CMBufferQueue.triggerId.getAndIncrement();
        OSStatus status = installTrigger0(new FunctionPtr(cbTrigger), refconId, triggerCondition, triggerThreshold, null);
        if (OSStatusException.throwIfNecessary(status)) {
            synchronized (triggerCallbacks) {
                triggerCallbacks.put(refconId, callback);
            }
        }
    }
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public void removeTrigger(CMBufferQueueTriggerToken triggerToken) throws OSStatusException {
        OSStatus status = removeTrigger0(triggerToken);
        OSStatusException.throwIfNecessary(status);
    }
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public void callForEachBuffer(ForEachCallback callback) throws OSStatusException {
        long refconId = CMBufferQueue.refconId.get();
        OSStatus status = callForEachBuffer0(new FunctionPtr(cbReset), refconId);
        if (OSStatusException.throwIfNecessary(status)) {
            synchronized (forEachCallbacks) {
                forEachCallbacks.put(refconId, callback);
            }
        }
    }
    /**
     * @throws OSStatusException 
     * @since Available in iOS 4.0 and later.
     */
    public void setValidationCallback(ValidationCallback callback) throws OSStatusException {
        long refconId = CMBufferQueue.refconId.get();
        OSStatus status = setValidationCallback0(new FunctionPtr(cbValidate), refconId);
        if (OSStatusException.throwIfNecessary(status)) {
            synchronized (validationCallbacks) {
                validationCallbacks.put(refconId, callback);
            }
        }
    }
    /**/
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueCreate", optional=true)
    protected static native OSStatus create0(CFAllocator allocator, @MachineSizedSInt long capacity, CMBufferCallbacksStruct callbacks, CMBufferQueue.CMBufferQueuePtr queueOut);
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetTypeID", optional=true)
    public static native @MachineSizedUInt long getClassTypeID();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueEnqueue", optional=true)
    protected native OSStatus enqueue0(CFType buf);
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueDequeueAndRetain", optional=true)
    public native CFType dequeueAndRetain();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueDequeueIfDataReadyAndRetain", optional=true)
    public native CFType dequeueIfDataReadyAndRetain();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetHead", optional=true)
    public native CFType getHead();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueIsEmpty", optional=true)
    public native boolean isEmpty();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueMarkEndOfData", optional=true)
    protected native OSStatus markEndOfData0();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueContainsEndOfData", optional=true)
    public native boolean containsEndOfData();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueIsAtEndOfData", optional=true)
    public native boolean isAtEndOfData();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueReset", optional=true)
    protected native OSStatus reset0();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueResetWithCallback", optional=true)
    protected native OSStatus reset0(FunctionPtr callback, @Pointer long refcon);
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetBufferCount", optional=true)
    public native @MachineSizedSInt long getBufferCount();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetDuration", optional=true)
    public native @ByVal CMTime getDuration();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetMinDecodeTimeStamp", optional=true)
    public native @ByVal CMTime getMinDecodeTimeStamp();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetFirstDecodeTimeStamp", optional=true)
    public native @ByVal CMTime getFirstDecodeTimeStamp();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetMinPresentationTimeStamp", optional=true)
    public native @ByVal CMTime getMinPresentationTimeStamp();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetFirstPresentationTimeStamp", optional=true)
    public native @ByVal CMTime getFirstPresentationTimeStamp();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetMaxPresentationTimeStamp", optional=true)
    public native @ByVal CMTime getMaxPresentationTimeStamp();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueGetEndPresentationTimeStamp", optional=true)
    public native @ByVal CMTime getEndPresentationTimeStamp();
    /**
     * @since Available in iOS 7.1 and later.
     */
    @Bridge(symbol="CMBufferQueueGetTotalSize", optional=true)
    public native @MachineSizedUInt long getTotalSize();
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueInstallTrigger", optional=true)
    protected native OSStatus installTrigger0(FunctionPtr triggerCallback, @Pointer long triggerRefcon, CMBufferQueueTriggerCondition triggerCondition, @ByVal CMTime triggerTime, CMBufferQueueTriggerToken.CMBufferQueueTriggerTokenPtr triggerTokenOut);
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueInstallTriggerWithIntegerThreshold", optional=true)
    protected native OSStatus installTrigger0(FunctionPtr triggerCallback, @Pointer long triggerRefcon, CMBufferQueueTriggerCondition triggerCondition, @MachineSizedSInt long triggerThreshold, CMBufferQueueTriggerToken.CMBufferQueueTriggerTokenPtr triggerTokenOut);
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueRemoveTrigger", optional=true)
    protected native OSStatus removeTrigger0(CMBufferQueueTriggerToken triggerToken);
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueTestTrigger", optional=true)
    protected native boolean testTrigger0(CMBufferQueueTriggerToken triggerToken);
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueCallForEachBuffer", optional=true)
    protected native OSStatus callForEachBuffer0(FunctionPtr callback, @Pointer long refcon);
    /**
     * @since Available in iOS 4.0 and later.
     */
    @Bridge(symbol="CMBufferQueueSetValidationCallback", optional=true)
    protected native OSStatus setValidationCallback0(FunctionPtr validationCallback, @Pointer long validationRefCon);
    /**/
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy