[vlc-devel] playlist API

Stephan Assmus stippi at yellowbites.com
Wed Jan 29 17:48:52 CET 2003

Hello all,

I was working on the BeOS playlist handling today, and I have to say I 
find the vlc API in that regard rather clumsy. The thing I have 
implemented is drag-sorting in the playlist window. The API currently 
consists of playlist_Add(), playlist_AddItem() and playlist_Delete(). I 
think, these functions are not enough and/or they do more than they 
should. Here is my proposal for an easier but more powerful API:

playlist_item_t* playlist_ItemAt( int index );
                    // returns NULL if index out of range
int              playlist_AddItem( playlist_item_t* item, int index = -
1 );
                    // returns 1 if successful, otherwise 0
                    // if index = -1, append at end
int              playlist_RemoveItem( playlist_item_t* item );
                    // returns 1 if successful, otherwise 0
                    // does NOT free/delete the item - only removes it 
from list!
playlist_item_t* playlist_RemoveItem( int index );
                    // returns item at index or NULL, if index out of 
                    // does NOT free/delete the item - only removes it 
from list
                    // and returns it!

With these four simple functions, any playlist modification is 
possible. The most annoying thing about the current API is, that items 
actually get freed when you remove them. This caused me troubles when 
trying to implement sorting. In my API, no function would do any 
allocating or freeing of the items. That would be left up to the 
caller. The power in my API lies in the fact, that you can disconnect 
playlist items from the list and add them at another index.

While looking through the playlist and other parts of the vlc code, I 
noticed that the source mimics object oriented design, but I think it 
would be much cleaner to read and easier to maintain and some features 
would just fall into place if it actually were C++. But that's just my 
observation, I assume many would disagree about using C++.

An additional playlist_DeleteItem() is still needed, and that function 
should also take care of actually stopping the playback if the deleted 
item happens to be the currently played item. Currently, 
playlist_Delete() does nothing in that regard.

Last but not least, playlist_Add( const char* path ) would be 
convenient to keep arround.

Best regards,

This is the vlc-devel mailing-list, see http://www.videolan.org/vlc/
To unsubscribe, please read http://developers.videolan.org/lists.html
If you are in trouble, please contact <postmaster at videolan.org>

More information about the vlc-devel mailing list