int main() { size_t i; kate_info ki; int ret; ret=kate_info_init(&ki); if (ret<0) { fprintf(stderr,"kate_info_init failed: %d\n",ret); return ret; } for (i=0;i<sizeof(langs_trunc)/sizeof(langs_trunc[0]);++i) { /* printf("setting %s\n",langs_trunc[i].tag); */ ret=kate_info_set_language(&ki,langs_trunc[i].tag); if (ret!=langs_trunc[i].expected_return_code) { fprintf(stderr,"error: %d different from expected %d\n",ret,langs_trunc[i].expected_return_code); return -1; } else if (ret>=0 && strcasecmp(ki.language,langs_trunc[i].expected_tag)) { fprintf(stderr,"error: %s different from expected %s\n",ki.language,langs_trunc[i].expected_tag); return -1; } } for (i=0;i<sizeof(langs_cmp)/sizeof(langs_cmp[0]);++i) { ret=kate_info_set_language(&ki,langs_cmp[i].tag1); if (ret<0) { fprintf(stderr,"error: kate_info_set_language failed: %d\n",ret); return ret; } ret=kate_info_matches_language(&ki,langs_cmp[i].tag2); if (ret!=langs_cmp[i].expected_return_code) { fprintf(stderr,"error: %d different from expected %d\n",ret,langs_cmp[i].expected_return_code); return -1; } } ret=kate_info_clear(&ki); if (ret<0) { fprintf(stderr,"kate_info_clear failed: %d\n",ret); return ret; } return 0; }
static GstStateChangeReturn gst_kate_enc_change_state (GstElement * element, GstStateChange transition) { GstKateEnc *ke = GST_KATE_ENC (element); GstStateChangeReturn res; int ret; GST_INFO_OBJECT (ke, "gst_kate_enc_change_state"); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: ke->tags = gst_tag_list_new_empty (); break; case GST_STATE_CHANGE_READY_TO_PAUSED: GST_DEBUG_OBJECT (ke, "READY -> PAUSED, initializing kate state"); ret = kate_info_init (&ke->ki); if (ret < 0) { GST_WARNING_OBJECT (ke, "failed to initialize kate info structure: %s", gst_kate_util_get_error_message (ret)); break; } if (ke->language) { ret = kate_info_set_language (&ke->ki, ke->language); if (ret < 0) { GST_WARNING_OBJECT (ke, "failed to set stream language: %s", gst_kate_util_get_error_message (ret)); break; } } if (ke->category) { ret = kate_info_set_category (&ke->ki, ke->category); if (ret < 0) { GST_WARNING_OBJECT (ke, "failed to set stream category: %s", gst_kate_util_get_error_message (ret)); break; } } ret = kate_info_set_original_canvas_size (&ke->ki, ke->original_canvas_width, ke->original_canvas_height); if (ret < 0) { GST_WARNING_OBJECT (ke, "failed to set original canvas size: %s", gst_kate_util_get_error_message (ret)); break; } ret = kate_comment_init (&ke->kc); if (ret < 0) { GST_WARNING_OBJECT (ke, "failed to initialize kate comment structure: %s", gst_kate_util_get_error_message (ret)); break; } ret = kate_encode_init (&ke->k, &ke->ki); if (ret < 0) { GST_WARNING_OBJECT (ke, "failed to initialize kate state: %s", gst_kate_util_get_error_message (ret)); break; } ke->headers_sent = FALSE; ke->initialized = TRUE; ke->last_timestamp = 0; ke->latest_end_time = 0; ke->format = GST_KATE_FORMAT_UNDEFINED; break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: break; case GST_STATE_CHANGE_READY_TO_NULL: gst_tag_list_unref (ke->tags); ke->tags = NULL; break; default: break; } res = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); if (res == GST_STATE_CHANGE_FAILURE) { GST_WARNING_OBJECT (ke, "Parent failed to change state"); return res; } switch (transition) { case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: GST_DEBUG_OBJECT (ke, "PAUSED -> READY, clearing kate state"); if (ke->initialized) { kate_clear (&ke->k); kate_info_clear (&ke->ki); kate_comment_clear (&ke->kc); ke->initialized = FALSE; ke->last_timestamp = 0; ke->latest_end_time = 0; } gst_event_replace (&ke->pending_segment, NULL); break; case GST_STATE_CHANGE_READY_TO_NULL: break; default: break; } GST_DEBUG_OBJECT (ke, "State change done"); return res; }