WASAPI implementation in PJSip

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



And do you think that PortAudio will be able to do source rate conversions?
Because on Windows 8.1, when initializing the WASAPI, I can only get a IEEE
Floating Point 32-bit.

Thanks for the help.
On Mar 26, 2014 10:15 PM, "Bill Gardner" <billg at wavearts.com> wrote:

>  I've written a WASAPI implementation for pjsip as part of VQE echo
> canceller (GPL code):
>
> http://wavearts.com/licensing/#vqe
>
> It hasn't been ported to mobile platforms (the echo canceller is probably
> too CPU intensive for mobile).  It may be easier to get portaudio to
> compile...?
>
> Bill
>
> On 3/26/2014 5:40 PM, Nuno Centeio wrote:
>
> I've tried that. WASAPI implementation does not compile when targeting a
> Windows Store App.
>
> In PortAudio mailing list, I found out that the developer of WASAPI
> dissapeared.
>
> I don't know what else to try and/or do.
>
> Thanks
>  On Mar 26, 2014 9:29 PM, "A.Ahland" <a.ahland at gmx.de> wrote:
>
>>  Hi,
>>
>> I would use portaudio, which has WASAPI implemented and which is already
>> in PJSIP. Maybe update it to a newer version.
>>
>> Cheers,
>>
>> Andreas
>>
>>
>> Am 26.03.2014 18:45, schrieb Nuno Centeio:
>>
>> @Bill,
>>
>>  I understand that. But, do you think that the render will only work if
>> the capture is working correctly?
>> I'm capturing and sending to the network but I'm not converting from IEEE
>> Floating Point to PCM16 bits (the sound is not playing well on the
>> destination).
>>
>>  Thanks
>>
>>
>> On 26 March 2014 17:22, Bill Gardner <billg at wavearts.com> wrote:
>>
>>>  You could run one WASAPI thread and service both playback and capture
>>> events using WaitForMultipleObjects. You should implement audio capture for
>>> the obvious reason to make the microphone work, plus not providing pjsip
>>> with capture buffers will cause lots of underflow messages.
>>>
>>> Bill
>>>
>>>
>>> On 3/26/2014 12:48 PM, Nuno Centeio wrote:
>>>
>>> *@Bill,*
>>>
>>>  But the record is not made in the thread that gets the frame (my
>>> WASAPI thread), right? Or do I need to implement my capture engine in order
>>> for the render buffer to be correct?
>>>
>>>  *@Abdelrahman*,
>>>
>>>  I think that the only problem will be the WinSocks. However, I'm not
>>> targeting for ARM devices, where WinSocks does not exist. In x86 and x64
>>> processors there is WinSocks. But, however, I'm already prepared to be
>>> rejected a lot of times :(
>>>
>>>
>>> On 26 March 2014 16:40, Abdelrahman Salah <
>>> abdelrahman.salah.cs at gmail.com> wrote:
>>>
>>>> Dear nuno,
>>>>
>>>> This is a side hint, please bay attention to the dependencies required,
>>>> because most of the dependencies required are not allowed in windows store
>>>> and more than likely it will fail the certificate test.
>>>> So take that into consideration before spending time and effort.
>>>>
>>>> Abdelrahman Salah
>>>> Sent From My Note II
>>>>   On 26 Mar 2014 18:25, "Nuno Centeio" <nuno.r.centeio at gmail.com>
>>>> wrote:
>>>>
>>>>>  Hi guys,
>>>>>
>>>>>  I'm trying to implement the Windows Audio Session API (WASAPI) in
>>>>> order to make PJSip compliant with Windows Store apps.
>>>>>
>>>>>  I think that I'm almost done but I can get the sound correctly (it's
>>>>> just that!).
>>>>>
>>>>>  Here is what I have:
>>>>>
>>>>>  (pb_client is a IAudioRenderClient)
>>>>> hr = strm->pb_client->GetBuffer(frame_to_render, &cur_pb_buf);
>>>>>
>>>>>  pjmedia_frame frame;
>>>>>  void* destBuffer =
>>>>> (void*)malloc(strm->bytes_per_frame*frame_to_render*sizeof(pj_uint16_t));
>>>>>  /* PCM mode */
>>>>> frame.type = PJMEDIA_FRAME_TYPE_AUDIO;
>>>>> frame.size = strm->bytes_per_frame;
>>>>> frame.timestamp.u64 = strm->pb_timestamp.u64;
>>>>> frame.bit_info = 0;
>>>>> frame.buf = destBuffer;
>>>>>
>>>>>  status = (*strm->pb_cb)(strm->user_data, &frame);
>>>>>
>>>>>  /* Because PJSip will give me PCM 16 bits, 2 channels and WASAPI
>>>>> needs
>>>>>    IEEE Floating point 32-bits, 2 channels
>>>>> */
>>>>>  CAudioConverter* conv = new CAudioConverter();
>>>>>  conv->ConvI16ToF32((BYTE*)destBuffer, cur_pb_buf, frame_to_render);
>>>>>
>>>>>  /* Write to the device. */
>>>>> hr = strm->pb_client->ReleaseBuffer(frame_to_render, 0);
>>>>>
>>>>>  While running I have the following prints:
>>>>>  3/26/2014 4:00:01 PM V SIP          - Underflow, buf_cnt=0, will
>>>>> generate 1 frame
>>>>> 3/26/2014 4:00:01 PM V SIP          - Underflow, buf_cnt=0, will
>>>>> generate 1 frame
>>>>> 3/26/2014 4:00:01 PM V SIP          - 698 samples reduced, buf_cnt=6092
>>>>> 3/26/2014 4:00:01 PM V SIP          - Buffer size adjusted from 6790
>>>>> to 6092 (eff_cnt=5760)
>>>>> 3/26/2014 4:00:01 PM V SIP          - Underflow, buf_cnt=0, will
>>>>> generate 1 frame
>>>>> 3/26/2014 4:00:02 PM V SIP          - 320 samples reduced, buf_cnt=6412
>>>>> 3/26/2014 4:00:02 PM V SIP          - Buffer size adjusted from 6732
>>>>> to 6412 (eff_cnt=5760)
>>>>>
>>>>>  Any hints on what I might be doing wrong?
>>>>>
>>>>>  Thanks
>>>>>
>>>>>  _______________________________________________
>>>>> Visit our blog: http://blog.pjsip.org
>>>>>
>>>>> pjsip mailing list
>>>>> pjsip at lists.pjsip.org
>>>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>>>>
>>>>>
>>>> _______________________________________________
>>>> Visit our blog: http://blog.pjsip.org
>>>>
>>>> pjsip mailing list
>>>> pjsip at lists.pjsip.org
>>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>>>
>>>>
>>>
>>>
>>> _______________________________________________
>>> Visit our blog: http://blog.pjsip.org
>>>
>>> pjsip mailing listpjsip at lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>>
>>>
>>>
>>> _______________________________________________
>>> Visit our blog: http://blog.pjsip.org
>>>
>>> pjsip mailing list
>>> pjsip at lists.pjsip.org
>>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>>
>>>
>>
>>
>> _______________________________________________
>> Visit our blog: http://blog.pjsip.org
>>
>> pjsip mailing listpjsip at lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>
>>
>>
>> _______________________________________________
>> Visit our blog: http://blog.pjsip.org
>>
>> pjsip mailing list
>> pjsip at lists.pjsip.org
>> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>>
>>
>
> _______________________________________________
> Visit our blog: http://blog.pjsip.org
>
> pjsip mailing listpjsip at lists.pjsip.orghttp://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
>
>
> _______________________________________________
> Visit our blog: http://blog.pjsip.org
>
> pjsip mailing list
> pjsip at lists.pjsip.org
> http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20140327/4dd722ff/attachment-0001.html>


[Index of Archives]     [Asterisk Users]     [Asterisk App Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [Linux API]
  Powered by Linux