Since you have a complex command pipe you're reading from, you can use the following:
while read f; do
# Do stuff
done < <(my | complex | command | pipe)
The syntax <(command)
runs a command in a subshell and opens its stdout as a temporary file. You can use it any place where you would normally use a file in a command.
Further, you can also use the syntax >(command)
to open stdin as a file instead.