Implement NetEq duration estimation for Opus.
Review URL: https://webrtc-codereview.appspot.com/983004 Patch from Ralph Giles <giles@webrtc.org>. git-svn-id: http://webrtc.googlecode.com/svn/trunk@3314 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
515ef2428c
commit
4275ab1ca0
@ -126,6 +126,21 @@ int16_t WebRtcOpus_DecodeSlave(OpusDecInst* inst, int16_t* encoded,
|
|||||||
int16_t WebRtcOpus_DecodePlc(OpusDecInst* inst, int16_t* decoded,
|
int16_t WebRtcOpus_DecodePlc(OpusDecInst* inst, int16_t* decoded,
|
||||||
int16_t number_of_lost_frames);
|
int16_t number_of_lost_frames);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* WebRtcOpus_DurationEst(...)
|
||||||
|
*
|
||||||
|
* This function calculates the duration of an opus packet.
|
||||||
|
* Input:
|
||||||
|
* - inst : Decoder context
|
||||||
|
* - payload : Encoded data pointer
|
||||||
|
* - payload_length_bytes : Bytes of encoded data
|
||||||
|
*
|
||||||
|
* Return value : The duration of the packet, in samples.
|
||||||
|
*/
|
||||||
|
int WebRtcOpus_DurationEst(OpusDecInst* inst,
|
||||||
|
const uint8_t* payload,
|
||||||
|
int payload_length_bytes);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} // extern "C"
|
} // extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
@ -280,3 +280,21 @@ int16_t WebRtcOpus_DecodePlc(OpusDecInst* inst, int16_t* decoded,
|
|||||||
* number_of_lost_frames corresponds to. */
|
* number_of_lost_frames corresponds to. */
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int WebRtcOpus_DurationEst(OpusDecInst* inst,
|
||||||
|
const uint8_t* payload,
|
||||||
|
int payload_length_bytes)
|
||||||
|
{
|
||||||
|
int frames, samples;
|
||||||
|
frames = opus_packet_get_nb_frames(payload, payload_length_bytes);
|
||||||
|
if (frames < 0) {
|
||||||
|
/* Invalid payload data. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
samples = frames * opus_packet_get_samples_per_frame(payload, 48000);
|
||||||
|
if (samples < 120 || samples > 5760) {
|
||||||
|
/* Invalid payload duration. */
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return samples;
|
||||||
|
}
|
||||||
|
@ -363,7 +363,7 @@
|
|||||||
inst.funcGetMDinfo=NULL; \
|
inst.funcGetMDinfo=NULL; \
|
||||||
inst.funcGetPitch=NULL; \
|
inst.funcGetPitch=NULL; \
|
||||||
inst.funcUpdBWEst=NULL; \
|
inst.funcUpdBWEst=NULL; \
|
||||||
inst.funcDurationEst=NULL; \
|
inst.funcDurationEst=(WebRtcNetEQ_FuncDurationEst)WebRtcOpus_DurationEst; \
|
||||||
inst.funcGetErrorCode=NULL;
|
inst.funcGetErrorCode=NULL;
|
||||||
|
|
||||||
#define SET_OPUSSLAVE_FUNCTIONS(inst) \
|
#define SET_OPUSSLAVE_FUNCTIONS(inst) \
|
||||||
@ -375,7 +375,7 @@
|
|||||||
inst.funcGetMDinfo=NULL; \
|
inst.funcGetMDinfo=NULL; \
|
||||||
inst.funcGetPitch=NULL; \
|
inst.funcGetPitch=NULL; \
|
||||||
inst.funcUpdBWEst=NULL; \
|
inst.funcUpdBWEst=NULL; \
|
||||||
inst.funcDurationEst=NULL; \
|
inst.funcDurationEst=(WebRtcNetEQ_FuncDurationEst)WebRtcOpus_DurationEst; \
|
||||||
inst.funcGetErrorCode=NULL;
|
inst.funcGetErrorCode=NULL;
|
||||||
|
|
||||||
#define SET_SPEEX_FUNCTIONS(inst) \
|
#define SET_SPEEX_FUNCTIONS(inst) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user