📄 playtree.h
字号:
#ifndef __PLAYTREE_H#define __PLAYTREE_Hstruct stream_st;struct m_config;#define PLAY_TREE_ITER_ERROR 0#define PLAY_TREE_ITER_ENTRY 1#define PLAY_TREE_ITER_NODE 2#define PLAY_TREE_ITER_END 3#define PLAY_TREE_ENTRY_NODE -1#define PLAY_TREE_ENTRY_DVD 0#define PLAY_TREE_ENTRY_VCD 1#define PLAY_TREE_ENTRY_TV 2#define PLAY_TREE_ENTRY_FILE 3// Playtree flags#define PLAY_TREE_RND (1<<0)// Playtree flags used by the iter#define PLAY_TREE_RND_PLAYED (1<<8)// Iter mode#define PLAY_TREE_ITER_NORMAL 0#define PLAY_TREE_ITER_RND 1typedef struct play_tree play_tree_t;typedef struct play_tree_iter play_tree_iter_t;typedef struct play_tree_param play_tree_param_t;#if 0typedef struct play_tree_info play_tree_info_t;// TODO : a attrib,val pair system and not something hardcodedstruct play_tree_info { char* title; char* author; char* copyright; char* abstract; // Some more ??}#endifstruct play_tree_param { char* name; char* value;};struct play_tree { play_tree_t* parent; play_tree_t* child; play_tree_t* next; play_tree_t* prev; //play_tree_info_t info; play_tree_param_t* params; int loop; char** files; int entry_type; int flags;}; struct play_tree_iter { play_tree_t* root; // Iter root tree play_tree_t* tree; // Current tree struct m_config* config; int loop; // Looping status int file; int num_files; int entry_pushed; int mode; int* status_stack; // loop/valid stack to save/revert status when we go up/down int stack_size; // status stack size};play_tree_t* play_tree_new(void);// If childs is true free also the childsvoidplay_tree_free(play_tree_t* pt, int childs);voidplay_tree_free_list(play_tree_t* pt, int childs);// Childsvoidplay_tree_set_child(play_tree_t* pt, play_tree_t* child);// Or parentvoidplay_tree_set_parent(play_tree_t* pt, play_tree_t* parent);// Add at endvoidplay_tree_append_entry(play_tree_t* pt, play_tree_t* entry);// And on beginingvoidplay_tree_prepend_entry(play_tree_t* pt, play_tree_t* entry);// Insert aftervoidplay_tree_insert_entry(play_tree_t* pt, play_tree_t* entry);// Detach from the tree voidplay_tree_remove(play_tree_t* pt, int free_it,int with_childs);voidplay_tree_add_file(play_tree_t* pt,char* file);intplay_tree_remove_file(play_tree_t* pt,char* file);// Val can be NULLvoidplay_tree_set_param(play_tree_t* pt, char* name, char* val);intplay_tree_unset_param(play_tree_t* pt, char* name);// Set all paramter of source in destvoidplay_tree_set_params_from(play_tree_t* dest,play_tree_t* src);/// Iteratorplay_tree_iter_t*play_tree_iter_new(play_tree_t* pt, struct m_config* config);play_tree_iter_t*play_tree_iter_new_copy(play_tree_iter_t* old);voidplay_tree_iter_free(play_tree_iter_t* iter);// d is the direction : d > 0 == next , d < 0 == prev// with_node : TRUE == stop on nodes with childs, FALSE == go directly to the next childint play_tree_iter_step(play_tree_iter_t* iter, int d,int with_nodes);int // Break a loop, etcplay_tree_iter_up_step(play_tree_iter_t* iter, int d,int with_nodes);int // Enter a node child listplay_tree_iter_down_step(play_tree_iter_t* iter, int d,int with_nodes);char*play_tree_iter_get_file(play_tree_iter_t* iter, int d);play_tree_t*parse_playtree(struct stream_st *stream, int forced);play_tree_t*play_tree_cleanup(play_tree_t* pt);play_tree_t*parse_playlist_file(char* file);// Highlevel API with pt-suffix to different from low-level API// by Fabian Franz (mplayer@fabian-franz.de)// Cleanups pt and creates a new iterplay_tree_iter_t* pt_iter_create(play_tree_t** pt, struct m_config* config);// Frees the itervoid pt_iter_destroy(play_tree_iter_t** iter);// Gets the next available file in the direction (d=-1 || d=+1)char* pt_iter_get_file(play_tree_iter_t* iter, int d);// Two Macros that implement forward and backward direction#define pt_iter_get_next_file(iter) pt_iter_get_file(iter, 1)#define pt_iter_get_prev_file(iter) pt_iter_get_file(iter, -1)// Inserts entry into the playtreevoid pt_iter_insert_entry(play_tree_iter_t* iter, play_tree_t* entry);//Replaces current entry in playtree with entry//by doing insert and removevoid pt_iter_replace_entry(play_tree_iter_t* iter, play_tree_t* entry);// Adds a new file to the playtree, // if it is not valid it is createdvoid pt_add_file(play_tree_t** ppt, char* filename);// Performs a convert to playtree-syntax, by concat path/file// and performs pt_add_filevoid pt_add_gui_file(play_tree_t** ppt, char* path, char* file);//Two macros to use only the iter and not the other things#define pt_iter_add_file(iter, filename) pt_add_file(&iter->tree, filename)#define pt_iter_add_gui_file(iter, path, name) pt_add_gui_file(&iter->tree, path, name)// Resets the iter and goes back to headvoid pt_iter_goto_head(play_tree_iter_t* iter);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -