Commit 4d7d1f03 authored by Thomas Guillem's avatar Thomas Guillem

mediacodec: add mediacodec-tunneled-playback boolean option

Can be used if the surface given to mediacodec has a punch hole. Configuring a
punch hole depends of the hardware, therefore, this option is only for
developers that use libvlc with a known hardware.
parent 76a84e0d
...@@ -179,6 +179,8 @@ static void RemoveInflightPictures(decoder_t *); ...@@ -179,6 +179,8 @@ static void RemoveInflightPictures(decoder_t *);
#define MEDIACODEC_AUDIO_TEXT "Use MediaCodec for audio decoding" #define MEDIACODEC_AUDIO_TEXT "Use MediaCodec for audio decoding"
#define MEDIACODEC_AUDIO_LONGTEXT "Still experimental." #define MEDIACODEC_AUDIO_LONGTEXT "Still experimental."
#define MEDIACODEC_TUNNELEDPLAYBACK_TEXT "Use a tunneled surface for playback"
#define CFG_PREFIX "mediacodec-" #define CFG_PREFIX "mediacodec-"
vlc_module_begin () vlc_module_begin ()
...@@ -191,6 +193,8 @@ vlc_module_begin () ...@@ -191,6 +193,8 @@ vlc_module_begin ()
DIRECTRENDERING_TEXT, DIRECTRENDERING_LONGTEXT, true) DIRECTRENDERING_TEXT, DIRECTRENDERING_LONGTEXT, true)
add_bool(CFG_PREFIX "audio", false, add_bool(CFG_PREFIX "audio", false,
MEDIACODEC_AUDIO_TEXT, MEDIACODEC_AUDIO_LONGTEXT, true) MEDIACODEC_AUDIO_TEXT, MEDIACODEC_AUDIO_LONGTEXT, true)
add_bool(CFG_PREFIX "tunneled-playback", false,
MEDIACODEC_TUNNELEDPLAYBACK_TEXT, NULL, true)
set_callbacks( OpenDecoderNdk, CloseDecoder ) set_callbacks( OpenDecoderNdk, CloseDecoder )
add_shortcut( "mediacodec_ndk" ) add_shortcut( "mediacodec_ndk" )
add_submodule () add_submodule ()
...@@ -469,6 +473,8 @@ static int StartMediaCodec(decoder_t *p_dec) ...@@ -469,6 +473,8 @@ static int StartMediaCodec(decoder_t *p_dec)
} }
} }
args.video.p_awh = p_sys->u.video.p_awh; args.video.p_awh = p_sys->u.video.p_awh;
args.video.b_tunneled_playback = args.video.p_awh ?
var_InheritBool(p_dec, CFG_PREFIX "tunneled-playback") : false;
} }
else else
{ {
......
...@@ -86,6 +86,7 @@ union mc_api_args ...@@ -86,6 +86,7 @@ union mc_api_args
int i_width; int i_width;
int i_height; int i_height;
int i_angle; int i_angle;
bool b_tunneled_playback;
} video; } video;
struct struct
{ {
......
...@@ -545,6 +545,11 @@ static int Start(mc_api *api, union mc_api_args *p_args) ...@@ -545,6 +545,11 @@ static int Start(mc_api *api, union mc_api_args *p_args)
if (b_direct_rendering && p_args->video.i_angle != 0) if (b_direct_rendering && p_args->video.i_angle != 0)
SET_INTEGER(jformat, "rotation-degrees", p_args->video.i_angle); SET_INTEGER(jformat, "rotation-degrees", p_args->video.i_angle);
/* feature-tunneled-playback available since API 21 */
if (b_direct_rendering && jfields.get_input_buffer)
SET_INTEGER(jformat, "feature-tunneled-playback",
p_args->video.b_tunneled_playback);
} }
else else
{ {
......
...@@ -328,8 +328,14 @@ static int Start(mc_api *api, union mc_api_args *p_args) ...@@ -328,8 +328,14 @@ static int Start(mc_api *api, union mc_api_args *p_args)
syms.AMediaFormat.setInt32(p_sys->p_format, "height", p_args->video.i_height); syms.AMediaFormat.setInt32(p_sys->p_format, "height", p_args->video.i_height);
syms.AMediaFormat.setInt32(p_sys->p_format, "rotation-degrees", p_args->video.i_angle); syms.AMediaFormat.setInt32(p_sys->p_format, "rotation-degrees", p_args->video.i_angle);
if (p_args->video.p_awh) if (p_args->video.p_awh)
{
p_anw = AWindowHandler_getANativeWindow(p_args->video.p_awh, p_anw = AWindowHandler_getANativeWindow(p_args->video.p_awh,
AWindow_Video); AWindow_Video);
if( p_anw )
syms.AMediaFormat.setInt32(p_sys->p_format,
"feature-tunneled-playback",
p_args->video.b_tunneled_playback);
}
} }
else else
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment