Reland 28629004: adding new AEC dump start interface for chrome.
This is required because we are not allow to pass CRT objects across dll boundaries, that says, when we pass a file descriptor from chrome dll to libpeerconnection dll, the file descriptor will become invalid immediate, more information can be found here: http://msdn.microsoft.com/en-us/library/ms235460.aspx R=andresp@webrtc.org, andrew@webrtc.org, bjornv@webrtc.org, henrike@webrtc.org, henrikg@webrtc.org Review URL: https://webrtc-codereview.appspot.com/30629004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7418 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
c5593ef1aa
commit
e46bc77e94
@ -111,6 +111,8 @@ static_library("rtc_base_approved") {
|
||||
"md5.cc",
|
||||
"md5.h",
|
||||
"md5digest.h",
|
||||
"platform_file.cc",
|
||||
"platform_file.h",
|
||||
"stringencode.cc",
|
||||
"stringencode.h",
|
||||
"stringutils.cc",
|
||||
|
@ -46,6 +46,8 @@
|
||||
'md5.cc',
|
||||
'md5.h',
|
||||
'md5digest.h',
|
||||
'platform_file.cc',
|
||||
'platform_file.h',
|
||||
'stringencode.cc',
|
||||
'stringencode.h',
|
||||
'stringutils.cc',
|
||||
|
@ -10,13 +10,6 @@
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#if defined(WEBRTC_WIN)
|
||||
// TODO(grunell): Remove io.h includes when Chromium has started
|
||||
// to use AEC in each source. http://crbug.com/264611.
|
||||
#include <io.h>
|
||||
#include "webrtc/base/win32.h"
|
||||
#endif
|
||||
|
||||
#include "webrtc/base/pathutils.h"
|
||||
#include "webrtc/base/fileutils.h"
|
||||
#include "webrtc/base/stringutils.h"
|
||||
@ -279,28 +272,4 @@ bool CreateUniqueFile(Pathname& path, bool create_empty) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Taken from Chromium's base/platform_file_*.cc.
|
||||
// TODO(grunell): Remove when Chromium has started to use AEC in each source.
|
||||
// http://crbug.com/264611.
|
||||
FILE* FdopenPlatformFileForWriting(PlatformFile file) {
|
||||
#if defined(WEBRTC_WIN)
|
||||
if (file == kInvalidPlatformFileValue)
|
||||
return NULL;
|
||||
int fd = _open_osfhandle(reinterpret_cast<intptr_t>(file), 0);
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
return _fdopen(fd, "w");
|
||||
#else
|
||||
return fdopen(file, "w");
|
||||
#endif
|
||||
}
|
||||
|
||||
bool ClosePlatformFile(PlatformFile file) {
|
||||
#if defined(WEBRTC_WIN)
|
||||
return CloseHandle(file) != 0;
|
||||
#else
|
||||
return close(file);
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace rtc
|
||||
|
@ -13,9 +13,7 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#if defined(WEBRTC_WIN)
|
||||
#include "webrtc/base/win32.h"
|
||||
#else
|
||||
#if !defined(WEBRTC_WIN)
|
||||
#include <dirent.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/stat.h>
|
||||
@ -25,6 +23,7 @@
|
||||
|
||||
#include "webrtc/base/basictypes.h"
|
||||
#include "webrtc/base/common.h"
|
||||
#include "webrtc/base/platform_file.h"
|
||||
#include "webrtc/base/scoped_ptr.h"
|
||||
|
||||
namespace rtc {
|
||||
@ -436,24 +435,6 @@ class FilesystemScope{
|
||||
// process).
|
||||
bool CreateUniqueFile(Pathname& path, bool create_empty);
|
||||
|
||||
// Taken from Chromium's base/platform_file.h.
|
||||
// Don't use ClosePlatformFile to close a file opened with FdopenPlatformFile.
|
||||
// Use fclose instead.
|
||||
// TODO(grunell): Remove when Chromium has started to use AEC in each source.
|
||||
// http://crbug.com/264611.
|
||||
#if defined(WEBRTC_WIN)
|
||||
typedef HANDLE PlatformFile;
|
||||
const PlatformFile kInvalidPlatformFileValue = INVALID_HANDLE_VALUE;
|
||||
#elif defined(WEBRTC_POSIX)
|
||||
typedef int PlatformFile;
|
||||
const PlatformFile kInvalidPlatformFileValue = -1;
|
||||
#else
|
||||
#error Unsupported platform
|
||||
#endif
|
||||
|
||||
FILE* FdopenPlatformFileForWriting(PlatformFile file);
|
||||
bool ClosePlatformFile(PlatformFile file);
|
||||
|
||||
} // namespace rtc
|
||||
|
||||
#endif // WEBRTC_BASE_FILEUTILS_H_
|
||||
|
49
webrtc/base/platform_file.cc
Normal file
49
webrtc/base/platform_file.cc
Normal file
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright 2014 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 "webrtc/base/platform_file.h"
|
||||
|
||||
#if defined(WEBRTC_WIN)
|
||||
#include <io.h>
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
namespace rtc {
|
||||
|
||||
#if defined(WEBRTC_WIN)
|
||||
const PlatformFile kInvalidPlatformFileValue = INVALID_HANDLE_VALUE;
|
||||
|
||||
FILE* FdopenPlatformFileForWriting(PlatformFile file) {
|
||||
if (file == kInvalidPlatformFileValue)
|
||||
return NULL;
|
||||
int fd = _open_osfhandle(reinterpret_cast<intptr_t>(file), 0);
|
||||
if (fd < 0)
|
||||
return NULL;
|
||||
|
||||
return _fdopen(fd, "w");
|
||||
}
|
||||
|
||||
bool ClosePlatformFile(PlatformFile file) {
|
||||
return CloseHandle(file) != 0;
|
||||
}
|
||||
#else
|
||||
const PlatformFile kInvalidPlatformFileValue = -1;
|
||||
|
||||
FILE* FdopenPlatformFileForWriting(PlatformFile file) {
|
||||
return fdopen(file, "w");
|
||||
}
|
||||
|
||||
bool ClosePlatformFile(PlatformFile file) {
|
||||
return close(file);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace rtc
|
44
webrtc/base/platform_file.h
Normal file
44
webrtc/base/platform_file.h
Normal file
@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright 2014 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.
|
||||
*/
|
||||
|
||||
#ifndef WEBRTC_BASE_PLATFORM_FILE_H_
|
||||
#define WEBRTC_BASE_PLATFORM_FILE_H_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined(WEBRTC_WIN)
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
namespace rtc {
|
||||
|
||||
#if defined(WEBRTC_WIN)
|
||||
typedef HANDLE PlatformFile;
|
||||
#elif defined(WEBRTC_POSIX)
|
||||
typedef int PlatformFile;
|
||||
#else
|
||||
#error Unsupported platform
|
||||
#endif
|
||||
|
||||
extern const PlatformFile kInvalidPlatformFileValue;
|
||||
|
||||
// Associates a standard FILE stream with an existing PlatformFile.
|
||||
// Note that after this function has returned a valid FILE stream,
|
||||
// the PlatformFile should no longer be used.
|
||||
FILE* FdopenPlatformFileForWriting(PlatformFile file);
|
||||
|
||||
// Closes a PlatformFile.
|
||||
// Don't use ClosePlatformFile to close a file opened with FdopenPlatformFile.
|
||||
// Use fclose instead.
|
||||
bool ClosePlatformFile(PlatformFile file);
|
||||
|
||||
} // namespace rtc
|
||||
|
||||
#endif // WEBRTC_BASE_PLATFORM_FILE_H_
|
@ -157,6 +157,7 @@ source_set("audio_processing") {
|
||||
}
|
||||
|
||||
deps += [
|
||||
"../../base:rtc_base_approved",
|
||||
"../../common_audio",
|
||||
"../../system_wrappers",
|
||||
]
|
||||
|
@ -9,6 +9,7 @@
|
||||
{
|
||||
'variables': {
|
||||
'audio_processing_dependencies': [
|
||||
'<(webrtc_root)/base/base.gyp:rtc_base_approved',
|
||||
'<(webrtc_root)/common_audio/common_audio.gyp:common_audio',
|
||||
'<(webrtc_root)/system_wrappers/source/system_wrappers.gyp:system_wrappers',
|
||||
],
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "webrtc/base/platform_file.h"
|
||||
#include "webrtc/common_audio/include/audio_util.h"
|
||||
#include "webrtc/common_audio/signal_processing/include/signal_processing_library.h"
|
||||
#include "webrtc/modules/audio_processing/audio_buffer.h"
|
||||
@ -716,6 +717,12 @@ int AudioProcessingImpl::StartDebugRecording(FILE* handle) {
|
||||
#endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
|
||||
}
|
||||
|
||||
int AudioProcessingImpl::StartDebugRecordingForPlatformFile(
|
||||
rtc::PlatformFile handle) {
|
||||
FILE* stream = rtc::FdopenPlatformFileForWriting(handle);
|
||||
return StartDebugRecording(stream);
|
||||
}
|
||||
|
||||
int AudioProcessingImpl::StopDebugRecording() {
|
||||
CriticalSectionScoped crit_scoped(crit_);
|
||||
|
||||
|
@ -125,6 +125,8 @@ class AudioProcessingImpl : public AudioProcessing {
|
||||
virtual int StartDebugRecording(
|
||||
const char filename[kMaxFilenameSize]) OVERRIDE;
|
||||
virtual int StartDebugRecording(FILE* handle) OVERRIDE;
|
||||
virtual int StartDebugRecordingForPlatformFile(
|
||||
rtc::PlatformFile handle) OVERRIDE;
|
||||
virtual int StopDebugRecording() OVERRIDE;
|
||||
virtual EchoCancellation* echo_cancellation() const OVERRIDE;
|
||||
virtual EchoControlMobile* echo_control_mobile() const OVERRIDE;
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <stddef.h> // size_t
|
||||
#include <stdio.h> // FILE
|
||||
|
||||
#include "webrtc/base/platform_file.h"
|
||||
#include "webrtc/common.h"
|
||||
#include "webrtc/typedefs.h"
|
||||
|
||||
@ -325,6 +326,13 @@ class AudioProcessing {
|
||||
// of |handle| and closes it at StopDebugRecording().
|
||||
virtual int StartDebugRecording(FILE* handle) = 0;
|
||||
|
||||
// Same as above but uses an existing PlatformFile handle. Takes ownership
|
||||
// of |handle| and closes it at StopDebugRecording().
|
||||
// TODO(xians): Make this interface pure virtual.
|
||||
virtual int StartDebugRecordingForPlatformFile(rtc::PlatformFile handle) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Stops recording debugging information, and closes the file. Recording
|
||||
// cannot be resumed in the same file (without overwriting it).
|
||||
virtual int StopDebugRecording() = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user