mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-29 19:10:26 +00:00
VideoPlayer: Create application to parse (and eventually play) videos
This application will eventually be able to actually play videos, but for now it is used to parse and dump decoded data from the VP9 decoder.
This commit is contained in:
parent
baff94e44d
commit
fa101d6bf6
Notes:
sideshowbarker
2024-07-18 12:20:22 +09:00
Author: https://github.com/FalseHonesty Commit: https://github.com/SerenityOS/serenity/commit/fa101d6bf6d Pull-request: https://github.com/SerenityOS/serenity/pull/7848 Reviewed-by: https://github.com/Cleverking2003 Reviewed-by: https://github.com/alimpfard
3 changed files with 60 additions and 0 deletions
|
@ -28,4 +28,5 @@ add_subdirectory(SystemMonitor)
|
|||
add_subdirectory(ThemeEditor)
|
||||
add_subdirectory(Terminal)
|
||||
add_subdirectory(TextEditor)
|
||||
add_subdirectory(VideoPlayer)
|
||||
add_subdirectory(Welcome)
|
||||
|
|
6
Userland/Applications/VideoPlayer/CMakeLists.txt
Normal file
6
Userland/Applications/VideoPlayer/CMakeLists.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
set(SOURCES
|
||||
main.cpp
|
||||
)
|
||||
|
||||
serenity_bin(VideoPlayer)
|
||||
target_link_libraries(VideoPlayer LibVideo LibAudio LibGUI)
|
53
Userland/Applications/VideoPlayer/main.cpp
Normal file
53
Userland/Applications/VideoPlayer/main.cpp
Normal file
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Hunter Salyer <thefalsehonesty@gmail.com>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#include <LibAudio/ClientConnection.h>
|
||||
#include <LibCore/EventLoop.h>
|
||||
#include <LibGUI/Application.h>
|
||||
#include <LibGUI/BoxLayout.h>
|
||||
#include <LibGUI/ImageWidget.h>
|
||||
#include <LibGUI/Window.h>
|
||||
#include <LibGfx/Bitmap.h>
|
||||
#include <LibVideo/MatroskaReader.h>
|
||||
#include <LibVideo/VP9/Decoder.h>
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
auto app = GUI::Application::construct(argc, argv);
|
||||
auto window = GUI::Window::construct();
|
||||
|
||||
auto document = Video::MatroskaReader::parse_matroska_from_file("/home/anon/Videos/test-webm.webm");
|
||||
const auto& optional_track = document->track_for_track_type(Video::TrackEntry::TrackType::Video);
|
||||
if (!optional_track.has_value())
|
||||
return 1;
|
||||
const auto& track = optional_track.value();
|
||||
const auto video_track = track.video_track().value();
|
||||
|
||||
auto image = Gfx::Bitmap::create(Gfx::BitmapFormat::BGRx8888, Gfx::IntSize(video_track.pixel_height, video_track.pixel_width));
|
||||
auto& main_widget = window->set_main_widget<GUI::Widget>();
|
||||
main_widget.set_fill_with_background_color(true);
|
||||
main_widget.set_layout<GUI::VerticalBoxLayout>();
|
||||
auto& image_widget = main_widget.add<GUI::ImageWidget>();
|
||||
image_widget.set_bitmap(image);
|
||||
image_widget.set_fixed_size(video_track.pixel_height, video_track.pixel_width);
|
||||
main_widget.add_child(image_widget);
|
||||
|
||||
Video::VP9::Decoder vp9_decoder;
|
||||
for (const auto& cluster : document->clusters()) {
|
||||
for (const auto& block : cluster.blocks()) {
|
||||
if (block.track_number() != track.track_number())
|
||||
continue;
|
||||
|
||||
const auto& frame = block.frame(0);
|
||||
dbgln("Reading frame 0 from block @ {}", block.timestamp());
|
||||
vp9_decoder.parse_frame(frame);
|
||||
vp9_decoder.dump_info();
|
||||
}
|
||||
}
|
||||
|
||||
window->show();
|
||||
return app->exec();
|
||||
}
|
Loading…
Reference in a new issue