diff options
Diffstat (limited to 'chromium/media/video/capture/win/sink_input_pin_win.cc')
-rw-r--r-- | chromium/media/video/capture/win/sink_input_pin_win.cc | 62 |
1 files changed, 27 insertions, 35 deletions
diff --git a/chromium/media/video/capture/win/sink_input_pin_win.cc b/chromium/media/video/capture/win/sink_input_pin_win.cc index 1de1ea1671a..0126e13db8f 100644 --- a/chromium/media/video/capture/win/sink_input_pin_win.cc +++ b/chromium/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,19 +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; - resulting_capability_.expected_capture_delay = 0; - resulting_capability_.interlaced = false; +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 |