@ -19,6 +19,7 @@ struct args {
Uint16 port ;
Uint16 port ;
Uint16 max_size ;
Uint16 max_size ;
Uint32 bit_rate ;
Uint32 bit_rate ;
SDL_bool always_on_top ;
} ;
} ;
static void usage ( const char * arg0 ) {
static void usage ( const char * arg0 ) {
@ -65,6 +66,9 @@ static void usage(const char *arg0) {
" Enable \" show touches \" on start, disable on quit. \n "
" Enable \" show touches \" on start, disable on quit. \n "
" It only shows physical touches (not clicks from scrcpy). \n "
" It only shows physical touches (not clicks from scrcpy). \n "
" \n "
" \n "
" -T, --always-on-top \n "
" Make scrcpy window always on top (above other windows). \n "
" \n "
" -v, --version \n "
" -v, --version \n "
" Print the version of scrcpy. \n "
" Print the version of scrcpy. \n "
" \n "
" \n "
@ -206,20 +210,21 @@ static SDL_bool parse_port(char *optarg, Uint16 *port) {
static SDL_bool parse_args ( struct args * args , int argc , char * argv [ ] ) {
static SDL_bool parse_args ( struct args * args , int argc , char * argv [ ] ) {
static const struct option long_options [ ] = {
static const struct option long_options [ ] = {
{ " bit-rate " , required_argument , NULL , ' b ' } ,
{ " always-on-top " , no_argument , NULL , ' T ' } ,
{ " crop " , required_argument , NULL , ' c ' } ,
{ " bit-rate " , required_argument , NULL , ' b ' } ,
{ " fullscreen " , no_argument , NULL , ' f ' } ,
{ " crop " , required_argument , NULL , ' c ' } ,
{ " help " , no_argument , NULL , ' h ' } ,
{ " fullscreen " , no_argument , NULL , ' f ' } ,
{ " max-size " , required_argument , NULL , ' m ' } ,
{ " help " , no_argument , NULL , ' h ' } ,
{ " port " , required_argument , NULL , ' p ' } ,
{ " max-size " , required_argument , NULL , ' m ' } ,
{ " record " , required_argument , NULL , ' r ' } ,
{ " port " , required_argument , NULL , ' p ' } ,
{ " serial " , required_argument , NULL , ' s ' } ,
{ " record " , required_argument , NULL , ' r ' } ,
{ " show-touches " , no_argument , NULL , ' t ' } ,
{ " serial " , required_argument , NULL , ' s ' } ,
{ " version " , no_argument , NULL , ' v ' } ,
{ " show-touches " , no_argument , NULL , ' t ' } ,
{ NULL , 0 , NULL , 0 } ,
{ " version " , no_argument , NULL , ' v ' } ,
{ NULL , 0 , NULL , 0 } ,
} ;
} ;
int c ;
int c ;
while ( ( c = getopt_long ( argc , argv , " b:c:fhm:p:r:s:t v" , long_options , NULL ) ) ! = - 1 ) {
while ( ( c = getopt_long ( argc , argv , " b:c:fhm:p:r:s:t T v" , long_options , NULL ) ) ! = - 1 ) {
switch ( c ) {
switch ( c ) {
case ' b ' :
case ' b ' :
if ( ! parse_bit_rate ( optarg , & args - > bit_rate ) ) {
if ( ! parse_bit_rate ( optarg , & args - > bit_rate ) ) {
@ -254,6 +259,9 @@ static SDL_bool parse_args(struct args *args, int argc, char *argv[]) {
case ' t ' :
case ' t ' :
args - > show_touches = SDL_TRUE ;
args - > show_touches = SDL_TRUE ;
break ;
break ;
case ' T ' :
args - > always_on_top = SDL_TRUE ;
break ;
case ' v ' :
case ' v ' :
args - > version = SDL_TRUE ;
args - > version = SDL_TRUE ;
break ;
break ;
@ -288,6 +296,7 @@ int main(int argc, char *argv[]) {
. port = DEFAULT_LOCAL_PORT ,
. port = DEFAULT_LOCAL_PORT ,
. max_size = DEFAULT_MAX_SIZE ,
. max_size = DEFAULT_MAX_SIZE ,
. bit_rate = DEFAULT_BIT_RATE ,
. bit_rate = DEFAULT_BIT_RATE ,
. always_on_top = SDL_FALSE ,
} ;
} ;
if ( ! parse_args ( & args , argc , argv ) ) {
if ( ! parse_args ( & args , argc , argv ) ) {
return 1 ;
return 1 ;
@ -324,6 +333,7 @@ int main(int argc, char *argv[]) {
. bit_rate = args . bit_rate ,
. bit_rate = args . bit_rate ,
. show_touches = args . show_touches ,
. show_touches = args . show_touches ,
. fullscreen = args . fullscreen ,
. fullscreen = args . fullscreen ,
. always_on_top = args . always_on_top ,
} ;
} ;
int res = scrcpy ( & options ) ? 0 : 1 ;
int res = scrcpy ( & options ) ? 0 : 1 ;