]> granicus.if.org Git - libass/commitdiff
Add public functions for removal of styles and events.
authoreugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>
Mon, 21 Aug 2006 16:33:13 +0000 (16:33 +0000)
committereugeni <eugeni@b3059339-0415-0410-9bf9-f77b7e298cf2>
Mon, 21 Aug 2006 16:33:13 +0000 (16:33 +0000)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19480 b3059339-0415-0410-9bf9-f77b7e298cf2

libass/ass.c
libass/ass.h

index 3eeb755fad79490146dac76e6093d87d7013c306..e5f9f5b8f435ffdf2a0017a373789859e4510fe7 100644 (file)
@@ -37,25 +37,13 @@ void ass_free_track(ass_track_t* track) {
        if (track->event_format)
                free(track->event_format);
        if (track->styles) {
-               for (i = 0; i < track->n_styles; ++i) {
-                       ass_style_t* style = track->styles + i;
-                       if (style->Name)
-                               free(style->Name);
-                       if (style->FontName)
-                               free(style->FontName);
-               }
+               for (i = 0; i < track->n_styles; ++i)
+                       ass_free_style(track, i);
                free(track->styles);
        }
        if (track->events) {
-               for (i = 0; i < track->n_events; ++i) {
-                       ass_event_t* event = track->events + i;
-                       if (event->Name)
-                               free(event->Name);
-                       if (event->Effect)
-                               free(event->Effect);
-                       if (event->Text)
-                               free(event->Text);
-               }
+               for (i = 0; i < track->n_events; ++i)
+                       ass_free_event(track, i);
                free(track->events);
        }
 }
@@ -96,10 +84,22 @@ int ass_alloc_event(ass_track_t* track) {
        return eid;
 }
 
-static void free_event(ass_track_t* track, int eid) {
-       if (track->n_events > eid + 1) // not last event
-               memcpy(track->events + eid, track->events + eid + 1, sizeof(ass_event_t) * (track->n_events - eid - 1));
-       track->n_events--;
+void ass_free_event(ass_track_t* track, int eid) {
+       ass_event_t* event = track->events + eid;
+       if (event->Name)
+               free(event->Name);
+       if (event->Effect)
+               free(event->Effect);
+       if (event->Text)
+               free(event->Text);
+}
+
+void ass_free_style(ass_track_t* track, int sid) {
+       ass_style_t* style = track->styles + sid;
+       if (style->Name)
+               free(style->Name);
+       if (style->FontName)
+               free(style->FontName);
 }
 
 static int events_compare_f(const void* a_, const void* b_) {
@@ -530,7 +530,8 @@ void ass_process_line(ass_track_t* track, char *data, int size, long long timeco
 //             dump_events(tid);
        } while (0);
        // some error
-       free_event(track, eid);
+       ass_free_event(track, eid);
+       track->n_events--;
        free(str);
 }
 
index 6049fd184b95d38dd8d93d0eaed3c2fa39dd5bf4..54fef6a7192270f07630f2ce5e45516f218c7038 100644 (file)
@@ -109,6 +109,22 @@ int ass_alloc_style(ass_track_t* track);
  */
 int ass_alloc_event(ass_track_t* track);
 
+/**
+ * \brief delete a style
+ * \param track track
+ * \param sid style id
+ * Deallocates style data. Does not modify track->n_styles.
+ */
+void ass_free_style(ass_track_t* track, int sid);
+
+/**
+ * \brief delete an event
+ * \param track track
+ * \param eid event id
+ * Deallocates event data. Does not modify track->n_events.
+ */
+void ass_free_event(ass_track_t* track, int eid);
+
 /**
  * \brief Process Codec Private section of subtitle stream
  * \param track target track