From: Michael R. <mr...@us...> - 2002-10-21 12:09:52
|
Hi Miguel, Hi James, > It might be a bit ugly to implement it at first, but I was hoping to > use a method so that once added to the decoders, the decoders would > not have to be touched again. > The this extra information I will call private data, because the > decoder does not need to know anything about it's contents, all it > will have to do is move the info from the fifo to the frame. > So, we create a private structure containing all the different > variables and info we wish to pass. > Then xine-lib will provide helper functions to each decoder. > private_data_malloc(void) > private_data_copy(void *dst, void *src) > private_data_merge(void *dst, void *src) > So, we would add these function calls where needed to all the > decoders in order to pass the data from fifo to output frame. > If in future we decide we wish to add another variable to the private > structure, all we will have to change is the helper functions. Of > course, if the decoder needs any of the private data, it could have > access to the full private structure. This could be a solution, too: We create a vo_frame_info_t struct containing members for all kinds of info we want to pass from demuxers to frames through the decoders. The demuxer would fill in all available info in this structure which is attached to the buffers (as a new member in buf_element_t). The decoder would then pass the vo_frame_info_t from the current buffer in its decode() function to the frames by providing it as an additional parameter to vo_get_frame(). In vo_get_frame() the video out can then do with the info whatever it wants (e.g. attach a copy of it to every frame). This way, only minimal change to decoders is necessary (just one additional parameter to the get_frame() call, the compiler will help us to enforce this), and we can add new members to the vo_frame_info_t struct when necessary. Michael -- panic("aha1740.c"); /* Goodbye */ 2.2.16 /usr/src/linux/drivers/scsi/aha1740.c |