From: Michael R. <mr...@us...> - 2003-01-09 21:28:22
|
Hi Miguel, > i'd like to ask what are your plans to implement the external > subtitles using multiple streams. i thought a bit on the subject and > still couldn't came with any complete idea... :( My plan was to write a demuxer (almost there) and a decoder which do the job of just playing a lonely subtitle file in a xine stream. This stream would then have to be synced to the master stream with the video in some magical way. > some desirables: > > 1) media independence. subtitles must work with any media format, not > only avi as we had in 0.9.x series. That would be guaranteed with this scheme. > 2) it should use accurate information when available. some sub are > specified using frame numbers so this should be the preferred method > to sync them to avi's, for example. Well, I thought PTS sync would be enough, since it does not matter much, if the subtitles are off by three frames. But if we can come up with a method of frame accurate sync, that would be cool. > 3) it should support subtitling of multiple files, that is, a single > sub applied to a movie playlist (like a film split in two parts for > example) Agreed, this would be nice, so some thinking has to go into how far the master-slave relation affects the stream's playback. > some random thoughts about implementation: > > - one idea would be using the extra_info that is attached on every > frame. from there we can get not only current position in time but > also frame number. for example, video_out might accept registration > of callbacks on frame drawing? Don't know how you would get that info from one stream to another. > - syncing metronom's of multiple streams is a tempting idea (like > having the same pts_offset or something). however it still not clear > to me how exactly it could help us to sync subtitles. Subtitles use PTS, video uses PTS. If they are synced, the subtitles appear at the right time. My thought was that both metronom's of both streams start with identical vpts_offsets and every offset change fed back from audio out would affect both metronom's offsets. Everything else, they would do on their own. Is that enough to keep the streams in sync? > - i don't know what the public api for relating streams should be. > ideas? /* * Make one stream the slave of another. * This establishes a binary master slave relation on streams, where * certain operations (specified by parameter "affection") on the master * stream are also applied to the slave stream */ xine_stream_master_slave(xine_stream_t *master, xine_stream_t *slave, int affection); /* affection is some of the following ORed together: */ /* playing the master plays the slave */ #define XINE_MASTER_SLAVE_START (1<<0) /* seeking the master seeks the slave */ #define XINE_MASTER_SLAVE_SEEK (1<<1) /* pausing the master pauses the slave */ #define XINE_MASTER_SLAVE_PAUSE (1<<2) /* master and slave are kept in sync */ #define XINE_MASTER_SLAVE_SYNC (1<<3) /* slaves stops on master stop */ #define XINE_MASTER_SLAVE_STOP (1<<4) > - on seeking of the "master" stream we probably have to also seek the > "slave" stream. (?) Yes. See above. > of course, this thread is not only to michael, any other comments are > appreciated... I second that. Michael -- panic("Detected a card I can't drive - whoops\n"); 2.2.16 /usr/src/linux/drivers/net/daynaport.c |