Bug 1047442: reacquire _sendCritSect within webrtc Encoded() callback (upstream patch) r=pkerr

This commit is contained in:
Randell Jesup 2014-08-01 17:27:50 -04:00
Родитель 2ae10d87c4
Коммит acbb3b1f28
3 изменённых файлов: 14 добавлений и 0 удалений

Просмотреть файл

@ -176,6 +176,7 @@ VCMGenericEncoder::InternalSource() const
VCMEncodedFrameCallback::VCMEncodedFrameCallback(
EncodedImageCallback* post_encode_callback):
_sendCallback(),
_critSect(NULL),
_mediaOpt(NULL),
_payloadType(0),
_internalSource(false),
@ -196,6 +197,12 @@ VCMEncodedFrameCallback::~VCMEncodedFrameCallback()
#endif
}
void
VCMEncodedFrameCallback::SetCritSect(CriticalSectionWrapper* critSect)
{
_critSect = critSect;
}
int32_t
VCMEncodedFrameCallback::SetTransportCallback(VCMPacketizationCallback* transport)
{
@ -209,6 +216,9 @@ VCMEncodedFrameCallback::Encoded(
const CodecSpecificInfo* codecSpecificInfo,
const RTPFragmentationHeader* fragmentationHeader)
{
assert(_critSect);
CriticalSectionScoped cs(_critSect);
post_encode_callback_->Encoded(encodedImage);
FrameType frameType = VCMEncodedFrame::ConvertFrameType(encodedImage._frameType);

Просмотреть файл

@ -33,6 +33,8 @@ public:
VCMEncodedFrameCallback(EncodedImageCallback* post_encode_callback);
virtual ~VCMEncodedFrameCallback();
void SetCritSect(CriticalSectionWrapper* critSect);
/*
* Callback implementation - codec encode complete
*/
@ -54,6 +56,7 @@ public:
private:
VCMPacketizationCallback* _sendCallback;
CriticalSectionWrapper* _critSect;
media_optimization::MediaOptimization* _mediaOpt;
uint8_t _payloadType;
bool _internalSource;

Просмотреть файл

@ -107,6 +107,7 @@ int32_t VideoSender::InitializeSender() {
_codecDataBase.ResetSender();
_encoder = NULL;
_encodedFrameCallback.SetTransportCallback(NULL);
_encodedFrameCallback.SetCritSect(_sendCritSect);
_mediaOpt.Reset(); // Resetting frame dropper
return VCM_OK;
}