Index: media/video/capture/win/sink_input_pin_win.cc |
diff --git a/media/video/capture/win/sink_input_pin_win.cc b/media/video/capture/win/sink_input_pin_win.cc |
index 9d979185a25ca060c2dba3c3b9510ec8de5cff13..0126e13db8fb27d63fcdee4a5f62867818f6919a 100644 |
--- a/media/video/capture/win/sink_input_pin_win.cc |
+++ b/media/video/capture/win/sink_input_pin_win.cc |
@@ -20,8 +20,6 @@ SinkInputPin::SinkInputPin(IBaseFilter* filter, |
SinkFilterObserver* observer) |
: observer_(observer), |
PinBase(filter) { |
- memset(&requested_capability_, 0, sizeof(requested_capability_)); |
- memset(&resulting_capability_, 0, sizeof(resulting_capability_)); |
} |
SinkInputPin::~SinkInputPin() {} |
@@ -38,9 +36,9 @@ bool SinkInputPin::GetValidMediaType(int index, AM_MEDIA_TYPE* media_type) { |
pvi->bmiHeader.biPlanes = 1; |
pvi->bmiHeader.biClrImportant = 0; |
pvi->bmiHeader.biClrUsed = 0; |
- if (requested_capability_.frame_rate > 0) { |
- pvi->AvgTimePerFrame = kSecondsToReferenceTime / |
- requested_capability_.frame_rate; |
+ if (requested_format_.frame_rate > 0) { |
+ pvi->AvgTimePerFrame = |
+ kSecondsToReferenceTime / requested_format_.frame_rate; |
} |
media_type->majortype = MEDIATYPE_Video; |
@@ -51,30 +49,28 @@ bool SinkInputPin::GetValidMediaType(int index, AM_MEDIA_TYPE* media_type) { |
case 0: { |
pvi->bmiHeader.biCompression = MAKEFOURCC('I', '4', '2', '0'); |
pvi->bmiHeader.biBitCount = 12; // bit per pixel |
- pvi->bmiHeader.biWidth = requested_capability_.width; |
- pvi->bmiHeader.biHeight = requested_capability_.height; |
- pvi->bmiHeader.biSizeImage = 3 * requested_capability_.height * |
- requested_capability_.width / 2; |
+ pvi->bmiHeader.biWidth = requested_format_.frame_size.width(); |
+ pvi->bmiHeader.biHeight = requested_format_.frame_size.height(); |
+ pvi->bmiHeader.biSizeImage = |
+ requested_format_.frame_size.GetArea() * 3 / 2; |
media_type->subtype = kMediaSubTypeI420; |
break; |
} |
case 1: { |
pvi->bmiHeader.biCompression = MAKEFOURCC('Y', 'U', 'Y', '2'); |
pvi->bmiHeader.biBitCount = 16; |
- pvi->bmiHeader.biWidth = requested_capability_.width; |
- pvi->bmiHeader.biHeight = requested_capability_.height; |
- pvi->bmiHeader.biSizeImage = 2 * requested_capability_.width * |
- requested_capability_.height; |
+ pvi->bmiHeader.biWidth = requested_format_.frame_size.width(); |
+ pvi->bmiHeader.biHeight = requested_format_.frame_size.height(); |
+ pvi->bmiHeader.biSizeImage = requested_format_.frame_size.GetArea() * 2; |
media_type->subtype = MEDIASUBTYPE_YUY2; |
break; |
} |
case 2: { |
pvi->bmiHeader.biCompression = BI_RGB; |
pvi->bmiHeader.biBitCount = 24; |
- pvi->bmiHeader.biWidth = requested_capability_.width; |
- pvi->bmiHeader.biHeight = requested_capability_.height; |
- pvi->bmiHeader.biSizeImage = 3 * requested_capability_.height * |
- requested_capability_.width; |
+ pvi->bmiHeader.biWidth = requested_format_.frame_size.width(); |
+ pvi->bmiHeader.biHeight = requested_format_.frame_size.height(); |
+ pvi->bmiHeader.biSizeImage = requested_format_.frame_size.GetArea() * 3; |
media_type->subtype = MEDIASUBTYPE_RGB24; |
break; |
} |
@@ -104,27 +100,27 @@ bool SinkInputPin::IsMediaTypeValid(const AM_MEDIA_TYPE* media_type) { |
return false; |
// Store the incoming width and height. |
- resulting_capability_.width = pvi->bmiHeader.biWidth; |
- resulting_capability_.height = abs(pvi->bmiHeader.biHeight); |
+ resulting_format_.frame_size.SetSize(pvi->bmiHeader.biWidth, |
+ abs(pvi->bmiHeader.biHeight)); |
if (pvi->AvgTimePerFrame > 0) { |
- resulting_capability_.frame_rate = |
+ resulting_format_.frame_rate = |
static_cast<int>(kSecondsToReferenceTime / pvi->AvgTimePerFrame); |
} else { |
- resulting_capability_.frame_rate = requested_capability_.frame_rate; |
+ resulting_format_.frame_rate = requested_format_.frame_rate; |
} |
if (sub_type == kMediaSubTypeI420 && |
pvi->bmiHeader.biCompression == MAKEFOURCC('I', '4', '2', '0')) { |
- resulting_capability_.color = PIXEL_FORMAT_I420; |
+ resulting_format_.pixel_format = PIXEL_FORMAT_I420; |
return true; // This format is acceptable. |
} |
if (sub_type == MEDIASUBTYPE_YUY2 && |
pvi->bmiHeader.biCompression == MAKEFOURCC('Y', 'U', 'Y', '2')) { |
- resulting_capability_.color = PIXEL_FORMAT_YUY2; |
+ resulting_format_.pixel_format = PIXEL_FORMAT_YUY2; |
return true; // This format is acceptable. |
} |
if (sub_type == MEDIASUBTYPE_RGB24 && |
pvi->bmiHeader.biCompression == BI_RGB) { |
- resulting_capability_.color = PIXEL_FORMAT_RGB24; |
+ resulting_format_.pixel_format = PIXEL_FORMAT_RGB24; |
return true; // This format is acceptable. |
} |
return false; |
@@ -140,17 +136,15 @@ HRESULT SinkInputPin::Receive(IMediaSample* sample) { |
return S_OK; |
} |
-void SinkInputPin::SetRequestedMediaCapability( |
- const VideoCaptureCapability& capability) { |
- requested_capability_ = capability; |
- resulting_capability_.width = 0; |
- resulting_capability_.height = 0; |
- resulting_capability_.frame_rate = 0; |
- resulting_capability_.color = PIXEL_FORMAT_UNKNOWN; |
+void SinkInputPin::SetRequestedMediaFormat(const VideoCaptureFormat& format) { |
+ requested_format_ = format; |
+ resulting_format_.frame_size.SetSize(0, 0); |
+ resulting_format_.frame_rate = 0; |
+ resulting_format_.pixel_format = PIXEL_FORMAT_UNKNOWN; |
} |
-const VideoCaptureCapability& SinkInputPin::ResultingCapability() { |
- return resulting_capability_; |
+const VideoCaptureFormat& SinkInputPin::ResultingFormat() { |
+ return resulting_format_; |
} |
} // namespace media |