git-svn-id: http://webrtc.googlecode.com/svn/trunk@4 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
188
modules/audio_coding/main/test/EncodeToFileTest.cpp
Normal file
188
modules/audio_coding/main/test/EncodeToFileTest.cpp
Normal file
@@ -0,0 +1,188 @@
|
||||
/*
|
||||
* Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "EncodeToFileTest.h"
|
||||
#include "audio_coding_module.h"
|
||||
#include "common_types.h"
|
||||
|
||||
#ifdef WIN32
|
||||
# include <Winsock2.h>
|
||||
#else
|
||||
# include <arpa/inet.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
TestPacketization::TestPacketization(RTPStream *rtpStream, WebRtc_UWord16 frequency)
|
||||
:
|
||||
_frequency(frequency),
|
||||
_seqNo(0)
|
||||
{
|
||||
_rtpStream = rtpStream;
|
||||
}
|
||||
|
||||
TestPacketization::~TestPacketization()
|
||||
{
|
||||
}
|
||||
|
||||
WebRtc_Word32 TestPacketization::SendData(
|
||||
const FrameType /* frameType */,
|
||||
const WebRtc_UWord8 payloadType,
|
||||
const WebRtc_UWord32 timeStamp,
|
||||
const WebRtc_UWord8* payloadData,
|
||||
const WebRtc_UWord16 payloadSize,
|
||||
const RTPFragmentationHeader* /* fragmentation */)
|
||||
{
|
||||
_rtpStream->Write(payloadType, timeStamp, _seqNo++, payloadData, payloadSize, _frequency);
|
||||
//delete [] payloadData;
|
||||
return 1;
|
||||
}
|
||||
|
||||
Sender::Sender()
|
||||
:
|
||||
_acm(NULL),
|
||||
//_payloadData(NULL),
|
||||
_payloadSize(0),
|
||||
_timeStamp(0)
|
||||
{
|
||||
}
|
||||
|
||||
void Sender::Setup(AudioCodingModule *acm, RTPStream *rtpStream)
|
||||
{
|
||||
acm->InitializeSender();
|
||||
struct CodecInst sendCodec;
|
||||
int noOfCodecs = acm->NumberOfCodecs();
|
||||
int codecNo;
|
||||
|
||||
if (testMode == 1)
|
||||
{
|
||||
//set the codec, input file, and parameters for the current test
|
||||
codecNo = codeId;
|
||||
//use same input file for now
|
||||
char fileName[] = "./modules/audio_coding/main/test/testfile32kHz.pcm";
|
||||
_pcmFile.Open(fileName, 32000, "rb");
|
||||
}
|
||||
else if (testMode == 0)
|
||||
{
|
||||
//set the codec, input file, and parameters for the current test
|
||||
codecNo = codeId;
|
||||
acm->Codec(codecNo, sendCodec);
|
||||
//use same input file for now
|
||||
char fileName[] = "./modules/audio_coding/main/test/testfile32kHz.pcm";
|
||||
_pcmFile.Open(fileName, 32000, "rb");
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("List of supported codec.\n");
|
||||
for(int n = 0; n < noOfCodecs; n++)
|
||||
{
|
||||
acm->Codec(n, sendCodec);
|
||||
printf("%d %s\n", n, sendCodec.plname);
|
||||
}
|
||||
printf("Choose your codec:");
|
||||
|
||||
scanf("%d", &codecNo);
|
||||
char fileName[] = "./modules/audio_coding/main/test/testfile32kHz.pcm";
|
||||
_pcmFile.Open(fileName, 32000, "rb");
|
||||
}
|
||||
|
||||
acm->Codec(codecNo, sendCodec);
|
||||
acm->RegisterSendCodec(sendCodec);
|
||||
_packetization = new TestPacketization(rtpStream, sendCodec.plfreq);
|
||||
if(acm->RegisterTransportCallback(_packetization) < 0)
|
||||
{
|
||||
printf("Registering Transport Callback failed, for run: codecId: %d: --\n",
|
||||
codeId);
|
||||
}
|
||||
|
||||
_acm = acm;
|
||||
}
|
||||
|
||||
void Sender::Teardown()
|
||||
{
|
||||
_pcmFile.Close();
|
||||
delete _packetization;
|
||||
}
|
||||
|
||||
bool Sender::Add10MsData()
|
||||
{
|
||||
if (!_pcmFile.EndOfFile())
|
||||
{
|
||||
_pcmFile.Read10MsData(_audioFrame);
|
||||
WebRtc_Word32 ok = _acm->Add10MsData(_audioFrame);
|
||||
if (ok != 0)
|
||||
{
|
||||
printf("Error calling Add10MsData: for run: codecId: %d\n",
|
||||
codeId);
|
||||
exit(1);
|
||||
}
|
||||
//_audioFrame._timeStamp += _pcmFile.PayloadLength10Ms();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Sender::Process()
|
||||
{
|
||||
WebRtc_Word32 ok = _acm->Process();
|
||||
if (ok < 0)
|
||||
{
|
||||
printf("Error calling Add10MsData: for run: codecId: %d\n",
|
||||
codeId);
|
||||
exit(1);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Sender::Run()
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
if (!Add10MsData())
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (!Process()) // This could be done in a processing thread
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EncodeToFileTest::EncodeToFileTest()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void EncodeToFileTest::Perform(int fileType, int codeId, int* codePars, int testMode)
|
||||
{
|
||||
AudioCodingModule *acm = AudioCodingModule::Create(0);
|
||||
RTPFile rtpFile;
|
||||
char fileName[] = "outFile.rtp";
|
||||
rtpFile.Open(fileName, "wb+");
|
||||
rtpFile.WriteHeader();
|
||||
|
||||
//for auto_test and logging
|
||||
_sender.testMode = testMode;
|
||||
_sender.codeId = codeId;
|
||||
|
||||
_sender.Setup(acm, &rtpFile);
|
||||
struct CodecInst sendCodecInst;
|
||||
if(acm->SendCodec(sendCodecInst) >= 0)
|
||||
{
|
||||
_sender.Run();
|
||||
}
|
||||
_sender.Teardown();
|
||||
rtpFile.Close();
|
||||
AudioCodingModule::Destroy(acm);
|
||||
}
|
Reference in New Issue
Block a user