mirror of
https://github.com/RetroDECK/ES-DE.git
synced 2025-02-18 04:45:39 +00:00
Updated VLC video playing to use modern asynchronous media parsing
This commit is contained in:
parent
fcfbbd3f2b
commit
6303aa5664
|
@ -7,6 +7,7 @@
|
||||||
#include "Settings.h"
|
#include "Settings.h"
|
||||||
#include <vlc/vlc.h>
|
#include <vlc/vlc.h>
|
||||||
#include <SDL_mutex.h>
|
#include <SDL_mutex.h>
|
||||||
|
#include <SDL_timer.h>
|
||||||
|
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
#include <codecvt>
|
#include <codecvt>
|
||||||
|
@ -254,8 +255,24 @@ void VideoVlcComponent::startVideo()
|
||||||
if (mMedia)
|
if (mMedia)
|
||||||
{
|
{
|
||||||
unsigned track_count;
|
unsigned track_count;
|
||||||
// Get the media metadata so we can find the aspect ratio
|
int parseResult;
|
||||||
libvlc_media_parse(mMedia);
|
libvlc_event_t vlcEvent;
|
||||||
|
|
||||||
|
// Asynchronous media parsing
|
||||||
|
libvlc_event_attach(libvlc_media_event_manager(mMedia), libvlc_MediaParsedChanged, VlcMediaParseCallback, 0);
|
||||||
|
parseResult = libvlc_media_parse_with_options(mMedia, libvlc_media_parse_local, -1);
|
||||||
|
|
||||||
|
if (!parseResult)
|
||||||
|
{
|
||||||
|
// Wait for a maximum of 1 second for the media parsing
|
||||||
|
for(int i=0; i<200; i++)
|
||||||
|
{
|
||||||
|
if ((libvlc_media_get_parsed_status(mMedia)))
|
||||||
|
break;
|
||||||
|
SDL_Delay(5);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
libvlc_media_track_t** tracks;
|
libvlc_media_track_t** tracks;
|
||||||
track_count = libvlc_media_tracks_get(mMedia, &tracks);
|
track_count = libvlc_media_tracks_get(mMedia, &tracks);
|
||||||
for (unsigned track = 0; track < track_count; ++track)
|
for (unsigned track = 0; track < track_count; ++track)
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#define ES_CORE_COMPONENTS_VIDEO_VLC_COMPONENT_H
|
#define ES_CORE_COMPONENTS_VIDEO_VLC_COMPONENT_H
|
||||||
|
|
||||||
#include "VideoComponent.h"
|
#include "VideoComponent.h"
|
||||||
|
#include <vlc/vlc.h>
|
||||||
|
|
||||||
struct SDL_mutex;
|
struct SDL_mutex;
|
||||||
struct SDL_Surface;
|
struct SDL_Surface;
|
||||||
|
@ -61,6 +62,8 @@ private:
|
||||||
void setupContext();
|
void setupContext();
|
||||||
void freeContext();
|
void freeContext();
|
||||||
|
|
||||||
|
static void VlcMediaParseCallback(const libvlc_event_t *event, void *user_data) {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static libvlc_instance_t* mVLC;
|
static libvlc_instance_t* mVLC;
|
||||||
libvlc_media_t* mMedia;
|
libvlc_media_t* mMedia;
|
||||||
|
|
Loading…
Reference in a new issue