123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160openAvutilexternalinit:unit->unit="ocaml_avdevice_init"[@@noalloc]letinit_done=reffalselet()=ifnot!init_donetheninit();init_done:=truelethd=function[]->raiseNot_found|x::_->xexternalget_audio_input_formats:unit->(input,audio)formatarray="ocaml_avdevice_get_audio_input_formats"letget_audio_input_formats()=Array.to_list(get_audio_input_formats())letget_default_audio_input_format()=hd(get_audio_input_formats())externalget_video_input_formats:unit->(input,video)formatarray="ocaml_avdevice_get_video_input_formats"letget_video_input_formats()=Array.to_list(get_video_input_formats())letget_default_video_input_format()=hd(get_video_input_formats())externalget_audio_output_formats:unit->(output,audio)formatarray="ocaml_avdevice_get_audio_output_formats"letget_audio_output_formats()=Array.to_list(get_audio_output_formats())letget_default_audio_output_format()=hd(get_audio_output_formats())externalget_video_output_formats:unit->(output,video)formatarray="ocaml_avdevice_get_video_output_formats"letget_video_output_formats()=Array.to_list(get_video_output_formats())letget_default_video_output_format()=hd(get_video_output_formats())letfind_inputnamefmts=tryList.find(fund->Av.Format.get_input_named=name)fmtswithNot_found->raise(Error(`Failure("Input device not found : "^name)))letfind_audio_inputname=find_inputname(get_audio_input_formats())letfind_video_inputname=find_inputname(get_video_input_formats())letfind_outputnamefmts=tryList.find(fund->Av.Format.get_output_named=name)fmtswithNot_found->raise(Error(`Failure("Output device not found : "^name)))letfind_audio_outputname=find_outputname(get_audio_output_formats())letfind_video_outputname=find_outputname(get_video_output_formats())letopen_audio_inputname=Av.open_input~format:(find_audio_inputname)""letopen_default_audio_input()=Av.open_input~format:(get_default_audio_input_format())""letopen_video_inputname=Av.open_input~format:(find_video_inputname)""letopen_default_video_input()=Av.open_input~format:(get_default_video_input_format())""externalopen_output_format:(output,_)format->bool->(string*string)array->outputcontainer*stringarray="ocaml_av_open_output_format"let_opt_val=function|`Strings->s|`Inti->string_of_inti|`Int64i->Int64.to_stringi|`Floatf->string_of_floatfletmk_opts=function|None->[||]|Someopts->Array.of_list(Hashtbl.fold(funopt_nameopt_valcur->(opt_name,_opt_valopt_val)::cur)opts[])letfilter_optsunused=function|None->()|Someopts->Hashtbl.filter_map_inplace(funkv->ifArray.memkunusedthenSomevelseNone)optsletopen_audio_output?(interleaved=true)?optsname=letret,unused=open_output_format(find_audio_outputname)interleaved(mk_optsopts)infilter_optsunusedopts;retletopen_default_audio_output?(interleaved=true)?opts()=letret,unused=open_output_format(get_default_audio_output_format())interleaved(mk_optsopts)infilter_optsunusedopts;retletopen_video_output?(interleaved=true)?optsname=letret,unused=open_output_format(find_video_outputname)interleaved(mk_optsopts)infilter_optsunusedopts;retletopen_default_video_output?(interleaved=true)?opts()=letret,unused=open_output_format(get_default_video_output_format())interleaved(mk_optsopts)infilter_optsunusedopts;retmoduleApp_to_dev=structtypemessage=|None|Window_sizeofint*int*int*int|Window_repaintofint*int*int*int|Pause|Play|Toggle_pause|Set_volumeoffloat|Mute|Unmute|Toggle_mute|Get_volume|Get_muteexternalcontrol_message:message->_container->unit="ocaml_avdevice_app_to_dev_control_message"letcontrol_messagesmessagesav=List.iter(funmsg->control_messagemsgav)messagesendmoduleDev_to_app=structtypemessage=|None|Create_window_bufferof(int*int*int*int)option|Prepare_window_buffer|Display_window_buffer|Destroy_window_buffer|Buffer_overflow|Buffer_underflow|Buffer_readableofInt64.toption|Buffer_writableofInt64.toption|Mute_state_changedofbool|Volume_level_changedoffloatexternalset_control_message_callback:(message->unit)->_container->unit="ocaml_avdevice_set_control_message_callback"end