Zaggy1024
7e325d64f5
LibMedia: Use [from/to]_time_units in FFmpegDemuxer and AudioMixingSink
2025-11-17 16:51:18 +01:00
Zaggy1024
0e9c746b48
LibMedia: Allow signalling of EOF to decoders
...
This is used by FFmpeg's H.264 decoder to determine when to output any
buffered frames after data runs out.
2025-11-05 18:40:02 +01:00
Zaggy1024
634e5ff491
LibMedia: Move CICP values from CodedFrame to Track
...
All our current demuxers have these constant for an entire track, so we
don't need to get them for every frame we output.
2025-11-05 18:40:02 +01:00
Zaggy1024
6bd7e338fd
LibMedia: Remove redundant parameter names in Demuxer
2025-11-05 18:40:02 +01:00
Zaggy1024
4cf0a77d38
LibMedia: Export FFmpegDemuxer to allow direct use of data providers
...
We can use forward declarations of the FFmpeg types within the header
to allow it to be exported without causing errors in using code.
2025-10-27 17:28:49 -07:00
Zaggy1024
fcde0f66c8
LibMedia: Allow FFmpegDemuxer to grab samples from multiple streams
...
In order to do so, we create a AVFormatContext for each stream we want
to demux.
2025-10-27 17:28:49 -07:00
Zaggy1024
9c960c3307
LibMedia: Use integer math to calculate the FFmpeg seek target pts
2025-10-27 17:28:49 -07:00
Zaggy1024
b1c9a872bc
LibMedia: Return whether a demuxer seek moved the stream position
...
We no longer need to return a timestamp from the seek function, which
makes it much easier to implement backend-agnostically.
2025-10-27 17:28:49 -07:00
Zaggy1024
86e236519d
LibMedia: Give demuxer seeks an option to always seek to a keyframe
...
By default, MatroskaDemuxer chooses not to seek if the current frame
is closer to the seek target than the keyframe that precedes the seek
target. However, it can be desirable to seek to a keyframe anyway, so
let's allow that.
2025-10-27 17:28:49 -07:00
Zaggy1024
0a03cc1cf7
LibMedia: Store whether a CodedFrame is a keyframe
2025-10-27 17:28:49 -07:00
Zaggy1024
d52ceec1bf
LibMedia: Take Track const& in Demuxer methods
2025-10-27 17:28:49 -07:00
Zaggy1024
d3941cd83d
LibMedia: Support playing FLAC
2025-10-27 17:28:49 -07:00
Zaggy1024
e11da1f85f
LibMedia: Store a name and language in Media::Track
2025-10-27 17:28:49 -07:00
Zaggy1024
0ff330c906
LibMedia: Play audio through PlaybackManager using Providers/Sinks
...
This commit implements the functionality to play back audio through
PlaybackManager.
To decode the audio data, AudioDataProviders are created for each track
in the provided media data. These providers will fill their audio block
queue, then sit idle until their corresponding tracks are enabled.
In order to output the audio, one AudioMixingSink is created which
manages a PlaybackStream which requests audio blocks from multiple
AudioDataProviders and mixes them into one buffer with sample-perfect
precision.
2025-10-27 17:28:49 -07:00
Zaggy1024
dd052832c1
LibMedia: Support the MP3 and AAC codecs in our demuxer
2025-10-27 17:28:49 -07:00
Zaggy1024
6b34003c2c
LibMedia: Support coded audio frames in our demuxers
...
This adds a new variant of the metadata storage in CodedFrame for audio
frames, called CodedAudioFrameData.
2025-10-27 17:28:49 -07:00
Zaggy1024
dfbad09315
LibMedia: Set the time base in FFmpegVideoDecoder
...
Very minor change, which doesn't actually affect our output, since we
were already inputting and outputting microseconds, but it can't hurt
to give FFmpeg's decoder this information as well.
2025-10-27 17:28:49 -07:00
Zaggy1024
523e7e2ffa
LibMedia: Make Demuxer atomically ref-counted
...
We'll need to share the demuxer between multiple decoder providers, and
those will hold references to the demuxer from their own decoder
threads.
2025-10-27 17:28:49 -07:00
Zaggy1024
319e381eb9
LibMedia: Mark FFmpegVideoDecoder functions with virtual override
...
The destructor lacked any of these specifiers, and others lacked the
virtual specifier.
2025-09-22 19:34:48 +02:00
Zaggy1024
fc1cc49d6a
LibMedia: Remove an unused private function from FFmpegVideoDecoder
2025-09-22 12:04:29 -05:00
Zaggy1024
6cbe607ecf
LibMedia+Tests: Call decoder input samples "coded data" for clarity
...
The word sample is very ambiguous in the realm of decoders, so let's
just make it abundantly clear what the decoder is receiving.
2025-09-22 12:04:29 -05:00
Zaggy1024
8d77e8b09d
LibMedia: Refer to demuxer outputs as coded frames
...
This should be a clearer name, as "sample" is most often used to refer
to the output of a decoder.
2025-09-22 12:04:29 -05:00
Zaggy1024
7434c763d5
LibMedia: Remove default cases when converting CodecID for FFmpeg
...
This forces us to keep at least that conversion switch statement
up-to-date.
2025-09-19 13:01:00 +02:00
Zaggy1024
ae7f82591b
LibMedia: Separate file duration from track duration in Demuxer
...
Most users will only care about the total file duration, and shouldn't
be required to determine the file duration from multiple track
durations. To facilitate that, add a total_duration() function that
returns the demuxer's duration not associated to any particular track.
2025-09-12 11:23:47 +02:00
Zaggy1024
6653b747ff
LibMedia: Allow demuxers to specify a preferred track
...
...and return all tracks of a matching type from FFmpegDemuxer, rather
than only the single best one.
2025-09-12 11:23:47 +02:00
Zaggy1024
8d64e72655
LibMedia: Remove the duration field from Track::VideoData
...
Most demuxer users will only care about the whole file's duration
anyway, so this field doesn't really do us any good.
2025-09-12 11:23:47 +02:00
Zaggy1024
f9305e7e67
LibMedia: Format switch statements consistently in FFmpegVideoDecoder
2025-09-11 18:41:58 -05:00
Zaggy1024
924ba6c1f4
LibMedia: Use FFmpeg's info to tell us if YUVJ is full-range
...
It reports this correctly for the video linked in #4993 , and likely any
other videos using the YUVJ format, so we don't need this extra check.
2025-09-11 18:41:58 -05:00
Zaggy1024
cae14c763d
LibMedia: Convert FFmpeg time units to AK::Duration with integer math
...
The existing conversion was rounding to the nearest millisecond, which
is much less precision than most videos will want. Instead, use only
integer math to directly convert the presentation time to seconds and
nanoseconds for our AK::Duration to represent accurately.
2025-09-08 13:29:04 -05:00
ayeteadoe
8150fb4cbb
LibMedia: Enable EXPLICIT_SYMBOL_EXPORT
2025-08-24 12:58:27 -06:00
Olekoop
af2d46bd3d
LibMedia+Meta: Enable FFmpeg under Android and remove the stubs
...
The licensing issue seems to be resolved (#2214 ).
The stubs are not longer necessary. Even if they were, they do not
compile properly.
2025-07-10 15:44:53 -06:00
Viktor Szépe
19f88f96dc
Everywhere: Fix typos - act III
2025-06-16 14:20:48 +01:00
aplefull
c4fadc1abf
LibMedia: Add support for YUVJ pixel formats in FFmpegVideoDecoder
2025-06-16 10:26:41 +02:00
Luke Wilde
b789ba5e5f
LibMedia: Demux videos with FFmpeg
...
This gives us access to container types other than Matroska, the
biggest one being MP4.
2025-03-13 19:33:44 +01:00
Luke Wilde
3412935a62
LibMedia: Move FFmpegIOContext into it's own file
...
This allows it to be reused for video.
2025-03-13 19:33:44 +01:00
Timothy Flynn
93712b24bf
Everywhere: Hoist the Libraries folder to the top-level
2024-11-10 12:50:45 +01:00