You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.9 KiB
135 lines
3.9 KiB
/*
|
|
* Copyright (C) 2009 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "rsContext.h"
|
|
#include "rsAnimation.h"
|
|
|
|
|
|
namespace android {
|
|
namespace renderscript {
|
|
|
|
void Animation::serialize(Context *rsc, OStream *stream) const {
|
|
}
|
|
|
|
Animation *Animation::createFromStream(Context *rsc, IStream *stream) {
|
|
return nullptr;
|
|
}
|
|
|
|
/*
|
|
Animation::Animation(Context *rsc) : ObjectBase(rsc)
|
|
{
|
|
mAllocFile = __FILE__;
|
|
mAllocLine = __LINE__;
|
|
|
|
mValuesInput = nullptr;
|
|
mValuesOutput = nullptr;
|
|
mValueCount = 0;
|
|
mInterpolation = RS_ANIMATION_INTERPOLATION_STEP;
|
|
mEdgePre = RS_ANIMATION_EDGE_UNDEFINED;
|
|
mEdgePost = RS_ANIMATION_EDGE_UNDEFINED;
|
|
mInputMin = 0;
|
|
mInputMax = 0;
|
|
}
|
|
|
|
Animation * Animation::create(Context *rsc,
|
|
const float *inValues, const float *outValues,
|
|
uint32_t valueCount, RsAnimationInterpolation interp,
|
|
RsAnimationEdge pre, RsAnimationEdge post)
|
|
{
|
|
if (valueCount < 2) {
|
|
rsc->setError(RS_ERROR_BAD_VALUE, "Animations require more than 2 values.");
|
|
return nullptr;
|
|
}
|
|
Animation *a = new Animation(rsc);
|
|
if (!a) {
|
|
rsc->setError(RS_ERROR_OUT_OF_MEMORY);
|
|
return nullptr;
|
|
}
|
|
|
|
float *vin = (float *)malloc(valueCount * sizeof(float));
|
|
float *vout = (float *)malloc(valueCount * sizeof(float));
|
|
a->mValuesInput = vin;
|
|
a->mValuesOutput = vout;
|
|
if (a->mValuesInput == nullptr || a->mValuesOutput == nullptr) {
|
|
delete a;
|
|
rsc->setError(RS_ERROR_OUT_OF_MEMORY);
|
|
return nullptr;
|
|
}
|
|
|
|
a->mEdgePre = pre;
|
|
a->mEdgePost = post;
|
|
a->mInterpolation = interp;
|
|
a->mValueCount = valueCount;
|
|
|
|
memcpy(vin, inValues, valueCount * sizeof(float));
|
|
memcpy(vout, outValues, valueCount * sizeof(float));
|
|
a->mInputMin = inValues[0];
|
|
a->mInputMax = inValues[0];
|
|
|
|
bool needSort = false;
|
|
for (uint32_t ct=1; ct < valueCount; ct++) {
|
|
if (a->mInputMin > vin[ct]) {
|
|
needSort = true;
|
|
a->mInputMin = vin[ct];
|
|
}
|
|
if (a->mInputMax < vin[ct]) {
|
|
a->mInputMax = vin[ct];
|
|
} else {
|
|
needSort = true;
|
|
}
|
|
}
|
|
|
|
while (1) {
|
|
bool changed = false;
|
|
for (uint32_t ct=1; ct < valueCount; ct++) {
|
|
if (vin[ct-1] > vin[ct]) {
|
|
float t = vin[ct-1];
|
|
vin[ct-1] = vin[ct];
|
|
vin[ct] = t;
|
|
t = vout[ct-1];
|
|
vout[ct-1] = vout[ct];
|
|
vout[ct] = t;
|
|
changed = true;
|
|
}
|
|
}
|
|
if (!changed) break;
|
|
}
|
|
|
|
return a;
|
|
}
|
|
*/
|
|
|
|
|
|
/////////////////////////////////////////
|
|
//
|
|
|
|
RsAnimation rsi_AnimationCreate(Context *rsc,
|
|
const float *inValues,
|
|
const float *outValues,
|
|
uint32_t valueCount,
|
|
RsAnimationInterpolation interp,
|
|
RsAnimationEdge pre,
|
|
RsAnimationEdge post) {
|
|
//ALOGE("rsi_ElementCreate %i %i %i %i", dt, dk, norm, vecSize);
|
|
Animation *a = nullptr;//Animation::create(rsc, inValues, outValues, valueCount, interp, pre, post);
|
|
if (a != nullptr) {
|
|
a->incUserRef();
|
|
}
|
|
return (RsAnimation)a;
|
|
}
|
|
} // namespace renderscript
|
|
} // namespace android
|