Index: media/base/video_frame.cc |
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc |
index aad4969e61541effbf31541a825dad83ba59e32b..0ad4ac0f807607d90b0bc0a24695a79507d2eeb8 100644 |
--- a/media/base/video_frame.cc |
+++ b/media/base/video_frame.cc |
@@ -47,6 +47,35 @@ static std::string ConfigToString(const VideoPixelFormat format, |
visible_rect.ToString().c_str(), natural_size.ToString().c_str()); |
} |
+static std::string StorageTypeToString( |
+ const VideoFrame::StorageType storage_type) { |
+ switch (storage_type) { |
+ case VideoFrame::STORAGE_UNKNOWN: |
+ return "UNKNOWN"; |
+ case VideoFrame::STORAGE_OPAQUE: |
+ return "OPAQUE"; |
+ case VideoFrame::STORAGE_UNOWNED_MEMORY: |
+ return "UNOWNED_MEMORY"; |
+ case VideoFrame::STORAGE_OWNED_MEMORY: |
+ return "OWNED_MEMORY"; |
+ case VideoFrame::STORAGE_SHMEM: |
+ return "SHMEM"; |
+#if defined(OS_LINUX) |
+ case VideoFrame::STORAGE_DMABUFS: |
+ return "DMABUFS"; |
+#endif |
+#if defined(VIDEO_HOLE) |
+ case VideoFrame::STORAGE_HOLE: |
+ return "HOLE"; |
+#endif |
+ case VideoFrame::STORAGE_GPU_MEMORY_BUFFERS: |
+ return "GPU_MEMORY_BUFFERS"; |
+ } |
+ |
+ NOTREACHED() << "Invalid StorageType provided: " << storage_type; |
+ return "INVALID"; |
+} |
+ |
// Returns true if |plane| is a valid plane index for the given |format|. |
static bool IsValidPlane(size_t plane, VideoPixelFormat format) { |
DCHECK_LE(VideoFrame::NumPlanes(format), |
@@ -826,6 +855,20 @@ void VideoFrame::UpdateReleaseSyncToken(SyncTokenClient* client) { |
client->GenerateSyncToken(&release_sync_token_); |
} |
+std::string VideoFrame::AsHumanReadableString() { |
+ if (metadata()->IsTrue(media::VideoFrameMetadata::END_OF_STREAM)) |
+ return "end of stream"; |
+ |
+ std::ostringstream s; |
+ s << "format: " << VideoPixelFormatToString(format_) |
+ << " storage_type: " << StorageTypeToString(storage_type_) |
+ << " coded_size: " << coded_size_.ToString() |
+ << " visible_rect: " << visible_rect_.ToString() |
+ << " natural_size: " << natural_size_.ToString() |
+ << " timestamp: " << timestamp_.InMicroseconds(); |
+ return s.str(); |
+} |
+ |
// static |
scoped_refptr<VideoFrame> VideoFrame::WrapExternalStorage( |
VideoPixelFormat format, |