Buffer Iterating
const int width = 640, height = 640, channels = 3;
const size_t frame_size = width * height * channels;
vector<char> frame_buffer(frame_size);
vector<float> input_tensor_values(1 * channels * height * width);
while (TRUE) {
cin.read(reinterpret_cast<char*>(frame_buffer.data()), frame_size);
size_t bytes_read = cin.gcount();
if (bytes_read == 0) break;
if (bytes_read != frame_size) {
cerr << "Error : " << frame_size << ",Read : " << bytes_read << endl;
break;
}
// ⇒ float ⇒ Normalization (HWC : Height-Width-Channel)
for (size_t i = 0; i < frame_buffer.size(); ++i) {
input_tensor_values[i] = static_cast<float>(static_cast<unsigned char>(frame_buffer[i])) / 255.0f;
}
// ⇒ CHW (CHW : Channel-Height-Width)
for (int c = 0; c < channels; ++c) {
for (int h = 0; h < height; ++h) {
for (int w = 0; w < width; ++w) {
int src_idx = (h * width + w) * channels + c;
int dst_idx = c * height * width + h * width + w;
input_tensor_values[dst_idx] = frame_buffer[src_idx];
}
}
}
// .T.B.D.
}
ipc-list
:: ######################################################################
:: PLEASE DO NOT EDIT THIS FILE
:: ######################################################################
@ECHO OFF
@SETLOCAL ENABLEDELAYEDEXPANSION
:: ----------------------------------------------------------------------
SET MODE=WIN10
FOR /F "tokens=4-5 delims= " %%a IN ('ver') DO (
SET "version=%%a.%%b"
FOR /F "tokens=3 delims=." %%x IN ("!version!") DO (
IF %%x geq 22000 (
SET MODE=WIN11
) ELSE (
SET MODE=WIN10
)
)
)
:: ----------------------------------------------------------------------
@IF "!MODE!" EQU "WIN10" (
SET CONTENT=[
FOR /F "tokens=2 delims==" %%a IN ('wmic path Win32_PnPEntity where "Service='usbvideo'" get Name /value ^| grep "Name=" ^| awk "{print $0}" ') DO (
SET "token=%%a"
ffprobe -loglevel quiet -f dshow -show_streams -i video="!token!" > !MODE!.txt
SET tokenCodec=
FOR /F "tokens=2 delims==" %%m IN ('cat !MODE!.txt ^| grep "codec_name"') DO (
SET "tokenCodec=%%m"
)
SET tokenWidth=
FOR /F "tokens=2 delims==" %%m IN ('cat !MODE!.txt ^| grep "coded_width"') DO (
SET "tokenWidth=%%m"
)
SET tokenHeight=
FOR /F "tokens=2 delims==" %%m IN ('cat !MODE!.txt ^| grep "coded_height"') DO (
SET "tokenHeight=%%m"
)
SET tokenFPS=
FOR /F "tokens=2 delims==" %%x IN ('cat !MODE!.txt ^| grep "frame_rate"') DO (
SET "tokenFPS=%%x"
FOR /F "tokens=1,2 delims=/" %%a in ("!tokenFPS!") do (
SET /a tokenFPS=%%a / %%b
)
)
@DEL !MODE!.txt >NUL
@SET CONTENT=!CONTENT!{"token":"!token!","codec":"!tokenCodec!","fps":"!tokenFPS!","width":"!tokenWidth!","height":"!tokenHeight!"},
)
@SET CONTENT=!CONTENT!]
@SET CONTENT=!CONTENT:,]=]!
)
@IF "!MODE!" EQU "WIN11" (
SET CONTENT=[
FOR /F tokens^=2^ delims^=^" %%a IN ('ffmpeg -hide_banner -list_devices true -f dshow -i dummy 2^>^&1 ^| findstr /I /C:"video" /C:"DirectShow"') do (
SET "token=%%a"
SET LINE=!token!
ffprobe -loglevel quiet -f dshow -show_streams -i video="!token!" > !MODE!.txt
SET tokenCodec=
FOR /F "tokens=2 delims==" %%m IN ('cat !MODE!.txt ^| grep "codec_name"') DO (
SET "tokenCodec=%%m"
)
SET tokenWidth=
FOR /F "tokens=2 delims==" %%m IN ('cat !MODE!.txt ^| grep "coded_width"') DO (
SET "tokenWidth=%%m"
)
SET tokenHeight=
FOR /F "tokens=2 delims==" %%m IN ('cat !MODE!.txt ^| grep "coded_height"') DO (
SET "tokenHeight=%%m"
)
SET tokenFPS=
FOR /F "tokens=2 delims==" %%x IN ('cat !MODE!.txt ^| grep "frame_rate"') DO (
SET "tokenFPS=%%x"
FOR /F "tokens=1,2 delims=/" %%a in ("!tokenFPS!") do (
SET /a tokenFPS=%%a / %%b
)
)
@DEL !MODE!.txt >NUL
@SET CONTENT=!CONTENT!{"token":"!token!","codec":"!tokenCodec!","fps":"!tokenFPS!","width":"!tokenWidth!","height":"!tokenHeight!"},
)
@SET CONTENT=!CONTENT!]
@SET CONTENT=!CONTENT:,]=]!
)
ECHO !CONTENT!
@ENDLOCAL
@exit 0;