Control: tags -1 - pending
Hi Sebastian!
On Sun, Jan 30, 2022 at 09:34:10PM +0100, Sebastian Ramacher wrote:
> qtwebengine-opensource-src FTBFS with ffmpeg 5.0 (available in
> experimental):
I backported some upstream commits which make it better, but not completely.
My current problem is that I don't see any replacement for this code in
Chromium's media/filters/ffmpeg_demuxer.cc:
if (stream->first_dts != kNoFFmpegTimestamp &&
stream->codecpar->codec_id != AV_CODEC_ID_HEVC &&
stream->codecpar->codec_id != AV_CODEC_ID_H264 &&
stream->codecpar->codec_id != AV_CODEC_ID_MPEG4) {
const base::TimeDelta first_pts =
ConvertFromTimeBase(stream->time_base, stream->first_dts);
if (first_pts < start_time)
start_time = first_pts;
}
Here stream is AVStream*. In FFmpeg 5, that class does not have first_dts
member. FFmpeg's own code uses ffstream() to cast such a pointer to FFStream*,
but both FFStream struct and ffstream() function are private API.
Upstream Chromium uses a bundled copy of FFMpeg and they patched it to add
av_stream_get_first_dts() function which exposes that member [1].
So my questions are:
- Do you know how to write equivalent code using only public API?
- If no, maybe you can add av_stream_get_first_dts() function so that Chromium
can use it? I can file a bug upstream asking to make it official for the next
release.
- Alternatively, maybe you can install libavutil's internal.h header, so I can
take FFStream and ffstream() definitions from there?
I hate both second and third solutions, but nothing better came to my mind.
[1]: https://chromium.googlesource.com/chromium/third_party/ffmpeg/+/refs/heads/master/libavformat/utils.c#95
--
Dmitry Shachnev
Attachment:
signature.asc
Description: PGP signature