asademux.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:5k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * asademux.c: asa demuxer VM
  3.  *****************************************************************************
  4.  * Copyright (C) 2007 the VideoLAN team
  5.  *
  6.  * Originated from asa: portable digital subtitle renderer
  7.  *
  8.  * Authors: David Lamparter <equinox at diac24 dot net>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify
  11.  * it under the terms of the GNU General Public License as published by
  12.  * the Free Software Foundation; either version 2 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18.  * GNU General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU General Public License
  21.  * along with this program; if not, write to the Free Software
  22.  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  23.  ****************************************************************************/
  24. /****************************************************************************
  25.  * Changes from asa version:
  26.  *  - headers adapted
  27.  *  - external definition file support dropped
  28.  *  - integer timestamps
  29.  ****************************************************************************
  30.  * Please retain Linux kernel CodingStyle for sync.
  31.  * base commit d8c269b0fae9a8f8904e16e92313da165d664c74
  32.  ****************************************************************************/
  33. #ifndef _ASADEMUX_H
  34. #define _ASADEMUX_H
  35. #include <pcre.h>
  36. /** parser reuse. imports-to-C uses char *, real VM uses pcre * */
  37. typedef union {
  38. pcre *pcre;
  39. char *str;
  40. } asa_pcre;
  41. /** pcre_compile wrapper.
  42.  * used to allow loading differently for imports-to-C conversion.
  43.  * @param out output (parsed pcre)
  44.  * @param str regular expression string
  45.  * @return 0 on success, any other on error
  46.  */
  47. extern int asa_pcre_compile(asa_pcre *out, const char *str);
  48. /** import instruction code */
  49. enum asa_import_insn_type {
  50. ASAI_COMMIT = 0, /**< put current buffer as line */
  51. ASAI_DISCARD, /**< discard current buffer */
  52. ASAI_BREAK, /**< leave child group */
  53. ASAI_SELECT, /**< select source matchgroup */
  54. ASAI_SG, /**< execute search & replace on selected */
  55. ASAI_SGU, /**< like ASAI_SG, but update matchgroups */
  56. ASAI_APPEND, /**< append selected source to buffer */
  57. ASAI_FPS, /**< set fixed fps */
  58. ASAI_SHOW, /**< set start time */
  59. ASAI_HIDE, /**< set end time */
  60. ASAI_CHILD /**< child regex match */
  61. };
  62. /** replacement element for ASAI_SG / ASAI_SGU */
  63. struct asa_repl {
  64. struct asa_repl *next; /**< next element */
  65. int group; /**< -1 if fixed string, else source group */
  66. char *text; /**< fixed string for group == -1 */
  67. };
  68. /** time specification element */
  69. struct asa_tspec {
  70. struct asa_tspec *next; /**< next element */
  71. int group; /**< source matchgroup */
  72. double mult, /**< ts multiplier. 1.0 = 1 second */
  73. fps_mult; /**< fps multiplier. probably 0.0 or 1.0 */
  74. };
  75. /** single import instruction */
  76. struct asa_import_insn {
  77. struct asa_import_insn
  78. *parent, /**< owner insn, NULL if format child */
  79. *next; /**< next instruction */
  80. enum asa_import_insn_type insn; /**< instruction code */
  81. /** instruction parameters */
  82. union {
  83. int break_depth; /**< depth to break out */
  84. int select; /**< matchgroup to select */
  85. /** search-replace parameters */
  86. struct {
  87. asa_pcre regex; /**< search for */
  88. struct asa_repl *repl; /**< replace by */
  89. } sg;
  90. /** time specification */
  91. struct {
  92. struct asa_tspec *tsp; /**< sources to sum up */
  93. int delta_select; /**< -1 or delta index */
  94. } tspec;
  95. /** child instructions */
  96. struct {
  97. asa_pcre regex; /** <if this matches... */
  98. struct asa_import_insn *insns; /**< do this. */
  99. } child;
  100. double fps_value; /**< fixed fps value */
  101. } v;
  102. };
  103. /** destination format of import rules */
  104. enum asa_import_target {
  105. ASAI_TARGET_TEXT = (1 << 0), /**< plain text packets */
  106. ASAI_TARGET_SSA = (1 << 1) /**< MKV ASS packets */
  107. };
  108. /** importing instructions for format */
  109. struct asa_import_format {
  110. struct asa_import_format *next, /**< next format */
  111. *prevtgt, /**< previous target */
  112. *nexttgt; /**< next target of this*/
  113. char *name; /**< format name */
  114. enum asa_import_target target; /**< target */
  115. struct asa_import_insn *insns; /**< instructions */
  116. };
  117. /** format detection rules */
  118. struct asa_import_detect {
  119. struct asa_import_detect *next; /**< next rule */
  120. asa_pcre re; /**< if this matches... */
  121. char *name; /**< use this format */
  122. struct asa_import_format *fmt; /**< through this pointer */
  123. };
  124. extern struct asa_import_detect *asa_det_first, **asa_det_last;
  125. extern struct asa_import_format *asa_fmt_first, **asa_fmt_last;
  126. typedef int (asa_import_callback)(demux_t *demux, void *arg,
  127. int64_t start, int64_t stop,
  128. const char *buffer, size_t buffer_length);
  129. extern struct asa_import_detect *asa_imports_detect(const void *data,
  130. size_t dlen);
  131. extern int asa_import(demux_t *d, const void *data, size_t dlen,
  132. int64_t usecperframe, struct asa_import_detect *det,
  133. asa_import_callback *callback, void *arg);
  134. extern void asa_init_import(void);
  135. #endif