Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
403 results
Show changes
Commits on Source (9)
......@@ -2,20 +2,21 @@ nvdecdir = $(pluginsdir)/nvdec
nvdec_LTLIBRARIES =
libnvdec_plugin_la_SOURCES = \
hw/nvdec/nvdec.c hw/nvdec/nvdec_fmt.h \
hw/nvdec/nvdec.c hw/nvdec/nvdec_fmt.h hw/nvdec/nvdec_priv.h \
hw/nvdec/hw_pool.c hw/nvdec/hw_pool.h
libnvdec_plugin_la_LIBADD = $(LIBDL) libvlc_hxxxhelper.la
if HAVE_NVDEC
nvdec_LTLIBRARIES += libnvdec_plugin.la
endif
libnvdec_chroma_plugin_la_SOURCES = hw/nvdec/chroma.c hw/nvdec/nvdec_fmt.h
libnvdec_chroma_plugin_la_SOURCES = hw/nvdec/chroma.c \
hw/nvdec/nvdec_fmt.h hw/nvdec/nvdec_priv.h
if HAVE_NVDEC
nvdec_LTLIBRARIES += libnvdec_chroma_plugin.la
endif
libglinterop_nvdec_plugin_la_SOURCES = hw/nvdec/nvdec_gl.c \
video_output/opengl/interop.h hw/nvdec/nvdec_fmt.h
video_output/opengl/interop.h hw/nvdec/nvdec_fmt.h hw/nvdec/nvdec_priv.h
libglinterop_nvdec_plugin_la_LIBADD = $(LIBDL)
if HAVE_GL
if HAVE_NVDEC
......
......@@ -30,6 +30,7 @@
#include <vlc_codec.h>
#include "nvdec_fmt.h"
#include "nvdec_priv.h"
static int OpenCUDAToCPU( filter_t * );
......@@ -124,17 +125,11 @@ static int OpenCUDAToCPU( filter_t *p_filter )
if ( p_filter->vctx_in == NULL ||
vlc_video_context_GetType(p_filter->vctx_in) != VLC_VIDEO_CONTEXT_NVDEC )
return VLC_EGENERIC;
if ( !( ( p_filter->fmt_in.video.i_chroma == VLC_CODEC_NVDEC_OPAQUE &&
p_filter->fmt_out.video.i_chroma == VLC_CODEC_NV12 ) ||
( p_filter->fmt_in.video.i_chroma == VLC_CODEC_NVDEC_OPAQUE_10B &&
p_filter->fmt_out.video.i_chroma == VLC_CODEC_P010 ) ||
( p_filter->fmt_in.video.i_chroma == VLC_CODEC_NVDEC_OPAQUE_16B &&
p_filter->fmt_out.video.i_chroma == VLC_CODEC_P016 ) ||
( p_filter->fmt_in.video.i_chroma == VLC_CODEC_NVDEC_OPAQUE_444 &&
(p_filter->fmt_out.video.i_chroma == VLC_CODEC_I444 || p_filter->fmt_out.video.i_chroma == VLC_CODEC_YUVA) ) ||
( p_filter->fmt_in.video.i_chroma == VLC_CODEC_NVDEC_OPAQUE_444_16B &&
p_filter->fmt_out.video.i_chroma == VLC_CODEC_I444_16L )
) )
assert(is_nvdec_opaque(p_filter->fmt_in.video.i_chroma));
vlc_fourcc_t outfcc = NVDECToVlcChroma(p_filter->fmt_in.video.i_chroma);
if (p_filter->fmt_out.video.i_chroma != outfcc &&
!(p_filter->fmt_in.video.i_chroma == VLC_CODEC_NVDEC_OPAQUE_444 &&
p_filter->fmt_out.video.i_chroma == VLC_CODEC_YUVA))
return VLC_EGENERIC;
p_filter->ops = &filter_ops;
......
......@@ -32,6 +32,7 @@
#include "../../codec/hxxx_helper.h"
#include "nvdec_fmt.h"
#include "nvdec_priv.h"
#include "hw_pool.h"
#ifndef CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT
......
/*****************************************************************************
* nvdec_fmt.h : NVDEC common code
* nvdec_fmt.h : NVDEC common shared code
*****************************************************************************
* Copyright © 2019 VLC authors, VideoLAN and VideoLabs
* Copyright © 2019-2023 VLC authors, VideoLAN and VideoLabs
*
* Authors: Steve Lhomme <robux4@videolabs.io>
*
......@@ -23,56 +23,38 @@
#ifndef VLC_VIDEOCHROMA_NVDEC_FMT_H_
#define VLC_VIDEOCHROMA_NVDEC_FMT_H_
#define FFNV_LOG_FUNC(logctx, msg, ...) msg_Err((vlc_object_t*)logctx, msg, __VA_ARGS__)
#define FFNV_DEBUG_LOG_FUNC(logctx, msg, ...) msg_Dbg((vlc_object_t*)logctx, msg, __VA_ARGS__)
#include <vlc_fourcc.h>
#include <ffnvcodec/dynlink_loader.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
CudaFunctions *cudaFunctions;
CUcontext cuCtx;
} decoder_device_nvdec_t;
static inline decoder_device_nvdec_t *GetNVDECOpaqueDevice(vlc_decoder_device *device)
static inline vlc_fourcc_t NVDECToVlcChroma(vlc_fourcc_t chroma)
{
if (device == NULL || device->type != VLC_DECODER_DEVICE_NVDEC)
return NULL;
return device->opaque;
}
static inline int CudaCheckErr(vlc_object_t *obj, CudaFunctions *cudaFunctions, CUresult result, const char *psz_func)
{
if (unlikely(result != CUDA_SUCCESS)) {
const char *psz_err, *psz_err_str;
cudaFunctions->cuGetErrorName(result, &psz_err);
cudaFunctions->cuGetErrorString(result, &psz_err_str);
msg_Err(obj, "%s failed: %s (%s)", psz_func, psz_err_str, psz_err);
return VLC_EGENERIC;
switch (chroma)
{
case VLC_CODEC_NVDEC_OPAQUE:
return VLC_CODEC_NV12;
case VLC_CODEC_NVDEC_OPAQUE_10B:
return VLC_CODEC_P010;
case VLC_CODEC_NVDEC_OPAQUE_16B:
return VLC_CODEC_P016;
case VLC_CODEC_NVDEC_OPAQUE_444:
return VLC_CODEC_I444;
case VLC_CODEC_NVDEC_OPAQUE_444_16B:
return VLC_CODEC_I444_16L;
default:
return 0;
}
return VLC_SUCCESS;
}
static inline bool is_nvdec_opaque(vlc_fourcc_t fourcc)
{
return fourcc == VLC_CODEC_NVDEC_OPAQUE ||
fourcc == VLC_CODEC_NVDEC_OPAQUE_10B ||
fourcc == VLC_CODEC_NVDEC_OPAQUE_16B ||
fourcc == VLC_CODEC_NVDEC_OPAQUE_444 ||
fourcc == VLC_CODEC_NVDEC_OPAQUE_444_16B;
return NVDECToVlcChroma(fourcc) != 0;
}
/* for VLC_CODEC_NVDEC_OPAQUE / VLC_CODEC_NVDEC_OPAQUE_16B */
typedef struct
{
picture_context_t ctx;
CUdeviceptr devicePtr;
unsigned int bufferPitch;
unsigned int bufferHeight;
} pic_context_nvdec_t;
#define NVDEC_PICCONTEXT_FROM_PICCTX(pic_ctx) \
container_of(pic_ctx, pic_context_nvdec_t, ctx)
#ifdef __cplusplus
}
#endif
#endif /* include-guard */
......@@ -32,6 +32,7 @@
#include <vlc_plugin.h>
#include "nvdec_fmt.h"
#include "nvdec_priv.h"
#include "../../video_output/opengl/interop.h"
......@@ -213,17 +214,7 @@ static int Open(vlc_object_t *obj)
}
}
vlc_fourcc_t render_chroma;
switch (interop->fmt_in.i_chroma)
{
case VLC_CODEC_NVDEC_OPAQUE_10B: render_chroma = VLC_CODEC_P010; break;
case VLC_CODEC_NVDEC_OPAQUE_16B: render_chroma = VLC_CODEC_P016; break;
case VLC_CODEC_NVDEC_OPAQUE_444: render_chroma = VLC_CODEC_I444; break;
case VLC_CODEC_NVDEC_OPAQUE_444_16B: render_chroma = VLC_CODEC_I444_16L; break;
case VLC_CODEC_NVDEC_OPAQUE:
default: render_chroma = VLC_CODEC_NV12; break;
}
vlc_fourcc_t render_chroma = NVDECToVlcChroma(interop->fmt_in.i_chroma);
switch (render_chroma)
{
case VLC_CODEC_P010:
......
/*****************************************************************************
* nvdec_priv.h : NVDEC private common code
*****************************************************************************
* Copyright © 2019-2023 VLC authors, VideoLAN and VideoLabs
*
* Authors: Steve Lhomme <robux4@videolabs.io>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; either version 2.1 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
#ifndef VLC_VIDEOCHROMA_NVDEC_PRIV_H_
#define VLC_VIDEOCHROMA_NVDEC_PRIV_H_
#define FFNV_LOG_FUNC(logctx, msg, ...) msg_Err((vlc_object_t*)logctx, msg, __VA_ARGS__)
#define FFNV_DEBUG_LOG_FUNC(logctx, msg, ...) msg_Dbg((vlc_object_t*)logctx, msg, __VA_ARGS__)
#include <ffnvcodec/dynlink_loader.h>
typedef struct {
CudaFunctions *cudaFunctions;
CUcontext cuCtx;
} decoder_device_nvdec_t;
static inline decoder_device_nvdec_t *GetNVDECOpaqueDevice(vlc_decoder_device *device)
{
if (device == NULL || device->type != VLC_DECODER_DEVICE_NVDEC)
return NULL;
return device->opaque;
}
static inline int CudaCheckErr(vlc_object_t *obj, CudaFunctions *cudaFunctions, CUresult result, const char *psz_func)
{
if (unlikely(result != CUDA_SUCCESS)) {
const char *psz_err, *psz_err_str;
cudaFunctions->cuGetErrorName(result, &psz_err);
cudaFunctions->cuGetErrorString(result, &psz_err_str);
msg_Err(obj, "%s failed: %s (%s)", psz_func, psz_err_str, psz_err);
return VLC_EGENERIC;
}
return VLC_SUCCESS;
}
/* for VLC_CODEC_NVDEC_OPAQUE / VLC_CODEC_NVDEC_OPAQUE_16B */
typedef struct
{
picture_context_t ctx;
CUdeviceptr devicePtr;
unsigned int bufferPitch;
unsigned int bufferHeight;
} pic_context_nvdec_t;
#define NVDEC_PICCONTEXT_FROM_PICCTX(pic_ctx) \
container_of(pic_ctx, pic_context_nvdec_t, ctx)
#endif /* include-guard */
......@@ -220,6 +220,9 @@ else
libdirect3d11_plugin_la_LIBADD += -ld3d11
libdirect3d11_plugin_la_LIBADD += -ld3dcompiler_47
endif
if HAVE_NVDEC
libdirect3d11_plugin_la_SOURCES += hw/nvdec/nvdec_fmt.h
endif
libdirect3d11_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(voutdir)'
vout_LTLIBRARIES += $(LTLIBdirect3d11)
EXTRA_LTLIBRARIES += libdirect3d11_plugin.la
......
......@@ -40,6 +40,7 @@
#include <new>
#include "../../video_chroma/d3d11_fmt.h"
#include "../../hw/nvdec/nvdec_fmt.h"
#include "d3d11_quad.h"
#include "d3d11_shaders.h"
......@@ -907,58 +908,32 @@ static int SetupOutputFormat(vout_display_t *vd, video_format_t *fmt, vlc_video_
{
uint8_t bits_per_channel;
uint8_t widthDenominator, heightDenominator;
switch (fmt->i_chroma)
vlc_fourcc_t cpu_chroma;
if (is_d3d11_opaque(fmt->i_chroma))
cpu_chroma = DxgiFormatFourcc(vtcx_sys->format);
else if (is_nvdec_opaque(fmt->i_chroma))
cpu_chroma = NVDECToVlcChroma(fmt->i_chroma);
else
cpu_chroma = fmt->i_chroma;
const auto *p_format = vlc_fourcc_GetChromaDescription(cpu_chroma);
if (unlikely(p_format == NULL || p_format->plane_count == 0))
{
case VLC_CODEC_D3D11_OPAQUE:
case VLC_CODEC_NVDEC_OPAQUE:
bits_per_channel = 8;
widthDenominator = heightDenominator = 2;
break;
case VLC_CODEC_D3D11_OPAQUE_RGBA:
case VLC_CODEC_D3D11_OPAQUE_BGRA:
bits_per_channel = 8;
widthDenominator = heightDenominator = 1;
break;
case VLC_CODEC_D3D11_OPAQUE_10B:
case VLC_CODEC_NVDEC_OPAQUE_10B:
bits_per_channel = 10;
widthDenominator = heightDenominator = 2;
break;
case VLC_CODEC_NVDEC_OPAQUE_16B:
bits_per_channel = 16;
widthDenominator = heightDenominator = 2;
break;
case VLC_CODEC_NVDEC_OPAQUE_444:
bits_per_channel = 8;
widthDenominator = heightDenominator = 1;
break;
case VLC_CODEC_NVDEC_OPAQUE_444_16B:
bits_per_channel = 16;
}
else
{
bits_per_channel = p_format->pixel_bits /
(p_format->plane_count==1 ? p_format->pixel_size : 1);
widthDenominator = heightDenominator = 1;
break;
default:
for (size_t i=0; i<p_format->plane_count; i++)
{
const auto *p_format = vlc_fourcc_GetChromaDescription(fmt->i_chroma);
if (p_format == NULL)
{
bits_per_channel = 8;
widthDenominator = heightDenominator = 2;
}
else
{
bits_per_channel = p_format->pixel_bits == 0 ? 8 : p_format->pixel_bits /
(p_format->plane_count==1 ? p_format->pixel_size : 1);
widthDenominator = heightDenominator = 1;
for (size_t i=0; i<p_format->plane_count; i++)
{
if (widthDenominator < p_format->p[i].w.den)
widthDenominator = p_format->p[i].w.den;
if (heightDenominator < p_format->p[i].h.den)
heightDenominator = p_format->p[1].h.den;
}
}
if (widthDenominator < p_format->p[i].w.den)
widthDenominator = p_format->p[i].w.den;
if (heightDenominator < p_format->p[i].h.den)
heightDenominator = p_format->p[1].h.den;
}
break;
}
/* look for a decoder format that can be decoded but not used in shaders */
......