gavl

connectors.h

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