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
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
  • shocknovaa/vlc
  • gremlinflat/vlc
  • Pratham24D/vlc
411 results
Show changes
Commits on Source (3)
......@@ -76,11 +76,11 @@ struct vlc_gl_interop_ops {
*
* This function pointer can be NULL. If it is set, it may return NULL.
*
* Otherwise, it must return a 4x4 matrix, as an array of 16 floats in
* Otherwise, it must return a 3x3 matrix, as an array of 9 floats in
* column-major order.
*
* This transform matrix maps 2D homogeneous texture coordinates of the
* form (s, t, 0, 1) with s and t in the inclusive range [0, 1] to the
* form (s, t, 1) with s and t in the inclusive range [0, 1] to the
* texture coordinate that should be used to sample that location from the
* texture.
*
......@@ -88,7 +88,7 @@ struct vlc_gl_interop_ops {
* freed before the module is closed.
*
* \param interop the OpenGL interop
* \return a 4x4 transformatoin matrix (possibly NULL)
* \return a 3x3 transformation matrix (possibly NULL)
*/
const float *
(*get_transform_matrix)(const struct vlc_gl_interop *interop);
......
......@@ -34,12 +34,48 @@
struct priv
{
float mtx_3x3[3*3];
const float *transform_mtx;
bool stex_attached;
struct vlc_asurfacetexture *previous_texture;
picture_t *current_picture;
};
static void
ReductMatrix(float *mtx_3x3, const float *mtx_4x4)
{
/*
* The transform matrix provided by Android is 4x4:
* <https://developer.android.com/reference/android/graphics/SurfaceTexture#getTransformMatrix(float%5B%5D)>
*
* However, the third column is never used, since the input vector is in
* the form (s, t, 0, 1). Similarly, the third row is never used either,
* since only the two first coordinates of the output vector are kept.
*
* mat_4x4 mat_3x3
*
* / a b . c \ / a b c \
* | d e . f | --> | d e f |
* | . . . . | \ g h i /
* \ g h . i /
*/
#define MTX4(COL,ROW) mtx_4x4[(COL)*4 + (ROW)]
#define MTX3(COL,ROW) mtx_3x3[(COL)*3 + (ROW)]
MTX3(0,0) = MTX4(0,0); // a
MTX3(1,0) = MTX4(1,0); // b
MTX3(2,0) = MTX4(3,0); // c
MTX3(0,1) = MTX4(0,1); // d
MTX3(1,1) = MTX4(1,1); // e
MTX3(2,1) = MTX4(3,1); // f
MTX3(0,2) = MTX4(0,3); // g
MTX3(1,2) = MTX4(1,3); // h
MTX3(2,2) = MTX4(3,3); // i
#undef MTX4
#undef MTX3
}
static int
tc_anop_allocate_textures(const struct vlc_gl_interop *interop, GLuint *textures,
const GLsizei *tex_width, const GLsizei *tex_height)
......@@ -103,13 +139,17 @@ tc_anop_update(struct vlc_gl_interop *interop, GLuint *textures,
if (previous_texture && previous_texture != texture)
SurfaceTexture_releaseTexImage(previous_texture);
if (SurfaceTexture_updateTexImage(texture, &priv->transform_mtx)
const float *mtx_4x4;
if (SurfaceTexture_updateTexImage(texture, &mtx_4x4)
!= VLC_SUCCESS)
{
priv->transform_mtx = NULL;
goto error;
}
ReductMatrix(priv->mtx_3x3, mtx_4x4);
priv->transform_mtx = priv->mtx_3x3;
interop->vt->ActiveTexture(GL_TEXTURE0);
interop->vt->BindTexture(interop->tex_target, textures[0]);
......
......@@ -47,7 +47,7 @@ struct vlc_gl_sampler_priv {
const opengl_vtable_t *vt; /* for convenience, same as &api->vt */
struct {
GLfloat OrientationMatrix[4*4];
GLfloat OrientationMatrix[3*3];
GLfloat TexCoordsMap[3*3];
} var;
struct {
......@@ -332,7 +332,7 @@ GetTransformMatrix(const struct vlc_gl_interop *interop)
if (interop && interop->ops && interop->ops->get_transform_matrix)
tm = interop->ops->get_transform_matrix(interop);
if (!tm)
tm = MATRIX4_IDENTITY;
tm = MATRIX3_IDENTITY;
return tm;
}
......@@ -362,9 +362,9 @@ sampler_base_load(struct vlc_gl_sampler *sampler)
/* Return the expected transform matrix if interop == NULL */
const GLfloat *tm = GetTransformMatrix(priv->interop);
vt->UniformMatrix4fv(priv->uloc.TransformMatrix, 1, GL_FALSE, tm);
vt->UniformMatrix3fv(priv->uloc.TransformMatrix, 1, GL_FALSE, tm);
vt->UniformMatrix4fv(priv->uloc.OrientationMatrix, 1, GL_FALSE,
vt->UniformMatrix3fv(priv->uloc.OrientationMatrix, 1, GL_FALSE,
priv->var.OrientationMatrix);
if (priv->tex_target == GL_TEXTURE_RECTANGLE)
......@@ -446,9 +446,9 @@ sampler_xyz12_load(struct vlc_gl_sampler *sampler)
/* Return the expected transform matrix if interop == NULL */
const GLfloat *tm = GetTransformMatrix(priv->interop);
vt->UniformMatrix4fv(priv->uloc.TransformMatrix, 1, GL_FALSE, tm);
vt->UniformMatrix3fv(priv->uloc.TransformMatrix, 1, GL_FALSE, tm);
vt->UniformMatrix4fv(priv->uloc.OrientationMatrix, 1, GL_FALSE,
vt->UniformMatrix3fv(priv->uloc.OrientationMatrix, 1, GL_FALSE,
priv->var.OrientationMatrix);
}
......@@ -479,13 +479,13 @@ xyz12_shader_init(struct vlc_gl_sampler *sampler)
" 0.0, 0.0, 0.0, 1.0 "
" );"
"uniform mat4 TransformMatrix;\n"
"uniform mat4 OrientationMatrix;\n"
"uniform mat3 TransformMatrix;\n"
"uniform mat3 OrientationMatrix;\n"
"uniform mat3 TexCoordsMap;\n"
"vec4 vlc_texture(vec2 pic_coords)\n"
"{ "
" vec4 v_in, v_out;"
" vec2 tex_coords = (TexCoordsMap * vec3((TransformMatrix * OrientationMatrix * vec4(pic_coords, 0.0, 1.0)).xy, 1.0)).xy;\n"
" vec2 tex_coords = (TransformMatrix * TexCoordsMap * OrientationMatrix * vec3(pic_coords, 1.0)).xy;\n"
" v_in = texture2D(Textures[0], tex_coords);\n"
" v_in = pow(v_in, xyz_gamma);"
" v_out = matrix_xyz_rgb * v_in ;"
......@@ -563,30 +563,26 @@ opengl_init_swizzle(struct vlc_gl_sampler *sampler,
}
static void
InitOrientationMatrix(GLfloat matrix[static 4*4],
InitOrientationMatrix(GLfloat matrix[static 3*3],
video_orientation_t orientation)
{
memcpy(matrix, MATRIX4_IDENTITY, sizeof(MATRIX4_IDENTITY));
memcpy(matrix, MATRIX3_IDENTITY, sizeof(MATRIX3_IDENTITY));
/**
* / C0R0 C1R0 0 C3R0 \
* | C0R1 C1R1 0 C3R1 |
* | 0 0 1 0 | <-- keep the z coordinate unchanged
* \ 0 0 0 1 /
* ^
* |
* z never impacts the orientation
* / C0R0 C1R0 C3R0 \
* | C0R1 C1R1 C3R1 |
* \ 0 0 1 /
*
* (note that in memory, the matrix is stored in column-major order)
*/
#define MATRIX_SET(C0R0, C1R0, C3R0, \
C0R1, C1R1, C3R1) \
matrix[0*4 + 0] = C0R0; \
matrix[1*4 + 0] = C1R0; \
matrix[3*4 + 0] = C3R0; \
matrix[0*4 + 1] = C0R1; \
matrix[1*4 + 1] = C1R1; \
matrix[3*4 + 1] = C3R1;
matrix[0*3 + 0] = C0R0; \
matrix[1*3 + 0] = C1R0; \
matrix[2*3 + 0] = C3R0; \
matrix[0*3 + 1] = C0R1; \
matrix[1*3 + 1] = C1R1; \
matrix[2*3 + 1] = C3R1;
/**
* The following schemas show how the video picture is oriented in the
......@@ -804,9 +800,9 @@ sampler_planes_load(struct vlc_gl_sampler *sampler)
/* Return the expected transform matrix if interop == NULL */
const GLfloat *tm = GetTransformMatrix(priv->interop);
vt->UniformMatrix4fv(priv->uloc.TransformMatrix, 1, GL_FALSE, tm);
vt->UniformMatrix3fv(priv->uloc.TransformMatrix, 1, GL_FALSE, tm);
vt->UniformMatrix4fv(priv->uloc.OrientationMatrix, 1, GL_FALSE,
vt->UniformMatrix3fv(priv->uloc.OrientationMatrix, 1, GL_FALSE,
priv->var.OrientationMatrix);
if (priv->tex_target == GL_TEXTURE_RECTANGLE)
......@@ -835,14 +831,14 @@ sampler_planes_init(struct vlc_gl_sampler *sampler)
ADDF("uniform %s Texture;\n", sampler_type);
ADD("uniform mat3 TexCoordsMap;\n"
"uniform mat4 TransformMatrix;\n"
"uniform mat4 OrientationMatrix;\n");
"uniform mat3 TransformMatrix;\n"
"uniform mat3 OrientationMatrix;\n");
if (tex_target == GL_TEXTURE_RECTANGLE)
ADD("uniform vec2 TexSize;\n");
ADD("vec4 vlc_texture(vec2 pic_coords) {\n"
" vec2 tex_coords = (TexCoordsMap * vec3((TransformMatrix * OrientationMatrix * vec4(pic_coords, 0.0, 1.0)).xy, 1.0)).xy;\n");
" vec2 tex_coords = (TransformMatrix * TexCoordsMap * OrientationMatrix * vec3(pic_coords, 1.0)).xy;\n");
if (tex_target == GL_TEXTURE_RECTANGLE)
{
......@@ -929,8 +925,8 @@ opengl_fragment_shader_init(struct vlc_gl_sampler *sampler, GLenum tex_target,
#define ADD(x) vlc_memstream_puts(&ms, x)
#define ADDF(x, ...) vlc_memstream_printf(&ms, x, ##__VA_ARGS__)
ADD("uniform mat4 TransformMatrix;\n"
"uniform mat4 OrientationMatrix;\n");
ADD("uniform mat3 TransformMatrix;\n"
"uniform mat3 OrientationMatrix;\n");
ADDF("uniform %s Textures[%u];\n", glsl_sampler, tex_count);
ADD("uniform mat3 TexCoordsMap;\n");
......@@ -1022,7 +1018,7 @@ opengl_fragment_shader_init(struct vlc_gl_sampler *sampler, GLenum tex_target,
ADD("uniform mat4 ConvMatrix;\n");
ADD("vec4 vlc_texture(vec2 pic_coords) {\n"
" vec2 tex_coords = (TexCoordsMap * vec3((TransformMatrix * OrientationMatrix * vec4(pic_coords, 0.0, 1.0)).xy, 1.0)).xy;\n");
" vec2 tex_coords = (TransformMatrix * TexCoordsMap * OrientationMatrix * vec3(pic_coords, 1.0)).xy;\n");
unsigned color_count;
if (is_yuv) {
......