| /* |
| * hdhomerun_video.h |
| * |
| * Copyright © 2006 Silicondust USA Inc. <www.silicondust.com>. |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 3 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library. If not, see <http://www.gnu.org/licenses/>. |
| * |
| * As a special exception to the GNU Lesser General Public License, |
| * you may link, statically or dynamically, an application with a |
| * publicly distributed version of the Library to produce an |
| * executable file containing portions of the Library, and |
| * distribute that executable file under terms of your choice, |
| * without any of the additional requirements listed in clause 4 of |
| * the GNU Lesser General Public License. |
| * |
| * By "a publicly distributed version of the Library", we mean |
| * either the unmodified Library as distributed by Silicondust, or a |
| * modified version of the Library that is distributed under the |
| * conditions defined in the GNU Lesser General Public License. |
| */ |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| struct hdhomerun_video_sock_t; |
| |
| struct hdhomerun_video_stats_t { |
| uint32_t packet_count; |
| uint32_t network_error_count; |
| uint32_t transport_error_count; |
| uint32_t sequence_error_count; |
| uint32_t overflow_error_count; |
| }; |
| |
| #define TS_PACKET_SIZE 188 |
| #define VIDEO_DATA_PACKET_SIZE (188 * 7) |
| #define VIDEO_DATA_BUFFER_SIZE_1S (20000000 / 8) |
| |
| #define VIDEO_RTP_DATA_PACKET_SIZE ((188 * 7) + 12) |
| |
| /* |
| * Create a video/data socket. |
| * |
| * uint16_t listen_port: Port number to listen on. Set to 0 to auto-select. |
| * size_t buffer_size: Size of receive buffer. For 1 second of buffer use VIDEO_DATA_BUFFER_SIZE_1S. |
| * struct hdhomerun_debug_t *dbg: Pointer to debug logging object. May be NULL. |
| * |
| * Returns a pointer to the newly created control socket. |
| * |
| * When no longer needed, the socket should be destroyed by calling hdhomerun_control_destroy. |
| */ |
| extern LIBTYPE struct hdhomerun_video_sock_t *hdhomerun_video_create(uint16_t listen_port, bool_t allow_port_reuse, size_t buffer_size, struct hdhomerun_debug_t *dbg); |
| extern LIBTYPE void hdhomerun_video_destroy(struct hdhomerun_video_sock_t *vs); |
| |
| /* |
| * Get the port the socket is listening on. |
| * |
| * Returns 16-bit port with native endianness, or 0 on error. |
| */ |
| extern LIBTYPE uint16_t hdhomerun_video_get_local_port(struct hdhomerun_video_sock_t *vs); |
| |
| /* |
| * Join/leave multicast group. |
| */ |
| extern LIBTYPE int hdhomerun_video_join_multicast_group(struct hdhomerun_video_sock_t *vs, uint32_t multicast_ip, uint32_t local_ip); |
| extern LIBTYPE void hdhomerun_video_leave_multicast_group(struct hdhomerun_video_sock_t *vs, uint32_t multicast_ip, uint32_t local_ip); |
| |
| /* |
| * Read data from buffer. |
| * |
| * size_t max_size: The maximum amount of data to be returned. |
| * size_t *pactual_size: The caller-supplied pactual_size value will be updated to contain the amount |
| * of data available to the caller. |
| * |
| * Returns a pointer to the data, or NULL if no data is available. |
| * The data will remain valid until another call to hdhomerun_video_recv. |
| * |
| * The amount of data returned will always be a multiple of VIDEO_DATA_PACKET_SIZE (1316). |
| * Attempting to read a single TS frame (188 bytes) will not return data as it is less than |
| * the minimum size. |
| * |
| * The buffer is implemented as a ring buffer. It is possible for this function to return a small |
| * amount of data when more is available due to the wrap-around case. |
| */ |
| extern LIBTYPE uint8_t *hdhomerun_video_recv(struct hdhomerun_video_sock_t *vs, size_t max_size, size_t *pactual_size); |
| |
| /* |
| * Flush the buffer. |
| */ |
| extern LIBTYPE void hdhomerun_video_flush(struct hdhomerun_video_sock_t *vs); |
| |
| /* |
| * Debug print internal stats. |
| */ |
| extern LIBTYPE void hdhomerun_video_debug_print_stats(struct hdhomerun_video_sock_t *vs); |
| extern LIBTYPE void hdhomerun_video_get_stats(struct hdhomerun_video_sock_t *vs, struct hdhomerun_video_stats_t *stats); |
| |
| /* |
| * Internal use only. |
| */ |
| extern LIBTYPE hdhomerun_sock_t hdhomerun_video_get_sock(struct hdhomerun_video_sock_t *vs); |
| |
| #ifdef __cplusplus |
| } |
| #endif |