summaryrefslogtreecommitdiffstats
path: root/libhb/decutf8sub.c
diff options
context:
space:
mode:
Diffstat (limited to 'libhb/decutf8sub.c')
-rw-r--r--libhb/decutf8sub.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/libhb/decutf8sub.c b/libhb/decutf8sub.c
new file mode 100644
index 000000000..dcd05d4fc
--- /dev/null
+++ b/libhb/decutf8sub.c
@@ -0,0 +1,64 @@
+/*
+ This file is part of the HandBrake source code.
+ Homepage: <http://handbrake.fr/>.
+ It may be used under the terms of the GNU General Public License. */
+
+/*
+ * Decoder for UTF-8 subtitles obtained from file input-sources.
+ *
+ * Input and output packet format is UTF-8 encoded text,
+ * with limited HTML-style markup (only <b>, <i>, and <u>).
+ *
+ * @author David Foster (davidfstr)
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "hb.h"
+
+static int decutf8Init( hb_work_object_t * w, hb_job_t * job )
+{
+ return 0;
+}
+
+static int decutf8Work( hb_work_object_t * w, hb_buffer_t ** buf_in,
+ hb_buffer_t ** buf_out )
+{
+ hb_buffer_t * in = *buf_in;
+ hb_buffer_t * out = NULL;
+
+ // Pass the packets through without modification
+ out = in;
+
+ // Warn if the subtitle's duration has not been passed through by the demuxer,
+ // which will prevent the subtitle from displaying at all
+ if ( out->stop == 0 ) {
+ hb_log( "decutf8sub: subtitle packet lacks duration" );
+ }
+
+ // We shouldn't be storing the extra NULL character,
+ // but the MP4 muxer expects this, unfortunately.
+ if ( out->size > 0 && out->data[out->size - 1] != '\0' ) {
+ // NOTE: out->size remains unchanged
+ hb_buffer_realloc( out, out->size + 1 );
+ out->data[out->size] = '\0';
+ }
+
+ *buf_in = NULL;
+ *buf_out = out;
+ return HB_WORK_OK;
+}
+
+static void decutf8Close( hb_work_object_t * w )
+{
+ // nothing
+}
+
+hb_work_object_t hb_decutf8sub =
+{
+ WORK_DECUTF8SUB,
+ "UTF-8 Subtitle Decoder",
+ decutf8Init,
+ decutf8Work,
+ decutf8Close
+};