diff --git a/.gitattributes b/.gitattributes index 94cf87928a..602676c977 100644 --- a/.gitattributes +++ b/.gitattributes @@ -81,6 +81,8 @@ org.eclipse.jdt.core.prefs -text whitespace=cr-at-eol merge=union *.cmd text eol=crlf *.cmd.tmpl text eol=crlf *.dsp text eol=crlf -whitespace +*.ps1 text eol=crlf +*.ps1.in text eol=crlf *.sln text eol=crlf -whitespace *.vcproj text eol=crlf -whitespace merge=union *.vcxproj text eol=crlf -whitespace merge=union diff --git a/3rdparty/ffmpeg/ffmpeg-download.ps1.in b/3rdparty/ffmpeg/ffmpeg-download.ps1.in new file mode 100644 index 0000000000..589aa143e8 --- /dev/null +++ b/3rdparty/ffmpeg/ffmpeg-download.ps1.in @@ -0,0 +1,63 @@ +$url = "https://raw.githubusercontent.com/opencv/opencv_3rdparty/@FFMPEG_BINARIES_COMMIT@/ffmpeg/opencv_ffmpeg_64.dll" +$expected_md5 = "@FFMPEG_FILE_HASH_BIN64@" +$output = "$PSScriptRoot\@OPENCV_BIN_INSTALL_PATH@\opencv_ffmpeg@OPENCV_DLLVERSION@_64.dll" + +Write-Output ("=" * 120) +try { + Get-content -Path "$PSScriptRoot\etc\licenses\ffmpeg-readme.txt" -ErrorAction 'Stop' +} catch { + Write-Output "Refer to OpenCV FFmpeg wrapper readme notes about library usage / licensing details." +} +Write-Output ("=" * 120) +Write-Output "" + +if(![System.IO.File]::Exists($output)) { + try { + Write-Output ("Downloading: " + $output) + Import-Module BitsTransfer + $start_time = Get-Date + Start-BitsTransfer -Source $url -Destination $output -ErrorAction 'Stop' + Write-Output "Downloaded in $((Get-Date).Subtract($start_time).Seconds) seconds" + } catch { + $_ # Dump error + try { + Write-Output ("Downloading (second attempt): " + $output) + $start_time = Get-Date + Invoke-WebRequest -Uri $url -OutFile $output + Write-Output "Downloaded in $((Get-Date).Subtract($start_time).Seconds) seconds" + } catch { + Write-Output ("Can't download file: " + $output) + Write-Output ("URL: " + $url) + Write-Output "You need to download this file manually. Stop" + Pause + Exit + } + } +} else { + Write-Output ("File exists: " + $output) + Write-Output ("Downloading is skipped. Remove this file and re-run this script to force downloading.") +} + +if(![System.IO.File]::Exists($output)) { + Write-Output ("Destination file not found: " + $output) + Write-Output "Stop" + Pause + Exit +} + +try { + $hash = Get-FileHash $output -Algorithm MD5 -ErrorAction 'Stop' + + if($hash.Hash -eq $expected_md5) { + Write-Output "MD5 check passed" + } else { + Write-Output ("MD5 : " + $hash.Hash.toLower()) + Write-Output ("Expected: " + $expected_md5) + Write-Output "MD5 hash mismatch" + } +} catch { + $_ # Dump error + Write-Output "Can't check MD5 hash (requires PowerShell 4+)" +} +Pause +Write-Output "Exit" diff --git a/3rdparty/ffmpeg/ffmpeg.cmake b/3rdparty/ffmpeg/ffmpeg.cmake index 423b409128..5414b8f29e 100644 --- a/3rdparty/ffmpeg/ffmpeg.cmake +++ b/3rdparty/ffmpeg/ffmpeg.cmake @@ -35,3 +35,8 @@ function(download_win_ffmpeg script_var) set(${script_var} "${FFMPEG_DOWNLOAD_DIR}/ffmpeg_version.cmake" PARENT_SCOPE) endif() endfunction() + +if(OPENCV_INSTALL_FFMPEG_DOWNLOAD_SCRIPT) + configure_file("${CMAKE_CURRENT_LIST_DIR}/ffmpeg-download.ps1.in" "${CMAKE_BINARY_DIR}/win-install/ffmpeg-download.ps1" @ONLY) + install(FILES "${CMAKE_BINARY_DIR}/win-install/ffmpeg-download.ps1" DESTINATION "." COMPONENT libs) +endif()