New upstream version 26.0.0+dfsg1
This commit is contained in:
parent
8e020cdacb
commit
240080891f
837 changed files with 41275 additions and 9196 deletions
|
|
@ -5,13 +5,14 @@ if(DISABLE_VLC)
|
|||
return()
|
||||
endif()
|
||||
|
||||
find_package(LibVLC QUIET)
|
||||
|
||||
if(NOT LIBVLC_INCLUDES_FOUND AND ENABLE_VLC)
|
||||
message(FATAL_ERROR "LibVLC includes not found but set as enabled")
|
||||
elseif(NOT LIBVLC_INCLUDES_FOUND)
|
||||
message(STATUS "LibVLC includes not found, VLC video plugin disabled")
|
||||
return()
|
||||
if(ENABLE_VLC)
|
||||
find_package(LibVLC REQUIRED)
|
||||
else()
|
||||
find_package(LibVLC)
|
||||
if(NOT LibVLC_FOUND)
|
||||
message(STATUS "VLC video plugin disabled")
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include_directories(${LIBVLC_INCLUDE_DIRS})
|
||||
|
|
@ -41,8 +42,10 @@ endif()
|
|||
add_library(vlc-video MODULE
|
||||
${vlc-video_SOURCES}
|
||||
${vlc-video_HEADERS})
|
||||
# instead of linking vlc we load at runtime.
|
||||
target_link_libraries(vlc-video
|
||||
libobs
|
||||
${vlc-video_PLATFORM_DEPS})
|
||||
set_target_properties(vlc-video PROPERTIES FOLDER "plugins")
|
||||
|
||||
install_obs_plugin_with_data(vlc-video data)
|
||||
|
|
|
|||
5
plugins/vlc-video/data/locale/ba-RU.ini
Normal file
5
plugins/vlc-video/data/locale/ba-RU.ini
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
Playlist="Плейлист"
|
||||
Restart="Яңынан ебәрергә"
|
||||
Stop="Туҡтатырға"
|
||||
PlaylistNext="Артабан"
|
||||
|
||||
|
|
@ -1,15 +1,15 @@
|
|||
VLCSource="VLC‐Videoquelle"
|
||||
Playlist="Wiedergabeliste"
|
||||
LoopPlaylist="Wiedergabeliste wiederholen"
|
||||
Shuffle="Wiedergabeliste zufällig wiedergeben"
|
||||
Playlist="Playlist"
|
||||
LoopPlaylist="Playlist wiederholen"
|
||||
Shuffle="Playlist zufällig wiedergeben"
|
||||
PlaybackBehavior="Sichtbarkeitsverhalten"
|
||||
PlaybackBehavior.StopRestart="Anhalten, wenn nicht sichtbar; neustarten, wenn sichtbar"
|
||||
PlaybackBehavior.StopRestart="Beenden, wenn nicht sichtbar; neu starten, wenn sichtbar"
|
||||
PlaybackBehavior.PauseUnpause="Pausieren, wenn nicht sichtbar; fortsetzen, wenn sichtbar"
|
||||
PlaybackBehavior.AlwaysPlay="Immer abspielen, auch wenn nicht sichtbar"
|
||||
NetworkCaching="Netzwerkpuffer (ms)"
|
||||
PlayPause="Abspielen/pausieren"
|
||||
Restart="Neustarten"
|
||||
Stop="Stoppen"
|
||||
Restart="Neu starten"
|
||||
Stop="Beenden"
|
||||
PlaylistNext="Weiter"
|
||||
PlaylistPrev="Zurück"
|
||||
AudioTrack="Audiospur"
|
||||
|
|
|
|||
18
plugins/vlc-video/data/locale/en-GB.ini
Normal file
18
plugins/vlc-video/data/locale/en-GB.ini
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
VLCSource="VLC Video Source"
|
||||
Playlist="Playlist"
|
||||
LoopPlaylist="Loop Playlist"
|
||||
Shuffle="Shuffle Playlist"
|
||||
PlaybackBehavior="Visibility behaviour"
|
||||
PlaybackBehavior.StopRestart="Stop when not visible, restart when visible"
|
||||
PlaybackBehavior.PauseUnpause="Pause when not visible, unpause when visible"
|
||||
PlaybackBehavior.AlwaysPlay="Always play even when not visible"
|
||||
NetworkCaching="Network Caching (ms)"
|
||||
PlayPause="Play/Pause"
|
||||
Restart="Restart"
|
||||
Stop="Stop"
|
||||
PlaylistNext="Next"
|
||||
PlaylistPrev="Previous"
|
||||
AudioTrack="Audio Track"
|
||||
SubtitleTrack="Subtitle Track"
|
||||
SubtitleEnable="Subtitles Enabled"
|
||||
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
VLCSource="VLC Pinagmulan ng Bidyo"
|
||||
Playlist="Playlist"
|
||||
LoopPlaylist="Talaan ng siluin"
|
||||
Shuffle="I-shuffle na Playlist"
|
||||
PlaybackBehavior="Pagiging kita ng PagPag-uugali"
|
||||
PlaybackBehavior.StopRestart="Itigil kapag hindi nakikita, i-restart kapag nakikita na"
|
||||
LoopPlaylist="Ulitin ang Playlist"
|
||||
Shuffle="I-shuffle ang Playlist"
|
||||
PlaybackBehavior="Pag-uugali sa pagkakita"
|
||||
PlaybackBehavior.StopRestart="Itigil kapag hindi nakikita, ulitin kapag nakikita na"
|
||||
PlaybackBehavior.PauseUnpause="I-pause kapag hindi nakikita, i-unpause kapag nakikita na"
|
||||
PlaybackBehavior.AlwaysPlay="Palaging paganahin kahit na hindi nakikita"
|
||||
NetworkCaching="Network Kaching (ms)"
|
||||
NetworkCaching="Network Caching (ms)"
|
||||
PlayPause="Patugtugin/I-pause"
|
||||
Restart="I-restart"
|
||||
Restart="Ulitin"
|
||||
Stop="Itigil"
|
||||
PlaylistNext="Susunod"
|
||||
PlaylistPrev="Nakaraan"
|
||||
|
|
|
|||
|
|
@ -12,4 +12,7 @@ Restart="הפעל מחדש"
|
|||
Stop="עצור"
|
||||
PlaylistNext="הבא"
|
||||
PlaylistPrev="הקודם"
|
||||
AudioTrack="רצועת שנע"
|
||||
SubtitleTrack="רצועת כתובית"
|
||||
SubtitleEnable="כתוביות מופעלות"
|
||||
|
||||
|
|
|
|||
18
plugins/vlc-video/data/locale/id-ID.ini
Normal file
18
plugins/vlc-video/data/locale/id-ID.ini
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
VLCSource="Sumber Video VLC"
|
||||
Playlist="Daftar Putar"
|
||||
LoopPlaylist="Loop Daftar Putar"
|
||||
Shuffle="Acak Daftar Putar"
|
||||
PlaybackBehavior="Perilaku Visibilitas"
|
||||
PlaybackBehavior.StopRestart="Berhenti jika tidak terlihat, ulangi saat terlihat"
|
||||
PlaybackBehavior.PauseUnpause="Jeda jika tidak terlihat, lanjutkan saat terlihat"
|
||||
PlaybackBehavior.AlwaysPlay="Putar terus meskipun tidak terlihat"
|
||||
NetworkCaching="Cache Jaringan (ms)"
|
||||
PlayPause="Putar/Jeda"
|
||||
Restart="Ulangi"
|
||||
Stop="Stop"
|
||||
PlaylistNext="Selanjutnya"
|
||||
PlaylistPrev="Sebelumnya"
|
||||
AudioTrack="Trek Audio"
|
||||
SubtitleTrack="Trek Subtitel"
|
||||
SubtitleEnable="Aktifkan Subtitel"
|
||||
|
||||
4
plugins/vlc-video/data/locale/lt-LT.ini
Normal file
4
plugins/vlc-video/data/locale/lt-LT.ini
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
PlayPause="Paleisti/Pauzė"
|
||||
Restart="Perkrauti"
|
||||
Stop="Sustabdyti"
|
||||
|
||||
|
|
@ -3,13 +3,16 @@ Playlist="Listă de redare"
|
|||
LoopPlaylist="Repetă lista de redare"
|
||||
Shuffle="Amestecă lista de redare"
|
||||
PlaybackBehavior="Comportamentul vizibilității"
|
||||
PlaybackBehavior.StopRestart="Oprește cand nu este vizibil, repornește cand este vizibil"
|
||||
PlaybackBehavior.PauseUnpause="Pauză cand nu este vizibil, continuă cand este vizibil"
|
||||
PlaybackBehavior.AlwaysPlay="Redă întotdeauna chiar si când nu este vizibil"
|
||||
PlaybackBehavior.StopRestart="Oprește când sursa nu este vizibilă, repornește când este vizibilă"
|
||||
PlaybackBehavior.PauseUnpause="Pune pe pauză când sursa nu este vizibilă, scoate de pe pauză când este vizibilă"
|
||||
PlaybackBehavior.AlwaysPlay="Redă întotdeauna chiar și atunci când sursa nu este vizibilă"
|
||||
NetworkCaching="Caching de rețea (ms)"
|
||||
PlayPause="Redă/Pauză"
|
||||
PlayPause="Redă/Pune pe pauză"
|
||||
Restart="Repornește"
|
||||
Stop="Oprește"
|
||||
PlaylistNext="Următorul"
|
||||
PlaylistPrev="Anteriorul"
|
||||
AudioTrack="Pistă audio"
|
||||
SubtitleTrack="Pistă subtitrare"
|
||||
SubtitleEnable="Subtitrări activate"
|
||||
|
||||
|
|
|
|||
|
|
@ -14,5 +14,5 @@ PlaylistNext="Следующий"
|
|||
PlaylistPrev="Предыдущий"
|
||||
AudioTrack="Звуковая дорожка"
|
||||
SubtitleTrack="Дорожка субтитров"
|
||||
SubtitleEnable="Субтитры включены"
|
||||
SubtitleEnable="Включить субтитры"
|
||||
|
||||
|
|
|
|||
10
plugins/vlc-video/data/locale/ta-IN.ini
Normal file
10
plugins/vlc-video/data/locale/ta-IN.ini
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
VLCSource="VLC காணொளி மூலம்"
|
||||
Playlist="இசைப்பட்டியல்"
|
||||
PlayPause="இயக்கு/இடைநிறுத்து"
|
||||
Stop="நிறுத்து"
|
||||
PlaylistNext="அடுத்தது"
|
||||
PlaylistPrev="முந்தையது"
|
||||
AudioTrack="ஒலி தடம்"
|
||||
SubtitleTrack="வசனவரிகள் தடம்"
|
||||
SubtitleEnable="வசனவரிகள் இயக்கு"
|
||||
|
||||
|
|
@ -1,18 +1,18 @@
|
|||
VLCSource="VLC-відео"
|
||||
VLCSource="Джерело відео VLC"
|
||||
Playlist="Список відтворення"
|
||||
LoopPlaylist="Повтор списку відтворення"
|
||||
Shuffle="Перемішати список відтворення"
|
||||
PlaybackBehavior="Видимість та відтворення"
|
||||
PlaybackBehavior.StopRestart="Зупинити, коли не видимий. Грати з початку, коли видимий"
|
||||
PlaybackBehavior.PauseUnpause="Призупинити, коли не видимий. Грати далі, коли видимий"
|
||||
PlaybackBehavior.AlwaysPlay="Завжди грати навіть тоді, коли не видимий"
|
||||
NetworkCaching="Кешування мережевого контенту (мс)"
|
||||
PlayPause="Відтворення / Пауза"
|
||||
Restart="Грати з початку"
|
||||
LoopPlaylist="Повторювати список відтворення"
|
||||
Shuffle="Відтворювати у довільному порядку"
|
||||
PlaybackBehavior="Поведінка відображення"
|
||||
PlaybackBehavior.StopRestart="Зупиняти, коли приховано; перезапускати, коли видно"
|
||||
PlaybackBehavior.PauseUnpause="Ставити на паузу, коли приховано; відновлювати, коли видно"
|
||||
PlaybackBehavior.AlwaysPlay="Завжди відтворювати, навіть коли приховано"
|
||||
NetworkCaching="Мережеве кешування (мс)"
|
||||
PlayPause="Відтворити/пауза"
|
||||
Restart="Перезапуск"
|
||||
Stop="Зупинити"
|
||||
PlaylistNext="Наступний"
|
||||
PlaylistPrev="Попередній"
|
||||
AudioTrack="Аудіо доріжка"
|
||||
AudioTrack="Звукова доріжка"
|
||||
SubtitleTrack="Доріжка субтитрів"
|
||||
SubtitleEnable="Увімкнути субтитри"
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ LIBVLC_MEDIA_NEW_LOCATION libvlc_media_new_location_;
|
|||
LIBVLC_MEDIA_ADD_OPTION libvlc_media_add_option_;
|
||||
LIBVLC_MEDIA_RELEASE libvlc_media_release_;
|
||||
LIBVLC_MEDIA_RELEASE libvlc_media_retain_;
|
||||
LIBVLC_MEDIA_GET_META libvlc_media_get_meta_;
|
||||
|
||||
/* libvlc media player */
|
||||
LIBVLC_MEDIA_PLAYER_NEW libvlc_media_player_new_;
|
||||
|
|
@ -41,6 +42,7 @@ LIBVLC_VIDEO_GET_SIZE libvlc_video_get_size_;
|
|||
LIBVLC_MEDIA_PLAYER_EVENT_MANAGER libvlc_media_player_event_manager_;
|
||||
LIBVLC_MEDIA_PLAYER_GET_STATE libvlc_media_player_get_state_;
|
||||
LIBVLC_MEDIA_PLAYER_GET_LENGTH libvlc_media_player_get_length_;
|
||||
LIBVLC_MEDIA_PLAYER_GET_MEDIA libvlc_media_player_get_media_;
|
||||
|
||||
/* libvlc media list */
|
||||
LIBVLC_MEDIA_LIST_NEW libvlc_media_list_new_;
|
||||
|
|
@ -99,6 +101,7 @@ static bool load_vlc_funcs(void)
|
|||
LOAD_VLC_FUNC(libvlc_media_add_option);
|
||||
LOAD_VLC_FUNC(libvlc_media_release);
|
||||
LOAD_VLC_FUNC(libvlc_media_retain);
|
||||
LOAD_VLC_FUNC(libvlc_media_get_meta);
|
||||
|
||||
/* libvlc media player */
|
||||
LOAD_VLC_FUNC(libvlc_media_player_new);
|
||||
|
|
@ -116,6 +119,7 @@ static bool load_vlc_funcs(void)
|
|||
LOAD_VLC_FUNC(libvlc_media_player_event_manager);
|
||||
LOAD_VLC_FUNC(libvlc_media_player_get_state);
|
||||
LOAD_VLC_FUNC(libvlc_media_player_get_length);
|
||||
LOAD_VLC_FUNC(libvlc_media_player_get_media);
|
||||
|
||||
/* libvlc media list */
|
||||
LOAD_VLC_FUNC(libvlc_media_list_new);
|
||||
|
|
|
|||
|
|
@ -35,6 +35,8 @@ typedef void (*LIBVLC_MEDIA_ADD_OPTION)(libvlc_media_t *p_md,
|
|||
const char *options);
|
||||
typedef void (*LIBVLC_MEDIA_RETAIN)(libvlc_media_t *p_md);
|
||||
typedef void (*LIBVLC_MEDIA_RELEASE)(libvlc_media_t *p_md);
|
||||
typedef char *(*LIBVLC_MEDIA_GET_META)(libvlc_media_t *p_md,
|
||||
libvlc_meta_t e_meta);
|
||||
|
||||
/* libvlc media player */
|
||||
typedef libvlc_media_player_t *(*LIBVLC_MEDIA_PLAYER_NEW)(
|
||||
|
|
@ -71,6 +73,8 @@ typedef libvlc_state_t (*LIBVLC_MEDIA_PLAYER_GET_STATE)(
|
|||
libvlc_media_player_t *p_mi);
|
||||
typedef libvlc_time_t (*LIBVLC_MEDIA_PLAYER_GET_LENGTH)(
|
||||
libvlc_media_player_t *p_mi);
|
||||
typedef libvlc_media_t *(*LIBVLC_MEDIA_PLAYER_GET_MEDIA)(
|
||||
libvlc_media_player_t *p_mi);
|
||||
|
||||
/* libvlc media list */
|
||||
typedef libvlc_media_list_t *(*LIBVLC_MEDIA_LIST_NEW)(
|
||||
|
|
@ -118,6 +122,7 @@ extern LIBVLC_MEDIA_NEW_LOCATION libvlc_media_new_location_;
|
|||
extern LIBVLC_MEDIA_ADD_OPTION libvlc_media_add_option_;
|
||||
extern LIBVLC_MEDIA_RELEASE libvlc_media_release_;
|
||||
extern LIBVLC_MEDIA_RETAIN libvlc_media_retain_;
|
||||
extern LIBVLC_MEDIA_GET_META libvlc_media_get_meta_;
|
||||
|
||||
/* libvlc media player */
|
||||
extern LIBVLC_MEDIA_PLAYER_NEW libvlc_media_player_new_;
|
||||
|
|
@ -135,6 +140,7 @@ extern LIBVLC_VIDEO_GET_SIZE libvlc_video_get_size_;
|
|||
extern LIBVLC_MEDIA_PLAYER_EVENT_MANAGER libvlc_media_player_event_manager_;
|
||||
extern LIBVLC_MEDIA_PLAYER_GET_STATE libvlc_media_player_get_state_;
|
||||
extern LIBVLC_MEDIA_PLAYER_GET_LENGTH libvlc_media_player_get_length_;
|
||||
extern LIBVLC_MEDIA_PLAYER_GET_MEDIA libvlc_media_player_get_media_;
|
||||
|
||||
/* libvlc media list */
|
||||
extern LIBVLC_MEDIA_LIST_NEW libvlc_media_list_new_;
|
||||
|
|
|
|||
|
|
@ -115,6 +115,10 @@ static void free_files(struct darray *array)
|
|||
da_free(files);
|
||||
}
|
||||
|
||||
#define MAKEFORMAT(ch0, ch1, ch2, ch3) \
|
||||
((uint32_t)(uint8_t)(ch0) | ((uint32_t)(uint8_t)(ch1) << 8) | \
|
||||
((uint32_t)(uint8_t)(ch2) << 16) | ((uint32_t)(uint8_t)(ch3) << 24))
|
||||
|
||||
static inline bool chroma_is(const char *chroma, const char *val)
|
||||
{
|
||||
return *(uint32_t *)chroma == *(uint32_t *)val;
|
||||
|
|
@ -127,12 +131,12 @@ static enum video_format convert_vlc_video_format(char *chroma, bool *full)
|
|||
#define CHROMA_TEST(val, ret) \
|
||||
if (chroma_is(chroma, val)) \
|
||||
return ret
|
||||
#define CHROMA_CONV(val, new_val, ret) \
|
||||
do { \
|
||||
if (chroma_is(chroma, val)) { \
|
||||
*(uint32_t *)chroma = *(uint32_t *)new_val; \
|
||||
return ret; \
|
||||
} \
|
||||
#define CHROMA_CONV(val, new_val, ret) \
|
||||
do { \
|
||||
if (chroma_is(chroma, val)) { \
|
||||
*(uint32_t *)chroma = (uint32_t)new_val; \
|
||||
return ret; \
|
||||
} \
|
||||
} while (false)
|
||||
#define CHROMA_CONV_FULL(val, new_val, ret) \
|
||||
do { \
|
||||
|
|
@ -147,13 +151,14 @@ static enum video_format convert_vlc_video_format(char *chroma, bool *full)
|
|||
CHROMA_TEST("NV12", VIDEO_FORMAT_NV12);
|
||||
CHROMA_TEST("I420", VIDEO_FORMAT_I420);
|
||||
CHROMA_TEST("IYUV", VIDEO_FORMAT_I420);
|
||||
CHROMA_CONV("NV21", "NV12", VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("I422", "NV12", VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("Y42B", "NV12", VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("YV12", "NV12", VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("yv12", "NV12", VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("NV21", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("I422", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("Y42B", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("YV12", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_NV12);
|
||||
CHROMA_CONV("yv12", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_NV12);
|
||||
|
||||
CHROMA_CONV_FULL("J420", "J420", VIDEO_FORMAT_I420);
|
||||
CHROMA_CONV_FULL("J420", MAKEFORMAT('J', '4', '2', '0'),
|
||||
VIDEO_FORMAT_I420);
|
||||
|
||||
/* 4:2:2 formats */
|
||||
CHROMA_TEST("UYVY", VIDEO_FORMAT_UYVY);
|
||||
|
|
@ -174,33 +179,34 @@ static enum video_format convert_vlc_video_format(char *chroma, bool *full)
|
|||
|
||||
CHROMA_TEST("YVYU", VIDEO_FORMAT_YVYU);
|
||||
|
||||
CHROMA_CONV("v210", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("cyuv", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("CYUV", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("VYUY", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("NV16", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("NV61", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("I410", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("I422", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("Y42B", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("J422", "UYVY", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("v210", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("cyuv", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("CYUV", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("VYUY", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("NV16", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("NV61", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("I410", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("I422", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("Y42B", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("J422", MAKEFORMAT('U', 'Y', 'V', 'Y'), VIDEO_FORMAT_UYVY);
|
||||
|
||||
/* 4:4:4 formats */
|
||||
CHROMA_TEST("I444", VIDEO_FORMAT_I444);
|
||||
CHROMA_CONV_FULL("J444", "RGBA", VIDEO_FORMAT_RGBA);
|
||||
CHROMA_CONV("YUVA", "RGBA", VIDEO_FORMAT_RGBA);
|
||||
CHROMA_CONV_FULL("J444", MAKEFORMAT('R', 'G', 'B', 'A'),
|
||||
VIDEO_FORMAT_RGBA);
|
||||
CHROMA_CONV("YUVA", MAKEFORMAT('R', 'G', 'B', 'A'), VIDEO_FORMAT_RGBA);
|
||||
|
||||
/* 4:4:0 formats */
|
||||
CHROMA_CONV("I440", "I444", VIDEO_FORMAT_I444);
|
||||
CHROMA_CONV("J440", "I444", VIDEO_FORMAT_I444);
|
||||
CHROMA_CONV("I440", MAKEFORMAT('I', '4', '4', '4'), VIDEO_FORMAT_I444);
|
||||
CHROMA_CONV("J440", MAKEFORMAT('I', '4', '4', '4'), VIDEO_FORMAT_I444);
|
||||
|
||||
/* 4:1:0 formats */
|
||||
CHROMA_CONV("YVU9", "NV12", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("I410", "NV12", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("YVU9", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("I410", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_UYVY);
|
||||
|
||||
/* 4:1:1 formats */
|
||||
CHROMA_CONV("I411", "NV12", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("Y41B", "NV12", VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("I411", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_UYVY);
|
||||
CHROMA_CONV("Y41B", MAKEFORMAT('N', 'V', '1', '2'), VIDEO_FORMAT_UYVY);
|
||||
|
||||
/* greyscale formats */
|
||||
CHROMA_TEST("GREY", VIDEO_FORMAT_Y800);
|
||||
|
|
@ -210,7 +216,7 @@ static enum video_format convert_vlc_video_format(char *chroma, bool *full)
|
|||
#undef CHROMA_CONV
|
||||
#undef CHROMA_TEST
|
||||
|
||||
*(uint32_t *)chroma = *(uint32_t *)"BGRA";
|
||||
*(uint32_t *)chroma = (uint32_t)MAKEFORMAT('B', 'G', 'R', 'A');
|
||||
return VIDEO_FORMAT_BGRA;
|
||||
}
|
||||
|
||||
|
|
@ -243,39 +249,94 @@ static enum audio_format convert_vlc_audio_format(char *format)
|
|||
#define AUDIO_TEST(val, ret) \
|
||||
if (chroma_is(format, val)) \
|
||||
return ret
|
||||
#define AUDIO_CONV(val, new_val, ret) \
|
||||
do { \
|
||||
if (chroma_is(format, val)) { \
|
||||
*(uint32_t *)format = *(uint32_t *)new_val; \
|
||||
return ret; \
|
||||
} \
|
||||
#define AUDIO_CONV(val, new_val, ret) \
|
||||
do { \
|
||||
if (chroma_is(format, val)) { \
|
||||
*(uint32_t *)format = (uint32_t)new_val; \
|
||||
return ret; \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
AUDIO_TEST("S16N", AUDIO_FORMAT_16BIT);
|
||||
AUDIO_TEST("S32N", AUDIO_FORMAT_32BIT);
|
||||
AUDIO_TEST("FL32", AUDIO_FORMAT_FLOAT);
|
||||
|
||||
AUDIO_CONV("U16N", "S16N", AUDIO_FORMAT_16BIT);
|
||||
AUDIO_CONV("U32N", "S32N", AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("S24N", "S32N", AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("U24N", "S32N", AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("FL64", "FL32", AUDIO_FORMAT_FLOAT);
|
||||
AUDIO_CONV("U16N", MAKEFORMAT('S', '1', '6', 'N'), AUDIO_FORMAT_16BIT);
|
||||
AUDIO_CONV("U32N", MAKEFORMAT('S', '3', '2', 'N'), AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("S24N", MAKEFORMAT('S', '3', '2', 'N'), AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("U24N", MAKEFORMAT('S', '3', '2', 'N'), AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("FL64", MAKEFORMAT('F', 'L', '3', '2'), AUDIO_FORMAT_FLOAT);
|
||||
|
||||
AUDIO_CONV("S16I", "S16N", AUDIO_FORMAT_16BIT);
|
||||
AUDIO_CONV("U16I", "S16N", AUDIO_FORMAT_16BIT);
|
||||
AUDIO_CONV("S24I", "S32N", AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("U24I", "S32N", AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("S32I", "S32N", AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("U32I", "S32N", AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("S16I", MAKEFORMAT('S', '1', '6', 'N'), AUDIO_FORMAT_16BIT);
|
||||
AUDIO_CONV("U16I", MAKEFORMAT('S', '1', '6', 'N'), AUDIO_FORMAT_16BIT);
|
||||
AUDIO_CONV("S24I", MAKEFORMAT('S', '3', '2', 'N'), AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("U24I", MAKEFORMAT('S', '3', '2', 'N'), AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("S32I", MAKEFORMAT('S', '3', '2', 'N'), AUDIO_FORMAT_32BIT);
|
||||
AUDIO_CONV("U32I", MAKEFORMAT('S', '3', '2', 'N'), AUDIO_FORMAT_32BIT);
|
||||
#undef AUDIO_CONV
|
||||
#undef AUDIO_TEST
|
||||
|
||||
*(uint32_t *)format = *(uint32_t *)"FL32";
|
||||
*(uint32_t *)format = (uint32_t)MAKEFORMAT('F', 'L', '3', '2');
|
||||
return AUDIO_FORMAT_FLOAT;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static void vlcs_get_metadata(void *data, calldata_t *cd)
|
||||
{
|
||||
struct vlc_source *vlcs = data;
|
||||
const char *data_id = calldata_string(cd, "tag_id");
|
||||
|
||||
if (!vlcs || !data_id)
|
||||
return;
|
||||
libvlc_media_t *media =
|
||||
libvlc_media_player_get_media_(vlcs->media_player);
|
||||
|
||||
if (!media)
|
||||
return;
|
||||
|
||||
#define VLC_META(media, cd, did, tid, tag) \
|
||||
else if (strcmp(did, tid) == 0) \
|
||||
{ \
|
||||
calldata_set_string(cd, "tag_data", \
|
||||
libvlc_media_get_meta_(media, tag)); \
|
||||
}
|
||||
|
||||
if (strcmp(data_id, "title") == 0)
|
||||
calldata_set_string(cd, "tag_data",
|
||||
libvlc_media_get_meta_(media,
|
||||
libvlc_meta_Title));
|
||||
|
||||
VLC_META(media, cd, data_id, "artist", libvlc_meta_Artist)
|
||||
VLC_META(media, cd, data_id, "genre", libvlc_meta_Genre)
|
||||
VLC_META(media, cd, data_id, "copyright", libvlc_meta_Copyright)
|
||||
VLC_META(media, cd, data_id, "album", libvlc_meta_Album)
|
||||
VLC_META(media, cd, data_id, "track_number", libvlc_meta_TrackNumber)
|
||||
VLC_META(media, cd, data_id, "description", libvlc_meta_Description)
|
||||
VLC_META(media, cd, data_id, "rating", libvlc_meta_Rating)
|
||||
VLC_META(media, cd, data_id, "date", libvlc_meta_Date)
|
||||
VLC_META(media, cd, data_id, "setting", libvlc_meta_Setting)
|
||||
VLC_META(media, cd, data_id, "url", libvlc_meta_URL)
|
||||
VLC_META(media, cd, data_id, "language", libvlc_meta_Language)
|
||||
VLC_META(media, cd, data_id, "now_playing", libvlc_meta_NowPlaying)
|
||||
VLC_META(media, cd, data_id, "publisher", libvlc_meta_Publisher)
|
||||
VLC_META(media, cd, data_id, "encoded_by", libvlc_meta_EncodedBy)
|
||||
VLC_META(media, cd, data_id, "artwork_url", libvlc_meta_ArtworkURL)
|
||||
VLC_META(media, cd, data_id, "track_id", libvlc_meta_TrackID)
|
||||
VLC_META(media, cd, data_id, "track_total", libvlc_meta_TrackTotal)
|
||||
VLC_META(media, cd, data_id, "director", libvlc_meta_Director)
|
||||
VLC_META(media, cd, data_id, "season", libvlc_meta_Season)
|
||||
VLC_META(media, cd, data_id, "episode", libvlc_meta_Episode)
|
||||
VLC_META(media, cd, data_id, "show_name", libvlc_meta_ShowName)
|
||||
VLC_META(media, cd, data_id, "actors", libvlc_meta_Actors)
|
||||
VLC_META(media, cd, data_id, "album_artist", libvlc_meta_AlbumArtist)
|
||||
VLC_META(media, cd, data_id, "disc_number", libvlc_meta_DiscNumber)
|
||||
VLC_META(media, cd, data_id, "disc_total", libvlc_meta_DiscTotal)
|
||||
#undef VLC_META
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------- */
|
||||
|
||||
static const char *vlcs_get_name(void *unused)
|
||||
{
|
||||
UNUSED_PARAMETER(unused);
|
||||
|
|
@ -779,7 +840,7 @@ static void vlcs_play_pause_hotkey(void *data, obs_hotkey_id id,
|
|||
|
||||
enum obs_media_state state = obs_source_media_get_state(c->source);
|
||||
|
||||
if (pressed && obs_source_active(c->source)) {
|
||||
if (pressed && obs_source_showing(c->source)) {
|
||||
if (state == OBS_MEDIA_STATE_PLAYING)
|
||||
obs_source_media_play_pause(c->source, true);
|
||||
else if (state == OBS_MEDIA_STATE_PAUSED)
|
||||
|
|
@ -795,7 +856,7 @@ static void vlcs_restart_hotkey(void *data, obs_hotkey_id id,
|
|||
|
||||
struct vlc_source *c = data;
|
||||
|
||||
if (pressed && obs_source_active(c->source))
|
||||
if (pressed && obs_source_showing(c->source))
|
||||
obs_source_media_restart(c->source);
|
||||
}
|
||||
|
||||
|
|
@ -807,7 +868,7 @@ static void vlcs_stop_hotkey(void *data, obs_hotkey_id id, obs_hotkey_t *hotkey,
|
|||
|
||||
struct vlc_source *c = data;
|
||||
|
||||
if (pressed && obs_source_active(c->source))
|
||||
if (pressed && obs_source_showing(c->source))
|
||||
obs_source_media_stop(c->source);
|
||||
}
|
||||
|
||||
|
|
@ -819,7 +880,7 @@ static void vlcs_playlist_next_hotkey(void *data, obs_hotkey_id id,
|
|||
|
||||
struct vlc_source *c = data;
|
||||
|
||||
if (pressed && obs_source_active(c->source))
|
||||
if (pressed && obs_source_showing(c->source))
|
||||
obs_source_media_next(c->source);
|
||||
}
|
||||
|
||||
|
|
@ -831,7 +892,7 @@ static void vlcs_playlist_prev_hotkey(void *data, obs_hotkey_id id,
|
|||
|
||||
struct vlc_source *c = data;
|
||||
|
||||
if (pressed && obs_source_active(c->source))
|
||||
if (pressed && obs_source_showing(c->source))
|
||||
obs_source_media_previous(c->source);
|
||||
}
|
||||
|
||||
|
|
@ -895,6 +956,11 @@ static void *vlcs_create(obs_data_t *settings, obs_source_t *source)
|
|||
libvlc_event_attach_(event_manager, libvlc_MediaPlayerOpening,
|
||||
vlcs_started, c);
|
||||
|
||||
proc_handler_t *ph = obs_source_get_proc_handler(source);
|
||||
proc_handler_add(
|
||||
ph, "void get_metadata(in string tag_id out string tag_data)",
|
||||
vlcs_get_metadata, c);
|
||||
|
||||
obs_source_update(source, NULL);
|
||||
|
||||
UNUSED_PARAMETER(settings);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue