[FFmpeg-devel] [PATCH] AVFormat: LRC demuxer and muxer
Derek Buitenhuis
derek.buitenhuis at gmail.com
Wed Jul 9 17:09:43 CEST 2014
On 7/9/2014 3:55 PM, Star Brilliant wrote:
>>> +#include "libavutil/bprint.h"
>>> +#include "libavutil/dict.h"
>>> +
>>> +typedef struct LRCContext {
>>> + FFDemuxSubtitlesQueue q;
>>> + int ts_offset;
>>
>> Is int enough for a timestamp difference?
>
> bprint is used for string and buffer manipulation. Again this #include
> is adapted from assdec.c.
>
> timestamp difference is far from enough, since LRC comes with arbitrary
> line order.
> Another reason is repeated line feature. LRC can have single line that
> is sung multiple times assigned with different timestamps.
> This is why I use FFDemuxSubtitlesQueue to sort those lines.
>
> ts_offset is a metadata item. By specifying "offset" in metadata, the
> whole lyrics would shift in timestamps to get sync with different
> versions of music.
> My implementation does offset shifting on demuxing. So I have to keep a
> ts_offset member.
You misunderstand what I am asking. int may be 32bits, and timestamps generate 64.
is LRC guaranteed to only have 32bit timestamps?
>>> + *start = -(mm*60000LL + ss*1000LL + cs*10LL); // just in case negative pts
>>
>> Why are you mangling the timestamps? Negative timestamps are technically valid.
>
> Negative timestamps are not effective in real LRCs. However, with the
> feature called "offset" mentioned just above. A normal timestamp can
> easily become negative.
> Since most players ignore uneffective lines (LRC has no official spec,
> it is a de-facto standard). So I will let the players drop those
> negative timestamps, instead of losing data at FFmpeg layer.
Sorry, I misunderstood the code. I thought you we're making it positive (double negative -> positive).
That said, there is still a bug. %d will read negative integers already, you
do not need to check for '-'.
- Derek
More information about the ffmpeg-devel
mailing list