fixed setatone16 function to return the correct result for additional flags

This commit is contained in:
amantley 2018-06-06 16:44:12 -07:00
parent 0c879d85b5
commit dca93ca61f
3 changed files with 24 additions and 5 deletions

View file

@ -45,6 +45,13 @@ void Head::reset() {
void Head::simulate(float deltaTime) { void Head::simulate(float deltaTime) {
const float NORMAL_HZ = 60.0f; // the update rate the constant values were tuned for const float NORMAL_HZ = 60.0f; // the update rate the constant values were tuned for
qCDebug(avatars_renderer) << "name " << _owningAvatar->getName();
if (_owningAvatar->isMyAvatar()) {
qCDebug(avatars_renderer) << "my avatar";
} else {
qCDebug(avatars_renderer) << "not my avatar " << _owningAvatar->getAudioLoudness();
}
// grab the audio loudness from the owning avatar, if we have one // grab the audio loudness from the owning avatar, if we have one
float audioLoudness = _owningAvatar ? _owningAvatar->getAudioLoudness() : 0.0f; float audioLoudness = _owningAvatar ? _owningAvatar->getAudioLoudness() : 0.0f;
@ -78,6 +85,7 @@ void Head::simulate(float deltaTime) {
_saccade = glm::vec3(); _saccade = glm::vec3();
} }
const float BLINK_SPEED = 10.0f; const float BLINK_SPEED = 10.0f;
const float BLINK_SPEED_VARIABILITY = 1.0f; const float BLINK_SPEED_VARIABILITY = 1.0f;
@ -85,7 +93,7 @@ void Head::simulate(float deltaTime) {
const float FULLY_OPEN = 0.0f; const float FULLY_OPEN = 0.0f;
const float FULLY_CLOSED = 1.0f; const float FULLY_CLOSED = 1.0f;
if (getHasProceduralBlinkFaceMovement()) { if (getHasProceduralBlinkFaceMovement()) {
qCDebug(avatars_renderer) << "in the blink code"; qCDebug(avatars_renderer) << "in the blink code " << _owningAvatar->getName();
// Detect transition from talking to not; force blink after that and a delay // Detect transition from talking to not; force blink after that and a delay
bool forceBlink = false; bool forceBlink = false;
const float TALKING_LOUDNESS = 100.0f; const float TALKING_LOUDNESS = 100.0f;
@ -135,7 +143,7 @@ void Head::simulate(float deltaTime) {
// use data to update fake Faceshift blendshape coefficients // use data to update fake Faceshift blendshape coefficients
if (getHasAudioEnabledFaceMovement()) { if (getHasAudioEnabledFaceMovement()) {
qCDebug(avatars_renderer) << "in the audio face code"; //qCDebug(avatars_renderer) << "in the audio face code";
// Update audio attack data for facial animation (eyebrows and mouth) // Update audio attack data for facial animation (eyebrows and mouth)
float audioAttackAveragingRate = (10.0f - deltaTime * NORMAL_HZ) / 10.0f; // --> 0.9 at 60 Hz float audioAttackAveragingRate = (10.0f - deltaTime * NORMAL_HZ) / 10.0f; // --> 0.9 at 60 Hz
_audioAttack = audioAttackAveragingRate * _audioAttack + _audioAttack = audioAttackAveragingRate * _audioAttack +
@ -167,7 +175,7 @@ void Head::simulate(float deltaTime) {
_transientBlendshapeCoefficients); _transientBlendshapeCoefficients);
if (getHasProceduralEyeFaceMovement()) { if (getHasProceduralEyeFaceMovement()) {
qCDebug(avatars_renderer) << "in the eye face code"; //qCDebug(avatars_renderer) << "in the eye face code";
applyEyelidOffset(getOrientation()); applyEyelidOffset(getOrientation());
} }

View file

@ -522,12 +522,17 @@ QByteArray AvatarData::toByteArray(AvatarDataDetail dataDetail, quint64 lastSent
auto faceTrackerInfo = reinterpret_cast<AvatarDataPacket::FaceTrackerInfo*>(destinationBuffer); auto faceTrackerInfo = reinterpret_cast<AvatarDataPacket::FaceTrackerInfo*>(destinationBuffer);
const auto& blendshapeCoefficients = _headData->getBlendshapeCoefficients(); const auto& blendshapeCoefficients = _headData->getBlendshapeCoefficients();
//for (int i = 0; i < blendshapeCoefficients.size(); i++) {
// qCWarning(avatars) << "blend coeff " << i << " " << blendshapeCoefficients[i];
//}
faceTrackerInfo->leftEyeBlink = _headData->_leftEyeBlink; faceTrackerInfo->leftEyeBlink = _headData->_leftEyeBlink;
faceTrackerInfo->rightEyeBlink = _headData->_rightEyeBlink; faceTrackerInfo->rightEyeBlink = _headData->_rightEyeBlink;
faceTrackerInfo->averageLoudness = _headData->_averageLoudness; faceTrackerInfo->averageLoudness = _headData->_averageLoudness;
faceTrackerInfo->browAudioLift = _headData->_browAudioLift; faceTrackerInfo->browAudioLift = _headData->_browAudioLift;
faceTrackerInfo->numBlendshapeCoefficients = blendshapeCoefficients.size(); faceTrackerInfo->numBlendshapeCoefficients = blendshapeCoefficients.size();
destinationBuffer += sizeof(AvatarDataPacket::FaceTrackerInfo); destinationBuffer += sizeof(AvatarDataPacket::FaceTrackerInfo);
qCWarning(avatars) << "face tracker info left eye blink " << faceTrackerInfo->leftEyeBlink;
memcpy(destinationBuffer, blendshapeCoefficients.data(), blendshapeCoefficients.size() * sizeof(float)); memcpy(destinationBuffer, blendshapeCoefficients.data(), blendshapeCoefficients.size() * sizeof(float));
destinationBuffer += blendshapeCoefficients.size() * sizeof(float); destinationBuffer += blendshapeCoefficients.size() * sizeof(float);
@ -1009,6 +1014,11 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
auto newHasProceduralEyeFaceMovement = oneAtBit16(bitItems, PROCEDURAL_EYE_FACE_MOVEMENT); auto newHasProceduralEyeFaceMovement = oneAtBit16(bitItems, PROCEDURAL_EYE_FACE_MOVEMENT);
auto newHasProceduralBlinkFaceMovement = oneAtBit16(bitItems, PROCEDURAL_BLINK_FACE_MOVEMENT); auto newHasProceduralBlinkFaceMovement = oneAtBit16(bitItems, PROCEDURAL_BLINK_FACE_MOVEMENT);
if (newHasAudioEnabledFaceMovement) {
qCWarning(avatars) << "name " << getName() << "audio enabled flag is true";
} else {
qCWarning(avatars) << "name " << getName() << "audio enabled flag is false";
}
bool keyStateChanged = (_keyState != newKeyState); bool keyStateChanged = (_keyState != newKeyState);
bool handStateChanged = (_handState != newHandState); bool handStateChanged = (_handState != newHandState);
bool faceStateChanged = (_headData->_isFaceTrackerConnected != newFaceTrackerConnected); bool faceStateChanged = (_headData->_isFaceTrackerConnected != newFaceTrackerConnected);
@ -1086,6 +1096,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) {
PACKET_READ_CHECK(FaceTrackerInfo, sizeof(AvatarDataPacket::FaceTrackerInfo)); PACKET_READ_CHECK(FaceTrackerInfo, sizeof(AvatarDataPacket::FaceTrackerInfo));
auto faceTrackerInfo = reinterpret_cast<const AvatarDataPacket::FaceTrackerInfo*>(sourceBuffer); auto faceTrackerInfo = reinterpret_cast<const AvatarDataPacket::FaceTrackerInfo*>(sourceBuffer);
sourceBuffer += sizeof(AvatarDataPacket::FaceTrackerInfo); sourceBuffer += sizeof(AvatarDataPacket::FaceTrackerInfo);
qCWarning(avatars) << "parse data left eye blink " << faceTrackerInfo->leftEyeBlink;
_headData->_leftEyeBlink = faceTrackerInfo->leftEyeBlink; _headData->_leftEyeBlink = faceTrackerInfo->leftEyeBlink;
_headData->_rightEyeBlink = faceTrackerInfo->rightEyeBlink; _headData->_rightEyeBlink = faceTrackerInfo->rightEyeBlink;

View file

@ -298,11 +298,11 @@ void setAtBit(unsigned char& byte, int bitIndex) {
} }
bool oneAtBit16(unsigned short word, int bitIndex) { bool oneAtBit16(unsigned short word, int bitIndex) {
return (word >> (7 - bitIndex) & 1); return (word >> (16 - bitIndex) & 1);
} }
void setAtBit16(unsigned short& word, int bitIndex) { void setAtBit16(unsigned short& word, int bitIndex) {
word |= (1 << (7 - bitIndex)); word |= (1 << (16 - bitIndex));
} }