Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@member.fsf.org>2009-03-06 08:29:03 (GMT)
committer Aleksey Lim <alsroot@member.fsf.org>2009-03-06 08:29:03 (GMT)
commite33693d763d2aeb350b87ca6468cdd5515a8382d (patch)
treead524030fe9ce6e7e16e0a254034da4102849bf7
parentb956b2b089a7515a917ee91eb11aa815f3bb46bd (diff)
Rename string_* to text_*; move text_* related code to text.h
-rw-r--r--src/spin.c38
-rw-r--r--src/text.h41
2 files changed, 40 insertions, 39 deletions
diff --git a/src/spin.c b/src/spin.c
index 8d03ca9..a879ae4 100644
--- a/src/spin.c
+++ b/src/spin.c
@@ -140,7 +140,7 @@ spin_in(Econtext *self, const gchar *str_)
if (str_ == NULL || *str_ == 0)
return;
- Text *str = string_new(str_);
+ Text *str = text_new(str_);
if (self->in_queue)
{
@@ -148,42 +148,28 @@ spin_in(Econtext *self, const gchar *str_)
return;
}
- gsize orig_frame_len = str->frame_len;
+ gboolean chunked = FALSE;
pthread_mutex_lock(&self->lock);
- while (str->frame_len && self->in->state == IN)
+ while (!text_eot(str) && self->in->state == IN)
{
Espin *spin = self->in;
-
- GST_DEBUG("[%p] str->offset=%ld str->frame_len=%ld "
- "spin->text.offset=%ld spin->text.frame_len=%ld", self,
- str->offset, str->frame_len,
- spin->text.offset, spin->text.frame_len);
-
- string_chunk(str, &spin->text, SPIN_FRAME_SIZE);
+ text_chunk(str, &spin->text, SPIN_FRAME_SIZE);
spin->state = PROCESS;
-
- GST_DEBUG("[%p] str->offset=%ld str->frame_len=%ld "
- "spin->text.offset=%ld spin->text.frame_len=%ld", self,
- str->offset, str->frame_len,
- spin->text.offset, spin->text.frame_len);
-
spinning(self->queue, &self->in);
+ chunked = TRUE;
}
- if ((orig_frame_len != str->frame_len) && (self->state & INPROCESS) == 0)
+ if (chunked && (self->state & INPROCESS) == 0)
{
- GST_DEBUG("[%p] orig_frame_len=%ld str->len=%ld", self, orig_frame_len,
- str->len);
-
self->state |= INPROCESS;
process_push(self);
}
pthread_mutex_unlock(&self->lock);
- if (!string_nil(str))
+ if (!text_eot(str))
self->in_queue = g_slist_append(self->in_queue, str);
}
@@ -267,9 +253,11 @@ process(void *data)
gboolean next = FALSE;
pthread_mutex_unlock(&process_lock);
- gchar *text = spin->text.body + spin->text.offset;
- gchar last_char = text[spin->text.frame_len];
- text[spin->text.frame_len] = 0;
+ gchar *text = text_first(&spin->text);
+ gchar *last = text_last(&spin->text);
+
+ gchar last_char = *last;
+ *last = 0;
GST_DEBUG("[%p] text=%s", context, text);
@@ -278,7 +266,7 @@ process(void *data)
process_espeak_cb(text, spin->sound, context->closure);
spin->sound_pos = 0;
- text[spin->text.frame_len] = last_char;
+ *last = last_char;
pthread_mutex_lock(&context->lock);
spin->state = OUT;
diff --git a/src/text.h b/src/text.h
index 0261848..1983a70 100644
--- a/src/text.h
+++ b/src/text.h
@@ -29,7 +29,7 @@ typedef struct
} Text;
inline Text*
-string_new(const gchar *src)
+text_new(const gchar *src)
{
if (!src)
return NULL;
@@ -52,7 +52,7 @@ string_new(const gchar *src)
}
inline void
-string_chunk(Text *src, Text *dst, gsize len)
+text_chunk(Text *src, Text *dst, gsize len)
{
memcpy(dst, src, sizeof(Text));
@@ -76,32 +76,45 @@ string_chunk(Text *src, Text *dst, gsize len)
src->offset += dst->frame_len;
src->frame_len -= dst->frame_len;
- GST_DEBUG("[%p] len=%ld dst_len=%ld dst_last=%ld", src, len, dst_len,
- dst_last-dst->body);
+ GST_DEBUG("[%p] len=%ld dst_len=%ld dst_last=%ld "
+ "src->offset=%ld src->frame_len=%ld", src, len, dst_len,
+ dst_last-dst->body, src->offset, src->frame_len);
+}
+
+inline gchar*
+text_first(Text *self)
+{
+ return self->body + self->offset;
+}
+
+inline gchar*
+text_last(Text *self)
+{
+ return text_first(self) + self->frame_len;
}
inline gboolean
-string_nil(Text *str)
+text_eot(Text *str)
{
- return str->frame_len == 0;
+return str->frame_len == 0;
}
inline void
string_unref(Text *str)
{
- if (string_nil(str))
- return;
+if (text_eot(str))
+ return;
- gpointer data = NULL;
+gpointer data = NULL;
- if (str->offset + str->frame_len >= str->len)
- data = str->body - sizeof(Text);
+if (str->offset + str->frame_len >= str->len)
+ data = str->body - sizeof(Text);
- memset(str, 0, sizeof(Text));
+memset(str, 0, sizeof(Text));
- GST_DEBUG("[%p]", data);
+GST_DEBUG("[%p]", data);
- g_free(data);
+g_free(data);
}
#endif