My Project
/home/jvcleave/Desktop/RASPBERRY_PI/userland/interface/mmal/core/mmal_port_private.h
00001 /*
00002 Copyright (c) 2012, Broadcom Europe Ltd
00003 All rights reserved.
00004 
00005 Redistribution and use in source and binary forms, with or without
00006 modification, are permitted provided that the following conditions are met:
00007     * Redistributions of source code must retain the above copyright
00008       notice, this list of conditions and the following disclaimer.
00009     * Redistributions in binary form must reproduce the above copyright
00010       notice, this list of conditions and the following disclaimer in the
00011       documentation and/or other materials provided with the distribution.
00012     * Neither the name of the copyright holder nor the
00013       names of its contributors may be used to endorse or promote products
00014       derived from this software without specific prior written permission.
00015 
00016 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00017 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00018 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00019 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
00020 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00021 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00022 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00023 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00024 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00025 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026 */
00027 
00028 #ifndef MMAL_PORT_PRIVATE_H
00029 #define MMAL_PORT_PRIVATE_H
00030 
00031 #include "interface/mmal/mmal.h"
00032 #include "interface/mmal/mmal_clock.h"
00033 
00035 typedef struct MMAL_PORT_PRIVATE_T
00036 {
00038    struct MMAL_PORT_PRIVATE_CORE_T *core;
00040    struct MMAL_PORT_MODULE_T *module;
00041 
00042    MMAL_STATUS_T (*pf_set_format)(MMAL_PORT_T *port);
00043    MMAL_STATUS_T (*pf_enable)(MMAL_PORT_T *port, MMAL_PORT_BH_CB_T);
00044    MMAL_STATUS_T (*pf_disable)(MMAL_PORT_T *port);
00045    MMAL_STATUS_T (*pf_send)(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *);
00046    MMAL_STATUS_T (*pf_flush)(MMAL_PORT_T *port);
00047    MMAL_STATUS_T (*pf_parameter_set)(MMAL_PORT_T *port, const MMAL_PARAMETER_HEADER_T *param);
00048    MMAL_STATUS_T (*pf_parameter_get)(MMAL_PORT_T *port, MMAL_PARAMETER_HEADER_T *param);
00049    MMAL_STATUS_T (*pf_connect)(MMAL_PORT_T *port, MMAL_PORT_T *other_port);
00050 
00051    uint8_t *(*pf_payload_alloc)(MMAL_PORT_T *port, uint32_t payload_size);
00052    void     (*pf_payload_free)(MMAL_PORT_T *port, uint8_t *payload);
00053 
00054 } MMAL_PORT_PRIVATE_T;
00055 
00058 void mmal_port_buffer_header_callback(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer);
00059 
00063 void mmal_port_event_send(MMAL_PORT_T *port, MMAL_BUFFER_HEADER_T *buffer);
00064 
00066 MMAL_PORT_T *mmal_port_alloc(MMAL_COMPONENT_T *, MMAL_PORT_TYPE_T type, unsigned int extra_size);
00068 void mmal_port_free(MMAL_PORT_T *port);
00070 MMAL_PORT_T **mmal_ports_alloc(MMAL_COMPONENT_T *, unsigned int ports_num, MMAL_PORT_TYPE_T type,
00071                                unsigned int extra_size);
00073 void mmal_ports_free(MMAL_PORT_T **ports, unsigned int ports_num);
00074 
00076 void mmal_port_acquire(MMAL_PORT_T *port);
00077 
00079 MMAL_STATUS_T mmal_port_release(MMAL_PORT_T *port);
00080 
00082 MMAL_STATUS_T mmal_port_pause(MMAL_PORT_T *port, MMAL_BOOL_T pause);
00083 
00084 /*****************************************************************************
00085  * Clock Port API
00086  *****************************************************************************/
00093 typedef void (*MMAL_PORT_CLOCK_EVENT_CB)(MMAL_PORT_T *port, const MMAL_CLOCK_PAYLOAD_T *event);
00094 
00102 MMAL_PORT_T* mmal_port_clock_alloc(MMAL_COMPONENT_T *component, MMAL_PORT_CLOCK_EVENT_CB event_cb);
00103 
00108 void mmal_port_clock_free(MMAL_PORT_T *port);
00109 
00118 MMAL_PORT_T **mmal_ports_clock_alloc(MMAL_COMPONENT_T *component, unsigned int ports_num, MMAL_PORT_CLOCK_EVENT_CB event_cb);
00119 
00125 void mmal_ports_clock_free(MMAL_PORT_T **ports, unsigned int ports_num);
00126 
00134 typedef void (*MMAL_PORT_CLOCK_REQUEST_CB)(MMAL_PORT_T *port, int64_t media_time, void *cb_data);
00135 
00148 MMAL_STATUS_T mmal_port_clock_request_add(MMAL_PORT_T *port, int64_t media_time, int64_t offset,
00149                                           MMAL_PORT_CLOCK_REQUEST_CB cb, void *cb_data);
00150 
00157 MMAL_STATUS_T mmal_port_clock_request_flush(MMAL_PORT_T *port);
00158 
00166 MMAL_STATUS_T mmal_port_clock_media_time_set(MMAL_PORT_T *port, int64_t media_time);
00167 
00175 MMAL_STATUS_T mmal_port_clock_media_time_offset_set(MMAL_PORT_T *port, int64_t offset);
00176 
00184 int64_t mmal_port_clock_media_time_get(MMAL_PORT_T *port);
00185 
00192 int64_t mmal_port_clock_media_time_offset_get(MMAL_PORT_T *port);
00193 
00201 MMAL_STATUS_T mmal_port_clock_scale_set(MMAL_PORT_T *port, MMAL_RATIONAL_T scale);
00202 
00209 MMAL_RATIONAL_T mmal_port_clock_scale_get(MMAL_PORT_T *port);
00210 
00217 MMAL_BOOL_T mmal_port_clock_is_active(MMAL_PORT_T *port);
00218 
00219 #endif /* MMAL_PORT_PRIVATE_H */
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines