From 63e46077a3e2c8a448fd909f941775398e490d06 Mon Sep 17 00:00:00 2001 From: "henrik.lundin@webrtc.org" Date: Mon, 16 Jun 2014 08:02:25 +0000 Subject: [PATCH] Add thread annotations to parts of ACMGenericCodec This change adds annotations to all member variables that could be annotated without acquiring any new locks, or changing the lock structure in any other way. BUG=3041 R=kwiberg@webrtc.org Review URL: https://webrtc-codereview.appspot.com/18539004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@6441 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../modules/audio_coding/main/acm2/acm_g722.h | 4 +- .../main/acm2/acm_generic_codec.cc | 6 +-- .../main/acm2/acm_generic_codec.h | 47 +++++++++++-------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/webrtc/modules/audio_coding/main/acm2/acm_g722.h b/webrtc/modules/audio_coding/main/acm2/acm_g722.h index 7216a574af..6197a9d93a 100644 --- a/webrtc/modules/audio_coding/main/acm2/acm_g722.h +++ b/webrtc/modules/audio_coding/main/acm2/acm_g722.h @@ -12,6 +12,7 @@ #define WEBRTC_MODULES_AUDIO_CODING_MAIN_ACM2_ACM_G722_H_ #include "webrtc/modules/audio_coding/main/acm2/acm_generic_codec.h" +#include "webrtc/system_wrappers/interface/thread_annotations.h" typedef struct WebRtcG722EncInst G722EncInst; typedef struct WebRtcG722DecInst G722DecInst; @@ -40,7 +41,8 @@ class ACMG722 : public ACMGenericCodec { int32_t Add10MsDataSafe(const uint32_t timestamp, const int16_t* data, const uint16_t length_smpl, - const uint8_t audio_channel); + const uint8_t audio_channel) + EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); void DestructEncoderSafe(); diff --git a/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc b/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc index 5043717ced..a4808c0e38 100644 --- a/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc +++ b/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.cc @@ -26,7 +26,7 @@ namespace acm2 { // Enum for CNG enum { kMaxPLCParamsCNG = WEBRTC_CNG_MAX_LPC_ORDER, - kNewCNGNumPLCParams = 8 + kNewCNGNumLPCParams = 8 }; // Interval for sending new CNG parameters (SID frames) is 100 msec. @@ -56,7 +56,7 @@ ACMGenericCodec::ACMGenericCodec() vad_mode_(VADNormal), dtx_enabled_(false), ptr_dtx_inst_(NULL), - num_lpc_params_(kNewCNGNumPLCParams), + num_lpc_params_(kNewCNGNumLPCParams), sent_cn_previous_(false), prev_frame_cng_(0), has_internal_fec_(false), @@ -547,7 +547,7 @@ void ACMGenericCodec::DestructEncoder() { WebRtcCng_FreeEnc(ptr_dtx_inst_); ptr_dtx_inst_ = NULL; } - num_lpc_params_ = kNewCNGNumPLCParams; + num_lpc_params_ = kNewCNGNumLPCParams; DestructEncoderSafe(); } diff --git a/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.h b/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.h index 7e408de4a7..fa21ca015a 100644 --- a/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.h +++ b/webrtc/modules/audio_coding/main/acm2/acm_generic_codec.h @@ -16,6 +16,7 @@ #include "webrtc/modules/audio_coding/neteq/interface/neteq.h" #include "webrtc/modules/audio_coding/neteq/interface/audio_decoder.h" #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h" +#include "webrtc/system_wrappers/interface/thread_annotations.h" #include "webrtc/system_wrappers/interface/trace.h" #define MAX_FRAME_SIZE_10MSEC 6 @@ -616,7 +617,8 @@ class ACMGenericCodec { virtual int32_t Add10MsDataSafe(const uint32_t timestamp, const int16_t* data, const uint16_t length, - const uint8_t audio_channel); + const uint8_t audio_channel) + EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // See EncoderParam() for the description of function, input(s)/output(s) @@ -628,14 +630,15 @@ class ACMGenericCodec { // See ResetEncoder() for the description of function, input(s)/output(s) // and return value. // - int16_t ResetEncoderSafe(); + int16_t ResetEncoderSafe() EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // See InitEncoder() for the description of function, input(s)/output(s) // and return value. // int16_t InitEncoderSafe(WebRtcACMCodecParams* codec_params, - bool force_initialization); + bool force_initialization) + EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // See InitDecoder() for the description of function, input(s)/output(s) @@ -681,7 +684,8 @@ class ACMGenericCodec { // See SetVAD() for the description of function, input(s)/output(s) and // return value. // - int16_t SetVADSafe(bool* enable_dtx, bool* enable_vad, ACMVADMode* mode); + int16_t SetVADSafe(bool* enable_dtx, bool* enable_vad, ACMVADMode* mode) + EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // See ReplaceInternalDTX() for the description of function, input and @@ -718,7 +722,8 @@ class ACMGenericCodec { // -1 if failed, // 0 if succeeded. // - int16_t EnableVAD(ACMVADMode mode); + int16_t EnableVAD(ACMVADMode mode) + EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // int16_t DisableVAD() @@ -728,7 +733,7 @@ class ACMGenericCodec { // -1 if failed, // 0 if succeeded. // - int16_t DisableVAD(); + int16_t DisableVAD() EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // int16_t EnableDTX() @@ -739,7 +744,7 @@ class ACMGenericCodec { // -1 if failed, // 0 if succeeded. // - virtual int16_t EnableDTX(); + virtual int16_t EnableDTX() EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // int16_t DisableDTX() @@ -750,7 +755,7 @@ class ACMGenericCodec { // -1 if failed, // 0 if succeeded. // - virtual int16_t DisableDTX(); + virtual int16_t DisableDTX() EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // int16_t InternalEncode() @@ -878,7 +883,8 @@ class ACMGenericCodec { // int16_t ProcessFrameVADDTX(uint8_t* bitstream, int16_t* bitstream_len_byte, - int16_t* samples_processed); + int16_t* samples_processed) + EXCLUSIVE_LOCKS_REQUIRED(codec_wrapper_lock_); /////////////////////////////////////////////////////////////////////////// // CurrentRate() @@ -925,19 +931,20 @@ class ACMGenericCodec { // True if the encoder instance initialized bool encoder_initialized_; - bool registered_in_neteq_; + const bool registered_in_neteq_; // TODO(henrik.lundin) Remove? // VAD/DTX bool has_internal_dtx_; - WebRtcVadInst* ptr_vad_inst_; - bool vad_enabled_; - ACMVADMode vad_mode_; - int16_t vad_label_[MAX_FRAME_SIZE_10MSEC]; - bool dtx_enabled_; - WebRtcCngEncInst* ptr_dtx_inst_; - uint8_t num_lpc_params_; - bool sent_cn_previous_; - int16_t prev_frame_cng_; + WebRtcVadInst* ptr_vad_inst_ GUARDED_BY(codec_wrapper_lock_); + bool vad_enabled_ GUARDED_BY(codec_wrapper_lock_); + ACMVADMode vad_mode_ GUARDED_BY(codec_wrapper_lock_); + int16_t vad_label_[MAX_FRAME_SIZE_10MSEC] GUARDED_BY(codec_wrapper_lock_); + bool dtx_enabled_ GUARDED_BY(codec_wrapper_lock_); + WebRtcCngEncInst* ptr_dtx_inst_ GUARDED_BY(codec_wrapper_lock_); + uint8_t num_lpc_params_ // TODO(henrik.lundin) Delete and + GUARDED_BY(codec_wrapper_lock_); // replace with kNewCNGNumLPCParams. + bool sent_cn_previous_ GUARDED_BY(codec_wrapper_lock_); + int16_t prev_frame_cng_ GUARDED_BY(codec_wrapper_lock_); // FEC. bool has_internal_fec_; @@ -952,7 +959,7 @@ class ACMGenericCodec { // such as buffers and state variables. RWLockWrapper& codec_wrapper_lock_; - uint32_t last_timestamp_; + uint32_t last_timestamp_ GUARDED_BY(codec_wrapper_lock_); uint32_t unique_id_; };