Index: media/base/win/mf_helpers.h |
diff --git a/media/base/win/mf_helpers.h b/media/base/win/mf_helpers.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a99ecedbb3fdbf0dd79b008597dfc9ebaab7c774 |
--- /dev/null |
+++ b/media/base/win/mf_helpers.h |
@@ -0,0 +1,77 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef MEDIA_BASE_WIN_MF_HELPERS_H_ |
+#define MEDIA_BASE_WIN_MF_HELPERS_H_ |
+ |
+#include <mfapi.h> |
+#include <stdint.h> |
+ |
+#include "base/win/scoped_comptr.h" |
+#include "media/base/win/mf_initializer_export.h" |
+ |
+namespace media { |
+ |
+namespace mf { |
+ |
+#define RETURN_ON_FAILURE(result, log, ret) \ |
+ do { \ |
+ if (!(result)) { \ |
+ DLOG(ERROR) << log; \ |
+ mf::LogDXVAError(__LINE__); \ |
+ return ret; \ |
+ } \ |
+ } while (0) |
+ |
+#define RETURN_ON_HR_FAILURE(result, log, ret) \ |
+ RETURN_ON_FAILURE(SUCCEEDED(result), \ |
+ log << ", HRESULT: 0x" << std::hex << result, ret); |
+ |
+#define RETURN_AND_NOTIFY_ON_FAILURE(result, log, error_code, ret) \ |
+ do { \ |
+ if (!(result)) { \ |
+ DVLOG(1) << log; \ |
+ mf::LogDXVAError(__LINE__); \ |
+ StopOnError(error_code); \ |
+ return ret; \ |
+ } \ |
+ } while (0) |
+ |
+#define RETURN_AND_NOTIFY_ON_HR_FAILURE(result, log, error_code, ret) \ |
+ RETURN_AND_NOTIFY_ON_FAILURE(SUCCEEDED(result), \ |
+ log << ", HRESULT: 0x" << std::hex << result, \ |
+ error_code, ret); |
+ |
+MF_INITIALIZER_EXPORT void LogDXVAError(int line); |
+ |
+// Creates a Media Foundation sample with one buffer of length |buffer_length| |
+// on a |align|-byte boundary. Alignment must be a perfect power of 2 or 0. |
+MF_INITIALIZER_EXPORT IMFSample* CreateEmptySampleWithBuffer( |
+ uint32_t buffer_length, |
+ int align); |
+ |
+// Provides scoped access to the underlying buffer in an IMFMediaBuffer |
+// instance. |
+class MF_INITIALIZER_EXPORT MediaBufferScopedPointer { |
+ public: |
+ MediaBufferScopedPointer(IMFMediaBuffer* media_buffer); |
+ ~MediaBufferScopedPointer(); |
+ |
+ uint8_t* get() { return buffer_; } |
+ DWORD current_length() const { return current_length_; } |
+ |
+ private: |
+ base::win::ScopedComPtr<IMFMediaBuffer> media_buffer_; |
+ uint8_t* buffer_; |
+ DWORD max_length_; |
+ DWORD current_length_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(MediaBufferScopedPointer); |
+}; |
+ |
+} // namespace mf |
+ |
+} // namespace media |
+ |
+#endif // MEDIA_BASE_WIN_MF_HELPERS_H_ |