miaoweijun1976

miaoweijun1976

0个粉丝

2

问答

0

专栏

1

资料

miaoweijun1976  发布于  2018-05-15 10:56:07
采纳率 0%
2个问答
3893

海思平台编译libfaac

   
root@ubuntu:/mnt/hgfs/3520shared/Hi3516A_SDK_V1.0.3.0/faac-1.28# ./configure --host=arm-hisiv300-linux --enable-shared  --prefix=$PWD/installed
root@ubuntu:/mnt/hgfs/3520shared/Hi3516A_SDK_V1.0.3.0/faac-1.28# make && make install
编译好的库放在当前目录的installed下面

最终会在指定安装目录获得如下动态及静态库:
libfaac.a                          
libfaac.la                        
libfaac.so                        
libfaac.so.0                       
libfaac.so.0.0.0   
将获得的动态链接库放入开发板/usr/lib目录即可

虚拟机上编译也要加上连接选项
LIB_FLAG = $(HISDK_LIB) -lpthread -lm -lrt -L$(BASE_DIR)/libfaac -lfaac

class AudioProcess {
public:
        AudioProcess (void)
                {
                       
                        nSampleRate = RATE;  // 采样率
                        nChannels = CHANNELS;         // 声道数
                        nPCMBitSize = SIZE;
                        nInputSamples = 0;
                        nMaxOutputBytes = 0;
                        AACDecoderInitFlag = 0;
                        DecoderHandle = 0;
                        ADTSFrameInBuf = NULL;
                        PCMData = NULL;
                        ppBuffer = NULL;
                       
                }// var init

                ~AudioProcess(void)
                {
               
                }// var init
       
private:
        ULONG nInputSamples ;
        ULONG nMaxOutputBytes ;
        faacEncHandle hEncoder;
        faacEncConfigurationPtr pConfiguration;
        BYTE* pbAACBuffer;
        int nRet;
public:
        int OutAACLength;
       
        ULONG nSampleRate;  // 采样率
        UINT nChannels;         // 声道数
        UINT nPCMBitSize;
        unsigned char* ppBuffer;
        unsigned long pSizeOfDecoderSpecificInfo;
        int nBytesRead;
        int nPCMBufferSize;
        int nAACBufferSize;
        BYTE* pbPCMBuffer;
       
        BYTE* OutAACBuffer;
public:       
        int AACEncoderInit();
        int AACEncoding();
}

int AudioProcess ::AACEncoderInit()
{
                   hEncoder = faacEncOpen(nSampleRate, nChannels, &nInputSamples, &nMaxOutputBytes);
            if(hEncoder == NULL)
            {
                printf("[ERROR] Failed to call faacEncOpen()\n");
                return -1;
            }
            printf("nInputSamples = %d\n",nInputSamples);
            nPCMBufferSize = nInputSamples * nPCMBitSize / 8;
            pbPCMBuffer = new BYTE [nPCMBufferSize];
            pbAACBuffer = new BYTE [nMaxOutputBytes];

            //  Get current encoding configuration
            pConfiguration = faacEncGetCurrentConfiguration(hEncoder);
            pConfiguration->inputFormat = FAAC_INPUT_16BIT;//_16BIT;
                pConfiguration->mpegVersion = MPEG4;
                 pConfiguration->version = MPEG4;  // 1
                 pConfiguration->outputFormat =1;// ADTS_STREAM;
       
                  pConfiguration->aacObjectType = 2;//LOW;
                  pConfiguration->useTns = 0;//DEFAULT_TNS;
                   pConfiguration->shortctl =  0;//SHORTCTL_NORMAL;
                  pConfiguration->allowMidside = 1 ;
          
            //  Set encoding configuration
            nRet = faacEncSetConfiguration(hEncoder, pConfiguration);
            faacEncGetDecoderSpecificInfo(hEncoder,&(ppBuffer), &(pSizeOfDecoderSpecificInfo));
}

int AudioProcess ::AACEncoding()
{
       
       
        // 输入样本数,用实际读入字节数计算,一般只有读到文件尾时才不是                                //nPCMBufferSize/(nPCMBitSize/8);
                 nBytesRead = length;
                nInputSamples = nBytesRead / (nPCMBitSize / 8);
                printf("nInputSamples = %d\n",nInputSamples);
               
        //Encode
        nRet = faacEncEncode(hEncoder, (int*) pbPCMBuffer, nInputSamples, pbAACBuffer,nMaxOutputBytes);
                 OutAACBuffer = pbAACBuffer;
                 OutAACLength = nRet;
        
        return nRet;
}

void AudioProcess::AACEncoderDestroy()
{       
                nRet = faacEncClose(hEncoder);
                delete[] pbPCMBuffer;
                delete[] pbAACBuffer;
                       
}


如果是3520,可能会提示这个错误:ambiguates old declaration 'const char* strcasestr(const char*, const char*)'
从123行开始修改此文件mpeg4ip.h,到129行结束。
修改前:
#ifdef __cplusplus
extern "C" {
#endif
char *strcasestr(const char *haystack, const char *needle);
#ifdef __cplusplus
}
#endif

修改后:
#ifdef __cplusplus
extern "C++" {
#endif
const char *strcasestr(const char *haystack, const char *needle);
#ifdef __cplusplus
}
#endif



如果生成库编译调用时候提示缺少


//编译出来的库拷贝到板子的/usr/lib目录下
我来回答
回答2个
时间排序
认可量排序

mom

0个粉丝

4

问答

0

专栏

0

资料

mom 2018-08-21 17:20:03
认可0
感谢楼主分享!!!

fpnbt

0个粉丝

6

问答

0

专栏

0

资料

fpnbt 2018-08-25 11:11:19
认可0
感谢楼主分享!!!
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区