共通処理をそとに出してみました。
formatが中途でかわらないことを前提にしてあります。
変換処理は同じことを繰り返しているので１つの関数にまとめました。
pixelFormatやsampleFormatも考慮して動作できるようにしました。