[FFmpeg-devel] [PATCH] AVFormat: LRC demuxer and muxer
Star Brilliant
m13253 at hotmail.com
Wed Jul 9 17:37:31 CEST 2014
On 2014-07-09 23:09, Derek Buitenhuis wrote:
> You misunderstand what I am asking. int may be 32bits, and timestamps generate 64.
> is LRC guaranteed to only have 32bit timestamps?
I find no portable way to scanf a 64-bit integer in C90 standard.
sscanf(buf, "%" SCNd64, &ptr); is a C99 thing.
Does lavfutil provide something to read a 64-bit integer?
>>>> + *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 '-'.
I check for negative before positive. Anyway, if I use only one sscanf,
I will have to do this:
if(sscanf(p, "[%d:%d.%d]", &mm, &ss, &cs) == 3) {
if(mm >= 0)
*start = mm*60000LL + ss*1000LL + cs*10LL;
else
*start = mm*60000LL - ss*1000LL - cs*10LL;
}
Which one do you think is better?
More information about the ffmpeg-devel
mailing list