gavl
|
00001 /***************************************************************** 00002 * gavl - a general purpose audio/video processing library 00003 * 00004 * Copyright (c) 2001 - 2012 Members of the Gmerlin project 00005 * gmerlin-general@lists.sourceforge.net 00006 * http://gmerlin.sourceforge.net 00007 * 00008 * This program is free software: you can redistribute it and/or modify 00009 * it under the terms of the GNU General Public License as published by 00010 * the Free Software Foundation, either version 2 of the License, or 00011 * (at your option) any later version. 00012 * 00013 * This program is distributed in the hope that it will be useful, 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 * GNU General Public License for more details. 00017 * 00018 * You should have received a copy of the GNU General Public License 00019 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00020 * *****************************************************************/ 00021 00027 #ifndef GAVL_CONNECTORS_H_INCLUDED 00028 #define GAVL_CONNECTORS_H_INCLUDED 00029 00030 #include <gavl/gavl.h> 00031 #include <gavl/compression.h> 00032 00033 #ifdef __cplusplus 00034 extern "C" { 00035 #endif 00036 00054 typedef void (*gavl_connector_lock_func_t)(void * priv); 00055 00056 00085 typedef enum 00086 { 00087 GAVL_SOURCE_EOF = 0, 00088 GAVL_SOURCE_OK = 1, 00089 GAVL_SOURCE_AGAIN = 2, 00090 } gavl_source_status_t; 00091 00100 typedef gavl_source_status_t 00101 (*gavl_audio_source_func_t)(void * priv, gavl_audio_frame_t ** frame); 00102 00111 typedef gavl_source_status_t 00112 (*gavl_video_source_func_t)(void * priv, gavl_video_frame_t ** frame); 00113 00122 typedef gavl_source_status_t 00123 (*gavl_packet_source_func_t)(void * priv, gavl_packet_t ** p); 00124 00125 00129 #define GAVL_SOURCE_SRC_ALLOC (1<<0) 00130 00131 00136 #define GAVL_SOURCE_SRC_FRAMESIZE_MAX (1<<2) 00137 00142 #define GAVL_SOURCE_SRC_DISCONTINUOUS (1<<3) 00143 00144 00145 /* Called by the source */ 00146 00155 GAVL_PUBLIC 00156 gavl_video_source_t * 00157 gavl_video_source_create(gavl_video_source_func_t func, 00158 void * priv, int src_flags, 00159 const gavl_video_format_t * src_format); 00160 00172 GAVL_PUBLIC 00173 gavl_video_source_t * 00174 gavl_video_source_create_source(gavl_video_source_func_t func, 00175 void * priv, int src_flags, 00176 gavl_video_source_t * src); 00177 00185 GAVL_PUBLIC void 00186 gavl_video_source_set_lock_funcs(gavl_video_source_t * src, 00187 gavl_connector_lock_func_t lock_func, 00188 gavl_connector_lock_func_t unlock_func, 00189 void * priv); 00190 00191 00198 GAVL_PUBLIC 00199 gavl_video_options_t * gavl_video_source_get_options(gavl_video_source_t * s); 00200 00207 GAVL_PUBLIC 00208 void gavl_video_source_reset(gavl_video_source_t * s); 00209 00217 GAVL_PUBLIC 00218 void gavl_video_source_destroy(gavl_video_source_t * s); 00219 00220 /* Called by the destination */ 00221 00227 GAVL_PUBLIC 00228 const gavl_video_format_t * 00229 gavl_video_source_get_src_format(gavl_video_source_t * s); 00230 00236 GAVL_PUBLIC 00237 const gavl_video_format_t * 00238 gavl_video_source_get_dst_format(gavl_video_source_t * s); 00239 00255 GAVL_PUBLIC 00256 void 00257 gavl_video_source_set_dst(gavl_video_source_t * s, int dst_flags, 00258 const gavl_video_format_t * dst_format); 00259 00270 GAVL_PUBLIC 00271 gavl_source_status_t 00272 gavl_video_source_read_frame(void * s, gavl_video_frame_t ** frame); 00273 00274 /* Called by source */ 00275 00284 GAVL_PUBLIC 00285 gavl_audio_source_t * 00286 gavl_audio_source_create(gavl_audio_source_func_t func, 00287 void * priv, int src_flags, 00288 const gavl_audio_format_t * src_format); 00289 00301 GAVL_PUBLIC 00302 gavl_audio_source_t * 00303 gavl_audio_source_create_source(gavl_audio_source_func_t func, 00304 void * priv, int src_flags, 00305 gavl_audio_source_t * src); 00306 00307 00315 GAVL_PUBLIC void 00316 gavl_audio_source_set_lock_funcs(gavl_audio_source_t * src, 00317 gavl_connector_lock_func_t lock_func, 00318 gavl_connector_lock_func_t unlock_func, 00319 void * priv); 00320 00321 00327 GAVL_PUBLIC 00328 const gavl_audio_format_t * 00329 gavl_audio_source_get_src_format(gavl_audio_source_t * s); 00330 00336 GAVL_PUBLIC 00337 const gavl_audio_format_t * 00338 gavl_audio_source_get_dst_format(gavl_audio_source_t * s); 00339 00356 GAVL_PUBLIC 00357 void 00358 gavl_audio_source_set_dst(gavl_audio_source_t * s, int dst_flags, 00359 const gavl_audio_format_t * dst_format); 00360 00375 GAVL_PUBLIC 00376 gavl_source_status_t 00377 gavl_audio_source_read_frame(void*s, gavl_audio_frame_t ** frame); 00378 00388 GAVL_PUBLIC 00389 void 00390 gavl_audio_source_skip_src(gavl_audio_source_t * s, int num_samples); 00391 00401 GAVL_PUBLIC 00402 int gavl_audio_source_read_samples(void*s, gavl_audio_frame_t * frame, 00403 int num_samples); 00404 00410 GAVL_PUBLIC 00411 gavl_audio_options_t * gavl_audio_source_get_options(gavl_audio_source_t * s); 00412 00419 GAVL_PUBLIC 00420 void gavl_audio_source_reset(gavl_audio_source_t * s); 00421 00429 GAVL_PUBLIC 00430 void gavl_audio_source_destroy(gavl_audio_source_t * s); 00431 00432 00433 /* Packet source */ 00434 00443 GAVL_PUBLIC 00444 gavl_packet_source_t * 00445 gavl_packet_source_create_audio(gavl_packet_source_func_t func, 00446 void * priv, int src_flags, 00447 const gavl_compression_info_t * ci, 00448 const gavl_audio_format_t * afmt); 00449 00458 GAVL_PUBLIC 00459 gavl_packet_source_t * 00460 gavl_packet_source_create_video(gavl_packet_source_func_t func, 00461 void * priv, int src_flags, 00462 const gavl_compression_info_t * ci, 00463 const gavl_video_format_t * vfmt); 00464 00472 GAVL_PUBLIC 00473 gavl_packet_source_t * 00474 gavl_packet_source_create_text(gavl_packet_source_func_t func, 00475 void * priv, int src_flags, int timescale); 00476 00484 GAVL_PUBLIC 00485 gavl_packet_source_t * 00486 gavl_packet_source_create_source(gavl_packet_source_func_t func, 00487 void * priv, int src_flags, 00488 gavl_packet_source_t * src); 00489 00490 00498 GAVL_PUBLIC void 00499 gavl_packet_source_set_lock_funcs(gavl_packet_source_t * src, 00500 gavl_connector_lock_func_t lock_func, 00501 gavl_connector_lock_func_t unlock_func, 00502 void * priv); 00503 00504 00510 GAVL_PUBLIC const gavl_compression_info_t * 00511 gavl_packet_source_get_ci(gavl_packet_source_t * s); 00512 00518 GAVL_PUBLIC const gavl_audio_format_t * 00519 gavl_packet_source_get_audio_format(gavl_packet_source_t * s); 00520 00526 GAVL_PUBLIC const gavl_video_format_t * 00527 gavl_packet_source_get_video_format(gavl_packet_source_t * s); 00528 00534 GAVL_PUBLIC int 00535 gavl_packet_source_get_timescale(gavl_packet_source_t * s); 00536 00542 GAVL_PUBLIC gavl_source_status_t 00543 gavl_packet_source_read_packet(void*s, gavl_packet_t ** p); 00544 00549 GAVL_PUBLIC void 00550 gavl_packet_source_destroy(gavl_packet_source_t * s); 00551 00573 typedef enum 00574 { 00575 GAVL_SINK_ERROR, 00576 GAVL_SINK_OK, 00577 } gavl_sink_status_t; 00578 00579 00588 typedef gavl_audio_frame_t * 00589 (*gavl_audio_sink_get_func)(void * priv); 00590 00597 typedef gavl_sink_status_t 00598 (*gavl_audio_sink_put_func)(void * priv, gavl_audio_frame_t * f); 00599 00608 GAVL_PUBLIC gavl_audio_sink_t * 00609 gavl_audio_sink_create(gavl_audio_sink_get_func get_func, 00610 gavl_audio_sink_put_func put_func, 00611 void * priv, 00612 const gavl_audio_format_t * format); 00613 00621 GAVL_PUBLIC void 00622 gavl_audio_sink_set_lock_funcs(gavl_audio_sink_t * sink, 00623 gavl_connector_lock_func_t lock_func, 00624 gavl_connector_lock_func_t unlock_func, 00625 void * priv); 00626 00627 00633 GAVL_PUBLIC const gavl_audio_format_t * 00634 gavl_audio_sink_get_format(gavl_audio_sink_t * s); 00635 00645 GAVL_PUBLIC gavl_audio_frame_t * 00646 gavl_audio_sink_get_frame(gavl_audio_sink_t * s); 00647 00657 GAVL_PUBLIC gavl_sink_status_t 00658 gavl_audio_sink_put_frame(gavl_audio_sink_t * s, gavl_audio_frame_t * f); 00659 00664 GAVL_PUBLIC void 00665 gavl_audio_sink_destroy(gavl_audio_sink_t * s); 00666 00667 00668 00677 typedef gavl_video_frame_t * 00678 (*gavl_video_sink_get_func)(void * priv); 00679 00686 typedef gavl_sink_status_t 00687 (*gavl_video_sink_put_func)(void * priv, gavl_video_frame_t * f); 00688 00697 GAVL_PUBLIC gavl_video_sink_t * 00698 gavl_video_sink_create(gavl_video_sink_get_func get_func, 00699 gavl_video_sink_put_func put_func, 00700 void * priv, 00701 const gavl_video_format_t * format); 00702 00710 GAVL_PUBLIC void 00711 gavl_video_sink_set_lock_funcs(gavl_video_sink_t * sink, 00712 gavl_connector_lock_func_t lock_func, 00713 gavl_connector_lock_func_t unlock_func, 00714 void * priv); 00715 00721 GAVL_PUBLIC const gavl_video_format_t * 00722 gavl_video_sink_get_format(gavl_video_sink_t * s); 00723 00733 GAVL_PUBLIC gavl_video_frame_t * 00734 gavl_video_sink_get_frame(gavl_video_sink_t * s); 00735 00745 GAVL_PUBLIC gavl_sink_status_t 00746 gavl_video_sink_put_frame(gavl_video_sink_t * s, gavl_video_frame_t * f); 00747 00752 GAVL_PUBLIC void 00753 gavl_video_sink_destroy(gavl_video_sink_t * s); 00754 00755 00756 00765 typedef gavl_packet_t * 00766 (*gavl_packet_sink_get_func)(void * priv); 00767 00774 typedef gavl_sink_status_t 00775 (*gavl_packet_sink_put_func)(void * priv, gavl_packet_t * p); 00776 00784 GAVL_PUBLIC gavl_packet_sink_t * 00785 gavl_packet_sink_create(gavl_packet_sink_get_func get_func, 00786 gavl_packet_sink_put_func put_func, 00787 void * priv); 00788 00796 GAVL_PUBLIC void 00797 gavl_packet_sink_set_lock_funcs(gavl_packet_sink_t * sink, 00798 gavl_connector_lock_func_t lock_func, 00799 gavl_connector_lock_func_t unlock_func, 00800 void * priv); 00801 00802 00812 GAVL_PUBLIC gavl_packet_t * 00813 gavl_packet_sink_get_packet(gavl_packet_sink_t * s); 00814 00824 GAVL_PUBLIC gavl_sink_status_t 00825 gavl_packet_sink_put_packet(gavl_packet_sink_t * s, gavl_packet_t * p); 00826 00831 GAVL_PUBLIC void 00832 gavl_packet_sink_destroy(gavl_packet_sink_t * s); 00833 00834 00854 typedef struct gavl_audio_connector_s gavl_audio_connector_t; 00855 00861 typedef struct gavl_video_connector_s gavl_video_connector_t; 00862 00868 typedef struct gavl_packet_connector_s gavl_packet_connector_t; 00869 00881 typedef void 00882 (*gavl_audio_connector_process_func)(void * priv, 00883 gavl_audio_frame_t * frame); 00884 00896 typedef void 00897 (*gavl_video_connector_process_func)(void * priv, 00898 gavl_video_frame_t * frame); 00899 00908 typedef void 00909 (*gavl_packet_connector_process_func)(void * priv, 00910 gavl_packet_t * p); 00911 00917 GAVL_PUBLIC gavl_audio_connector_t * 00918 gavl_audio_connector_create(gavl_audio_source_t * src); 00919 00927 GAVL_PUBLIC gavl_audio_options_t * 00928 gavl_audio_connector_get_options(gavl_audio_connector_t * c); 00929 00934 GAVL_PUBLIC void 00935 gavl_audio_connector_destroy(gavl_audio_connector_t * c); 00936 00942 GAVL_PUBLIC void 00943 gavl_audio_connector_connect(gavl_audio_connector_t * c, 00944 gavl_audio_sink_t * sink); 00945 00952 GAVL_PUBLIC void 00953 gavl_audio_connector_set_process_func(gavl_audio_connector_t * c, 00954 gavl_audio_connector_process_func func, 00955 void * priv); 00956 00964 GAVL_PUBLIC void 00965 gavl_audio_connector_start(gavl_audio_connector_t * c); 00966 00972 GAVL_PUBLIC const gavl_audio_format_t * 00973 gavl_audio_connector_get_process_format(gavl_audio_connector_t * c); 00974 00984 GAVL_PUBLIC int 00985 gavl_audio_connector_process(gavl_audio_connector_t * c); 00986 00993 GAVL_PUBLIC 00994 void gavl_audio_connector_reset(gavl_audio_connector_t * c); 00995 01001 GAVL_PUBLIC gavl_source_status_t 01002 gavl_audio_connector_get_source_status(gavl_audio_connector_t * c); 01003 01004 01005 /* */ 01006 01012 GAVL_PUBLIC gavl_video_connector_t * 01013 gavl_video_connector_create(gavl_video_source_t * src); 01014 01022 GAVL_PUBLIC gavl_video_options_t * 01023 gavl_video_connector_get_options(gavl_video_connector_t * c); 01024 01029 GAVL_PUBLIC void 01030 gavl_video_connector_destroy(gavl_video_connector_t * c); 01031 01037 GAVL_PUBLIC void 01038 gavl_video_connector_connect(gavl_video_connector_t * c, 01039 gavl_video_sink_t * sink); 01040 01047 GAVL_PUBLIC void 01048 gavl_video_connector_set_process_func(gavl_video_connector_t * c, 01049 gavl_video_connector_process_func func, 01050 void * priv); 01051 01059 GAVL_PUBLIC void 01060 gavl_video_connector_start(gavl_video_connector_t * c); 01061 01067 GAVL_PUBLIC const gavl_video_format_t * 01068 gavl_video_connector_get_process_format(gavl_video_connector_t * c); 01069 01079 GAVL_PUBLIC int 01080 gavl_video_connector_process(gavl_video_connector_t * c); 01081 01088 GAVL_PUBLIC 01089 void gavl_video_connector_reset(gavl_video_connector_t * c); 01090 01096 GAVL_PUBLIC gavl_source_status_t 01097 gavl_video_connector_get_source_status(gavl_video_connector_t * c); 01098 01099 /* */ 01100 01106 GAVL_PUBLIC gavl_packet_connector_t * 01107 gavl_packet_connector_create(gavl_packet_source_t * src); 01108 01113 GAVL_PUBLIC void 01114 gavl_packet_connector_destroy(gavl_packet_connector_t * c); 01115 01121 GAVL_PUBLIC void 01122 gavl_packet_connector_connect(gavl_packet_connector_t * c, 01123 gavl_packet_sink_t * sink); 01124 01131 GAVL_PUBLIC void 01132 gavl_packet_connector_set_process_func(gavl_packet_connector_t * c, 01133 gavl_packet_connector_process_func func, 01134 void * priv); 01135 01143 GAVL_PUBLIC int 01144 gavl_packet_connector_process(gavl_packet_connector_t * c); 01145 01151 GAVL_PUBLIC gavl_source_status_t 01152 gavl_packet_connector_get_source_status(gavl_packet_connector_t * c); 01153 01154 01155 01160 #ifdef __cplusplus 01161 } 01162 #endif 01163 01164 #endif // GAVL_CONNECTORS_H_INCLUDED