lib
houxiao
2017-07-20 72481c0ede11920945d886ff9ad4be4b266863a3
lib

git-svn-id: http://192.168.1.226/svn/proxy@781 454eff88-639b-444f-9e54-f578c98de674
3个文件已添加
4个文件已修改
453 ■■■■■ 已修改文件
VisitFace/RtspNativeCodec/app/app.iml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/libs/freetype/lib/armeabi-v7a/libfreetype.a 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/libs/freetype/lib/armeabi-v7a/libfreetype.la 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/libs/freetype/lib/armeabi-v7a/libfreetype.so 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp 372 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/cpu_sched_test.cpp 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/src/main/cpp/cpu_sched_test.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
VisitFace/RtspNativeCodec/app/app.iml
@@ -83,14 +83,6 @@
      <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@@ -99,6 +91,14 @@
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
      <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
VisitFace/RtspNativeCodec/app/libs/freetype/lib/armeabi-v7a/libfreetype.a
Binary files differ
VisitFace/RtspNativeCodec/app/libs/freetype/lib/armeabi-v7a/libfreetype.la
New file
@@ -0,0 +1,41 @@
# libfreetype.la - a libtool library file
# Generated by libtool (GNU libtool) 2.4.6
#
# Please DO NOT delete this file!
# It is necessary for linking the library.
# The name that we can dlopen(3).
dlname='libfreetype.so'
# Names of this library.
library_names='libfreetype.so'
# The name of the static archive.
old_library='libfreetype.a'
# Linker flags that cannot go in dependency_libs.
inherited_linker_flags=''
# Libraries that this one depends upon.
dependency_libs=' -lz'
# Names of additional weak libraries provided by this library
weak_library_names=''
# Version information for libfreetype.
current=20
age=14
revision=0
# Is this an already installed library?
installed=yes
# Should we warn about portability when linking against -modules?
shouldnotlink=no
# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''
# Directory that this library needs to be installed in:
libdir='/opt/freetype-2.8/build/lib'
VisitFace/RtspNativeCodec/app/libs/freetype/lib/armeabi-v7a/libfreetype.so
Binary files differ
VisitFace/RtspNativeCodec/app/src/main/cpp/FaceCacheForPLBG.cpp
@@ -18,134 +18,134 @@
struct OutRGBBufferWrapper
{
    uint8_t* buffer;
    size_t buffSize;
    uint8_t* buffer;
    size_t buffSize;
    OutRGBBufferWrapper() : buffer(nullptr), buffSize(0)
    { }
    OutRGBBufferWrapper() : buffer(nullptr), buffSize(0)
    { }
    OutRGBBufferWrapper(uint8_t* _buffer, size_t _buffSize) : buffer(_buffer), buffSize(_buffSize)
    { }
    OutRGBBufferWrapper(uint8_t* _buffer, size_t _buffSize) : buffer(_buffer), buffSize(_buffSize)
    { }
};
struct FcPmBreackerContextPLBG
{
    plbg_output_vec_t lastOutputs;
    std::vector<OutRGBBufferWrapper> lastOutputsRGBBufs;
    plbg_output_vec_t lastOutputs;
    std::vector<OutRGBBufferWrapper> lastOutputsRGBBufs;
    uint8_t frameYUV[1920*1080*4];
    size_t frameYUVSize;
    uint8_t frameRGB[1920*1080*4];
    size_t frameRGBSize;
    bool frameTruncated;
    uint8_t frameYUV[1920*1080*4];
    size_t frameYUVSize;
    uint8_t frameRGB[1920*1080*4];
    size_t frameRGBSize;
    bool frameTruncated;
    FcPmBreackerContextPLBG() :
            lastOutputs(), lastOutputsRGBBufs(), frameYUV(), frameYUVSize(0), frameRGB(),frameRGBSize(0),
            frameTruncated(false)
    {}
    FcPmBreackerContextPLBG() :
            lastOutputs(), lastOutputsRGBBufs(), frameYUV(), frameYUVSize(0), frameRGB(),frameRGBSize(0),
            frameTruncated(false)
    {}
    void reset()
    {
        lastOutputs.clear();
        lastOutputsRGBBufs.clear();
        frameYUVSize = 0;
        frameRGBSize = 0;
        frameTruncated = false;
    }
    void reset()
    {
        lastOutputs.clear();
        lastOutputsRGBBufs.clear();
        frameYUVSize = 0;
        frameRGBSize = 0;
        frameTruncated = false;
    }
    void copy_data()
    {
        uint8_t* bufPtr = frameYUV;
        for (plbg_output_vec_t::iterator iter = lastOutputs.begin(); iter != lastOutputs.end(); ++iter)
        {
            const uint8_t* originBuf = iter->croppedData;
            if (originBuf == nullptr || iter->croppedDataSize == 0)
                continue;
    void copy_data()
    {
        uint8_t* bufPtr = frameYUV;
        for (plbg_output_vec_t::iterator iter = lastOutputs.begin(); iter != lastOutputs.end(); ++iter)
        {
            const uint8_t* originBuf = iter->croppedData;
            if (originBuf == nullptr || iter->croppedDataSize == 0)
                continue;
            if (sizeof(frameYUV) - (bufPtr - frameYUV) < iter->croppedDataSize)
            {
                frameTruncated = true;
                LOG_WARN << "yuv buffer truncated" << LOG_ENDL;
                break;
            }
            if (sizeof(frameYUV) - (bufPtr - frameYUV) < iter->croppedDataSize)
            {
                frameTruncated = true;
                LOG_WARN << "yuv buffer truncated" << LOG_ENDL;
                break;
            }
            iter->croppedData = bufPtr;
            memcpy(bufPtr, originBuf, iter->croppedDataSize);
            bufPtr += iter->croppedDataSize;
            frameYUVSize += iter->croppedDataSize;
        }
    }
            iter->croppedData = bufPtr;
            memcpy(bufPtr, originBuf, iter->croppedDataSize);
            bufPtr += iter->croppedDataSize;
            frameYUVSize += iter->croppedDataSize;
        }
    }
    void convert_data()
    {
        uint8_t* bufPtr = frameRGB;
        for (plbg_output_vec_t::iterator iter = lastOutputs.begin(); iter != lastOutputs.end(); ++iter)
        {
            if (iter->croppedData == nullptr || iter->croppedDataSize == 0)
            {
                OutRGBBufferWrapper bw;
                lastOutputsRGBBufs.push_back(bw);
                continue;
            }
    void convert_data()
    {
        uint8_t* bufPtr = frameRGB;
        for (plbg_output_vec_t::iterator iter = lastOutputs.begin(); iter != lastOutputs.end(); ++iter)
        {
            if (iter->croppedData == nullptr || iter->croppedDataSize == 0)
            {
                OutRGBBufferWrapper bw;
                lastOutputsRGBBufs.push_back(bw);
                continue;
            }
            OutRGBBufferWrapper bw;
            bw.buffer = bufPtr;
            bw.buffSize = iter->rectInOriginFrame.rect.width() * iter->rectInOriginFrame.rect.height() * 2; //RGB565
            if (sizeof(frameRGB) - (bufPtr - frameRGB) < bw.buffSize)
            {
                frameTruncated = true;
                OutRGBBufferWrapper bw;
                lastOutputsRGBBufs.push_back(bw);
                LOG_WARN << "rgb buffer truncated" << LOG_ENDL;
                continue;
            }
            OutRGBBufferWrapper bw;
            bw.buffer = bufPtr;
            bw.buffSize = iter->rectInOriginFrame.rect.width() * iter->rectInOriginFrame.rect.height() * 2; //RGB565
            if (sizeof(frameRGB) - (bufPtr - frameRGB) < bw.buffSize)
            {
                frameTruncated = true;
                OutRGBBufferWrapper bw;
                lastOutputsRGBBufs.push_back(bw);
                LOG_WARN << "rgb buffer truncated" << LOG_ENDL;
                continue;
            }
            convertYUV420ToRGB565(*iter, bw.buffer);
            convertYUV420ToRGB565(*iter, bw.buffer);
            lastOutputsRGBBufs.push_back(bw);
            bufPtr += bw.buffSize;
            frameRGBSize += bw.buffSize;
        }
    }
            lastOutputsRGBBufs.push_back(bw);
            bufPtr += bw.buffSize;
            frameRGBSize += bw.buffSize;
        }
    }
private:
    bool convertYUV420ToRGB565(const PLBG_Output& out, uint8_t* rgbBuff)
    {
        int src_height = out.rectInOriginFrame.rect.height();
        int src_width = out.rectInOriginFrame.rect.width();
        const uint8* src_y = (const uint8*)(out.croppedData);
        const uint8* src_u = (const uint8*)(src_y + (src_height * src_width));
        const uint8* src_v = (const uint8*)(src_u + (src_height * src_width / 4));
    bool convertYUV420ToRGB565(const PLBG_Output& out, uint8_t* rgbBuff)
    {
        int src_height = out.rectInOriginFrame.rect.height();
        int src_width = out.rectInOriginFrame.rect.width();
        const uint8* src_y = (const uint8*)(out.croppedData);
        const uint8* src_u = (const uint8*)(src_y + (src_height * src_width));
        const uint8* src_v = (const uint8*)(src_u + (src_height * src_width / 4));
        if (out.originframe->type == MB_Frame::MBFT_YUV420)
        {
            libyuv::I420ToRGB565(src_y, src_width,
                                 src_v, MH_SUBSAMPLE1(src_width, 2),
                                 src_u, MH_SUBSAMPLE1(src_width, 2),
                                 rgbBuff, 2 * src_width,
                                 src_width, src_height);
        }
        else if (out.originframe->type == MB_Frame::MBFT_NV12)
        {
            libyuv::NV12ToRGB565(src_y, src_width,
                                 src_u, src_width,
                                 rgbBuff, 2 * src_width,
                                 src_width, src_height);
        }
        else
            return false;
        if (out.originframe->type == MB_Frame::MBFT_YUV420)
        {
            libyuv::I420ToRGB565(src_y, src_width,
                                 src_v, MH_SUBSAMPLE1(src_width, 2),
                                 src_u, MH_SUBSAMPLE1(src_width, 2),
                                 rgbBuff, 2 * src_width,
                                 src_width, src_height);
        }
        else if (out.originframe->type == MB_Frame::MBFT_NV12)
        {
            libyuv::NV12ToRGB565(src_y, src_width,
                                 src_u, src_width,
                                 rgbBuff, 2 * src_width,
                                 src_width, src_height);
        }
        else
            return false;
        //{
        //    static size_t f = 0;
        //    char fname[50];
        //    sprintf(fname, "/sdcard/face-%u-w%u-h%u.rgb", ++f, src_width, src_height);
        //    FILE *pFile = fopen(fname, "wb");
        //    fwrite(rgbBuff, 1, src_height * src_width * 2, pFile);
        //    fclose(pFile);
        //    if (f > 20)exit(0);
        //}
        return true;
    }
        //{
        //    static size_t f = 0;
        //    char fname[50];
        //    sprintf(fname, "/sdcard/face-%u-w%u-h%u.rgb", ++f, src_width, src_height);
        //    FILE *pFile = fopen(fname, "wb");
        //    fwrite(rgbBuff, 1, src_height * src_width * 2, pFile);
        //    fclose(pFile);
        //    if (f > 20)exit(0);
        //}
        return true;
    }
};
FaceCacheForPLBG::FaceCacheForPLBG() : _ctx(new FcPmBreackerContextPLBG)
@@ -155,118 +155,118 @@
FaceCacheForPLBG::~FaceCacheForPLBG()
{
    delete (FcPmBreackerContextPLBG*)_ctx;
    delete (FcPmBreackerContextPLBG*)_ctx;
}
// returns count of face
int FaceCacheForPLBG::cachePm(const PipeMaterial& pm)
{
    FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
    ctx.reset();
    FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
    ctx.reset();
    plbg_output_vec_t* plbgOut = (plbg_output_vec_t*)pm.buffer;
    if (plbgOut->size() == 0)
        return 0;
    plbg_output_vec_t* plbgOut = (plbg_output_vec_t*)pm.buffer;
    if (plbgOut->size() == 0)
        return 0;
    ctx.lastOutputs = *plbgOut;
    ctx.copy_data();
    ctx.convert_data();
    ctx.lastOutputs = *plbgOut;
    ctx.copy_data();
    ctx.convert_data();
    return  ctx.lastOutputs.size();
    return  ctx.lastOutputs.size();
}
size_t FaceCacheForPLBG::getFaceCount(const PipeMaterial& pm) const
{
    plbg_output_vec_t* plbgOut = (plbg_output_vec_t*)pm.buffer;
    return plbgOut->size();
    plbg_output_vec_t* plbgOut = (plbg_output_vec_t*)pm.buffer;
    return plbgOut->size();
}
bool FaceCacheForPLBG::getFaceListPb(uint8_t* buffer, size_t& buffMaxSize)
{
    FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
    if (ctx.frameTruncated)
    {
        LOG_WARN << "ctx buffer truncated" << LOG_ENDL;
        return false;
    }
    FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
    if (ctx.frameTruncated)
    {
        LOG_WARN << "ctx buffer truncated" << LOG_ENDL;
        return false;
    }
    PbFaceList pbFaceList;
    pbFaceList.set_magic(pbFaceList.magic());
    pbFaceList.set_image_count(ctx.lastOutputs.size());
    pbFaceList.set_src_width(0);
    pbFaceList.set_src_height(0);
    PbFaceList pbFaceList;
    pbFaceList.set_magic(pbFaceList.magic());
    pbFaceList.set_image_count(ctx.lastOutputs.size());
    pbFaceList.set_src_width(0);
    pbFaceList.set_src_height(0);
    for (int i = 0; i < ctx.lastOutputs.size(); i++)
    {
        PbFaceList_FaceListImage &pbFaceListImage(*(pbFaceList.add_images()));
        pbFaceListImage.set_idx(i);
        pbFaceListImage.set_st_track_id((int)(int64_t)(ctx.lastOutputs[i].rectInOriginFrame.userData));
        pbFaceListImage.set_size(ctx.lastOutputs[i].croppedDataSize);
        pbFaceListImage.set_type(PbFaceList_FaceListImage_ImageType_MBFT_NV12);
        pbFaceListImage.set_width(ctx.lastOutputs[i].rectInOriginFrame.rect.width());
        pbFaceListImage.set_height(ctx.lastOutputs[i].rectInOriginFrame.rect.height());
        pbFaceListImage.set_top_left_x(ctx.lastOutputs[i].rectInOriginFrame.rect.leftTop.X);
        pbFaceListImage.set_top_left_y(ctx.lastOutputs[i].rectInOriginFrame.rect.leftTop.Y);
    for (int i = 0; i < ctx.lastOutputs.size(); i++)
    {
        PbFaceList_FaceListImage &pbFaceListImage(*(pbFaceList.add_images()));
        pbFaceListImage.set_idx(i);
        pbFaceListImage.set_st_track_id((int)(int64_t)(ctx.lastOutputs[i].rectInOriginFrame.userData));
        pbFaceListImage.set_size(ctx.lastOutputs[i].croppedDataSize);
        pbFaceListImage.set_type(PbFaceList_FaceListImage_ImageType_MBFT_NV12);
        pbFaceListImage.set_width(ctx.lastOutputs[i].rectInOriginFrame.rect.width());
        pbFaceListImage.set_height(ctx.lastOutputs[i].rectInOriginFrame.rect.height());
        pbFaceListImage.set_top_left_x(ctx.lastOutputs[i].rectInOriginFrame.rect.leftTop.X);
        pbFaceListImage.set_top_left_y(ctx.lastOutputs[i].rectInOriginFrame.rect.leftTop.Y);
        pbFaceListImage.add_img(ctx.lastOutputs[i].croppedData, ctx.lastOutputs[i].croppedDataSize);
        pbFaceListImage.add_img(ctx.lastOutputs[i].croppedData, ctx.lastOutputs[i].croppedDataSize);
        //LOGP(ERROR, "bg output=%f", ctx.lastOutputs[i].score);
        //LOGP(ERROR, "bg output=%f", ctx.lastOutputs[i].score);
        //{
        //    static size_t f = 0;
        //    char fname[50];
        //    sprintf(fname, "/sdcard/face-%u-w%u-h%u.yuv420", ++f, ctx.lastOutputs[i].rectInOriginFrame.width(), ctx.lastOutputs[i].rectInOriginFrame.height());
        //    FILE *pFile = fopen(fname, "wb");
        //    fwrite(ctx.lastOutputs[i].croppedData, 1, ctx.lastOutputs[i].croppedDataSize, pFile);
        //    fclose(pFile);
        //    if (f > 10)exit(0);
        //}
    }
        //{
        //    static size_t f = 0;
        //    char fname[50];
        //    sprintf(fname, "/sdcard/face-%u-w%u-h%u.yuv420", ++f, ctx.lastOutputs[i].rectInOriginFrame.width(), ctx.lastOutputs[i].rectInOriginFrame.height());
        //    FILE *pFile = fopen(fname, "wb");
        //    fwrite(ctx.lastOutputs[i].croppedData, 1, ctx.lastOutputs[i].croppedDataSize, pFile);
        //    fclose(pFile);
        //    if (f > 10)exit(0);
        //}
    }
    size_t s = pbFaceList.ByteSize();
    buffMaxSize = std::min(s, buffMaxSize);
    pbFaceList.SerializeToArray(buffer, buffMaxSize);
    size_t s = pbFaceList.ByteSize();
    buffMaxSize = std::min(s, buffMaxSize);
    pbFaceList.SerializeToArray(buffer, buffMaxSize);
    return buffMaxSize > 0;
    return buffMaxSize > 0;
}
bool FaceCacheForPLBG::getFaceListImage(std::vector<NativeImgIdx>& imgIdxes, uint8_t* buffImg, size_t& buffImgMaxSize)
{
    FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
    if (ctx.frameTruncated)
    {
        LOG_WARN << "ctx buffer truncated" << LOG_ENDL;
        return false;
    }
    if (buffImgMaxSize < ctx.frameRGBSize)
    {
        LOG_WARN << "buffImg truncated" << LOG_ENDL;
        return false;
    }
    FcPmBreackerContextPLBG& ctx(*(FcPmBreackerContextPLBG*)_ctx);
    if (ctx.frameTruncated)
    {
        LOG_WARN << "ctx buffer truncated" << LOG_ENDL;
        return false;
    }
    if (buffImgMaxSize < ctx.frameRGBSize)
    {
        LOG_WARN << "buffImg truncated" << LOG_ENDL;
        return false;
    }
    imgIdxes.clear();
    size_t totalSize = 0;
    imgIdxes.clear();
    size_t totalSize = 0;
    for (int i = 0; i < ctx.lastOutputs.size(); i++)
    {
        NativeImgIdx imgidx;
        imgidx.st_track_id =  (int)(int64_t)(ctx.lastOutputs[i].rectInOriginFrame.userData);
        imgidx.offset = ctx.lastOutputsRGBBufs[i].buffer - ctx.frameRGB;
        imgidx.size = ctx.lastOutputsRGBBufs[i].buffSize;
        imgidx.type = MB_Frame::MBFT_RGB565;
        imgidx.width = ctx.lastOutputs[i].rectInOriginFrame.rect.width();
        imgidx.height = ctx.lastOutputs[i].rectInOriginFrame.rect.height();
    for (int i = 0; i < ctx.lastOutputs.size(); i++)
    {
        NativeImgIdx imgidx;
        imgidx.st_track_id =  (int)(int64_t)(ctx.lastOutputs[i].rectInOriginFrame.userData);
        imgidx.offset = ctx.lastOutputsRGBBufs[i].buffer - ctx.frameRGB;
        imgidx.size = ctx.lastOutputsRGBBufs[i].buffSize;
        imgidx.type = MB_Frame::MBFT_RGB565;
        imgidx.width = ctx.lastOutputs[i].rectInOriginFrame.rect.width();
        imgidx.height = ctx.lastOutputs[i].rectInOriginFrame.rect.height();
        imgIdxes.push_back(imgidx);
        totalSize += ctx.lastOutputsRGBBufs[i].buffSize;
    }
        imgIdxes.push_back(imgidx);
        totalSize += ctx.lastOutputsRGBBufs[i].buffSize;
    }
    memcpy(buffImg, ctx.frameRGB, totalSize);
    buffImgMaxSize = totalSize;
    memcpy(buffImg, ctx.frameRGB, totalSize);
    buffImgMaxSize = totalSize;
    return  true;
    return  true;
}
VisitFace/RtspNativeCodec/app/src/main/cpp/cpu_sched_test.cpp
@@ -8,15 +8,22 @@
#include<sys/sysinfo.h>
#include<unistd.h>
// setup the cpu set of this program to run on
void set_cpu(int id)
// setup the cpu set of this program (task) to run on
void set_task_cpu(int id)
{
    int num = sysconf(_SC_NPROCESSORS_CONF);
    cpu_set_t mask;
    CPU_ZERO(&mask);
    if (sched_getaffinity(0, sizeof(mask), &mask) == -1)
    {
        fprintf(stderr, "warning: could not get CPU affinity/n");
    }
    for(int i= 0; i< num; i++)
    {
        LOG_ERROR << "cpu " << i <<": " << CPU_ISSET(i, &mask) <<LOG_ENDL;
    }
    CPU_SET(id, &mask);
    if (sched_setaffinity(0, sizeof(mask), &mask) == -1)
@@ -27,5 +34,12 @@
void cpu_sched()
{
//set_cpu(0x0003);
    //set_task_cpu(0x0003);
}
void pthread_cpu_sched(const pthread_attr_t *attr)
{
    cpu_set_t mask;
    CPU_ZERO(&mask);
}
VisitFace/RtspNativeCodec/app/src/main/cpp/cpu_sched_test.h
@@ -1,6 +1,10 @@
#ifndef _CPU_SCHED_TEST_H_
#define _CPU_SCHED_TEST_H_
#include <pthread.h>
void cpu_sched();
void pthread_cpu_sched(const pthread_attr_t *attr);
#endif