Ticket #2165: gst-plugins-espeak-after-indent.diff

File gst-plugins-espeak-after-indent.diff, 5.8 KB (added by alsroot, 14 years ago)
  • src/espeak.c

    diff --git a/src/espeak.c b/src/espeak.c
    index 58ffc28..cfb7fa7 100644
    a b static inline void spinning (Espin * base, Espin ** i) { 
    8484        *i = base;
    8585}
    8686
    87 static void emit_word (Econtext * self, guint offset, guint len) {
    88     GstStructure *data = gst_structure_new ("espeak-word",
    89             "offset", G_TYPE_UINT, offset,
    90             "len", G_TYPE_UINT, len,
    91             NULL);
     87static void post_message (Econtext * self, GstStructure * data) {
    9288    if (!self->bus)
    9389        self->bus = gst_element_get_bus (self->emitter);
    9490    GstMessage *msg =
    static void emit_word (Econtext * self, guint offset, guint len) { 
    9692    gst_bus_post (self->bus, msg);
    9793}
    9894
     95static void emit_word (Econtext * self, guint offset, guint len, guint id) {
     96    post_message (self, gst_structure_new ("espeak-word",
     97                    "offset", G_TYPE_UINT, offset,
     98                    "len", G_TYPE_UINT, len, "id", G_TYPE_UINT, id, NULL));
     99}
     100
     101static void emit_sentence (Econtext * self, guint offset, guint len, guint id) {
     102    post_message (self, gst_structure_new ("espeak-sentence",
     103                    "offset", G_TYPE_UINT, offset,
     104                    "len", G_TYPE_UINT, len, "id", G_TYPE_UINT, id, NULL));
     105}
     106
    99107static void emit_mark (Econtext * self, guint offset, const gchar * mark) {
    100     GstStructure *data = gst_structure_new ("espeak-mark",
    101             "offset", G_TYPE_UINT, offset,
    102             "mark", G_TYPE_STRING, mark,
    103             NULL);
    104     if (!self->bus)
    105         self->bus = gst_element_get_bus (self->emitter);
    106     GstMessage *msg =
    107             gst_message_new_element (GST_OBJECT (self->emitter), data);
    108     gst_bus_post (self->bus, msg);
     108    post_message (self, gst_structure_new ("espeak-mark",
     109                    "offset", G_TYPE_UINT, offset,
     110                    "mark", G_TYPE_STRING, mark, NULL));
    109111}
    110112
    111113static inline gsize
    GstBuffer *play (Econtext * self, Espin * spin, gsize size_to_play) { 
    214216        }
    215217    }
    216218
    217     inline gsize word (Econtext * self, Espin * spin, gsize size_to_play) {
     219    inline gsize events (Econtext * self, Espin * spin, gsize size_to_play) {
    218220        gsize spin_size = spin->sound->len;
    219221        gsize event;
    220222        gsize sample_offset = 0;
    221 
    222         for (event = spin->events_pos; TRUE; ++event) {
    223             espeak_EVENT *i =
    224                     &g_array_index (spin->events, espeak_EVENT, event);
    225 
    226             GST_DEBUG ("event=%zd i->type=%d i->text_position=%d",
    227                     event, i->type, i->text_position);
    228 
    229             if (i->type == espeakEVENT_LIST_TERMINATED) {
    230                 sample_offset = spin_size;
     223        espeak_EVENT *i =
     224                &g_array_index (spin->events, espeak_EVENT, spin->events_pos);
     225
     226        GST_DEBUG ("event=%zd i->type=%d i->text_position=%d",
     227                event, i->type, i->text_position);
     228
     229        if (i->type == espeakEVENT_LIST_TERMINATED) {
     230            sample_offset = spin_size;
     231        } else {
     232            switch (i->type) {
     233            case espeakEVENT_MARK:
     234                emit_mark (self, i->text_position, i->id.name);
    231235                break;
    232             } else if (i->type == espeakEVENT_WORD) {
    233                 if (i->text_position != spin->last_word) {
    234                     emit_word (self, i->text_position, i->length);
    235                     spin->last_word = i->text_position;
    236                 }
    237                 sample_offset = i[1].sample * 2;
     236            case espeakEVENT_WORD:
     237                emit_word (self, i->text_position, i->length, i->id.number);
    238238                break;
    239             }
    240         }
    241 
    242         return sample_offset - spin->sound_offset;
    243     }
    244 
    245     inline gsize mark (Econtext * self, Espin * spin, gsize size_to_play) {
    246         if (spin->mark_name) {
    247             emit_mark (self, spin->mark_offset, spin->mark_name);
    248             spin->mark_offset = 0;
    249             spin->mark_name = NULL;
    250         }
    251 
    252         gsize spin_size = spin->sound->len;
    253         gsize event;
    254         gsize sample_offset = 0;
    255         guint mark_offset = 0;
    256         const gchar *mark_name = NULL;
    257 
    258         for (event = spin->events_pos; TRUE; ++event) {
    259             espeak_EVENT *i =
    260                     &g_array_index (spin->events, espeak_EVENT, event);
    261 
    262             GST_DEBUG ("event=%zd i->type=%d i->text_position=%d",
    263                     event, i->type, i->text_position);
    264 
    265             if (i->type == espeakEVENT_LIST_TERMINATED) {
    266                 sample_offset = spin_size;
    267                 break;
    268             } else if (i->type == espeakEVENT_MARK) {
    269                 if (i->sample == 0) {
    270                     if (spin->sound_offset == 0)
    271                         emit_mark (self, i->text_position, i->id.name);
    272                     continue;
    273                 }
    274 
    275                 mark_offset = i->text_position;
    276                 mark_name = i->id.name;
    277                 sample_offset = i->sample * 2;
     239            case espeakEVENT_SENTENCE:
     240                emit_sentence (self, i->text_position, i->length, i->id.number);
    278241                break;
    279242            }
    280243        }
    281244
    282         spin->mark_offset = mark_offset;
    283         spin->mark_name = mark_name;
     245        if (!sample_offset) {
     246            sample_offset = i->sample * 2;
     247        }
    284248
    285249        return sample_offset - spin->sound_offset;
    286250    }
    GstBuffer *play (Econtext * self, Espin * spin, gsize size_to_play) { 
    289253
    290254    switch (g_atomic_int_get (&self->track)) {
    291255    case ESPEAK_TRACK_WORD:
    292         size_to_play = word (self, spin, size_to_play);
    293         break;
    294256    case ESPEAK_TRACK_MARK:
    295         size_to_play = mark (self, spin, size_to_play);
     257        size_to_play = events (self, spin, size_to_play);
    296258        break;
    297259    default:
    298260        size_to_play = whole (spin, size_to_play);
     261        break;
    299262    }
    300263
    301264    espeak_EVENT *event = &g_array_index (spin->events, espeak_EVENT,