4460{
4462
4475
4476 static const GUID *
const all_formats[] =
4477 {
4479 &TIME_FORMAT_NONE,
4480 &TIME_FORMAT_FRAME,
4481 &TIME_FORMAT_SAMPLE,
4482 &TIME_FORMAT_FIELD,
4483 &TIME_FORMAT_BYTE,
4484 &TIME_FORMAT_MEDIA_TIME,
4486 };
4487
4488 static const GUID *
const unsupported_formats[] =
4489 {
4490 &TIME_FORMAT_FRAME,
4491 &TIME_FORMAT_SAMPLE,
4492 &TIME_FORMAT_FIELD,
4493 &TIME_FORMAT_BYTE,
4495 };
4496
4499
4500 IFilterGraph2_QueryInterface(
graph, &IID_IMediaControl, (
void **)&
control);
4501 IFilterGraph2_QueryInterface(
graph, &IID_IMediaSeeking, (
void **)&seeking);
4502 IFilterGraph2_QueryInterface(
graph, &IID_IMediaFilter, (
void **)&
filter);
4503 IFilterGraph2_QueryInterface(
graph, &IID_IMediaEventSink, (
void **)&eventsink);
4504
4505 hr = IMediaSeeking_GetCapabilities(seeking, &caps);
4508
4509 caps = 0;
4510 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
4512 ok(!caps,
"Got caps %#lx.\n", caps);
4513
4515 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
4518
4519 hr = IMediaSeeking_IsFormatSupported(seeking,
NULL);
4521
4523 {
4524 hr = IMediaSeeking_IsFormatSupported(seeking, all_formats[
i]);
4526 }
4527
4528 hr = IMediaSeeking_QueryPreferredFormat(seeking,
NULL);
4530 hr = IMediaSeeking_QueryPreferredFormat(seeking, &
format);
4533
4534 hr = IMediaSeeking_GetTimeFormat(seeking,
NULL);
4536 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
4539
4540 hr = IMediaSeeking_IsUsingTimeFormat(seeking,
NULL);
4542 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_MEDIA_TIME);
4544 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_NONE);
4546
4547 hr = IMediaSeeking_SetTimeFormat(seeking, &TIME_FORMAT_NONE);
4549
4550 hr = IMediaSeeking_QueryPreferredFormat(seeking, &
format);
4553
4554 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_MEDIA_TIME);
4556 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_NONE);
4558
4559 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
4562
4563 hr = IMediaSeeking_SetTimeFormat(seeking, &TIME_FORMAT_MEDIA_TIME);
4565
4567 {
4568 hr = IMediaSeeking_SetTimeFormat(seeking, unsupported_formats[
i]);
4570 }
4571
4573 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time,
NULL, 0x123456789a,
NULL);
4576
4578 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time, &TIME_FORMAT_MEDIA_TIME, 0x123456789a,
NULL);
4581
4583 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time,
NULL, 0x123456789a, &TIME_FORMAT_MEDIA_TIME);
4586
4588 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time, &TIME_FORMAT_MEDIA_TIME, 0x123456789a, &TIME_FORMAT_MEDIA_TIME);
4591
4592 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time, &TIME_FORMAT_NONE, 0x123456789a, &TIME_FORMAT_MEDIA_TIME);
4594 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time, &TIME_FORMAT_NONE, 0x123456789a,
NULL);
4596 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time, &TIME_FORMAT_MEDIA_TIME, 0x123456789a, &TIME_FORMAT_NONE);
4598 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time,
NULL, 0x123456789a, &TIME_FORMAT_NONE);
4600
4602 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time, &TIME_FORMAT_NONE, 0x123456789a, &TIME_FORMAT_NONE);
4605
4610
4611 hr = IMediaSeeking_GetDuration(seeking,
NULL);
4613 hr = IMediaSeeking_GetDuration(seeking, &
time);
4615
4616 hr = IMediaSeeking_GetStopPosition(seeking,
NULL);
4618 hr = IMediaSeeking_GetStopPosition(seeking, &
time);
4620
4621 hr = IMediaSeeking_SetPositions(seeking, &
current, 0, &stop, 0);
4623
4624 hr = IMediaSeeking_GetPositions(seeking,
NULL,
NULL);
4626 hr = IMediaSeeking_GetPositions(seeking,
NULL, &stop);
4628 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
4634
4635 hr = IMediaSeeking_GetCurrentPosition(seeking,
NULL);
4638 hr = IMediaSeeking_GetCurrentPosition(seeking, &
current);
4641
4642 hr = IMediaSeeking_GetAvailable(seeking, &earliest, &latest);
4644
4645 hr = IMediaSeeking_SetRate(seeking, 1.0);
4647 hr = IMediaSeeking_SetRate(seeking, 2.0);
4649
4650 hr = IMediaSeeking_GetRate(seeking, &
rate);
4653
4654 hr = IMediaSeeking_GetPreroll(seeking, &
time);
4656
4657
4658
4659
4660
4661 IFilterGraph2_AddFilter(
graph, &filter1.IBaseFilter_iface,
NULL);
4663 filter1.support_media_time =
FALSE;
4664 filter1.support_testguid =
TRUE;
4665
4666 hr = IMediaSeeking_GetDuration(seeking, &
time);
4668
4669 hr = IMediaSeeking_SetTimeFormat(seeking, &
testguid);
4671
4672 IFilterGraph2_RemoveFilter(
graph, &filter1.IBaseFilter_iface);
4673 filter1.support_media_time =
TRUE;
4674 filter1.support_testguid =
FALSE;
4675
4676 IFilterGraph2_AddFilter(
graph, &filter1.IBaseFilter_iface,
NULL);
4677 IFilterGraph2_AddFilter(
graph, &filter2.IBaseFilter_iface,
NULL);
4680
4683 hr = IMediaSeeking_GetCapabilities(seeking, &caps);
4686 ok(filter1.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter1.seeking_ref);
4687 ok(filter2.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter2.seeking_ref);
4688
4691
4693 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
4696
4698 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
4701
4703 hr = IMediaSeeking_CheckCapabilities(seeking, &caps);
4705 ok(!caps,
"Got caps %#lx.\n", caps);
4706
4709
4710 hr = IMediaSeeking_IsFormatSupported(seeking, &
testguid);
4712
4713 filter1.support_testguid =
TRUE;
4714 hr = IMediaSeeking_IsFormatSupported(seeking, &
testguid);
4716
4717 filter1.support_testguid =
FALSE;
4718 filter2.support_testguid =
TRUE;
4719 hr = IMediaSeeking_IsFormatSupported(seeking, &
testguid);
4721
4722
4723 hr = IMediaSeeking_QueryPreferredFormat(seeking, &
format);
4726
4727 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
4730
4731 filter2.support_testguid =
FALSE;
4732 hr = IMediaSeeking_SetTimeFormat(seeking, &
testguid);
4734
4735 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
4738
4739 filter1.support_testguid =
TRUE;
4740 hr = IMediaSeeking_SetTimeFormat(seeking, &
testguid);
4744 ok(
IsEqualGUID(&filter2.time_format, &TIME_FORMAT_MEDIA_TIME),
4746
4747 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
4750
4751 hr = IMediaSeeking_QueryPreferredFormat(seeking, &
format);
4754
4755 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &TIME_FORMAT_MEDIA_TIME);
4757 hr = IMediaSeeking_IsUsingTimeFormat(seeking, &
testguid);
4759
4760 hr = IMediaSeeking_GetCapabilities(seeking, &caps);
4763 ok(filter1.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter1.seeking_ref);
4764 ok(filter2.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter2.seeking_ref);
4765
4766 filter2.support_testguid =
TRUE;
4767 hr = IMediaSeeking_SetTimeFormat(seeking, &
testguid);
4769 ok(
IsEqualGUID(&filter1.time_format, &TIME_FORMAT_MEDIA_TIME),
4773
4774 filter1.support_media_time =
FALSE;
4776
4777 hr = IMediaSeeking_GetCapabilities(seeking, &caps);
4780 ok(!filter1.seeking_ref,
"Unexpected seeking refcount %ld.\n", filter1.seeking_ref);
4781 ok(filter2.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter2.seeking_ref);
4782
4783 filter1.support_media_time =
TRUE;
4784 filter1.support_testguid =
FALSE;
4786
4787 hr = IMediaSeeking_GetCapabilities(seeking, &caps);
4790 ok(filter1.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter1.seeking_ref);
4791 ok(filter2.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter2.seeking_ref);
4792
4793 ok(
IsEqualGUID(&filter1.time_format, &TIME_FORMAT_MEDIA_TIME),
4797 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
4800
4801 hr = IMediaSeeking_SetTimeFormat(seeking, &TIME_FORMAT_NONE);
4803
4804 hr = IMediaSeeking_GetTimeFormat(seeking, &
format);
4807
4812
4813 hr = IMediaSeeking_ConvertTimeFormat(seeking, &
time, &
testguid, 0x123456789a, &TIME_FORMAT_NONE);
4815
4818
4819 filter1.seek_duration = 0x12345;
4820 filter2.seek_duration = 0x23456;
4821 hr = IMediaSeeking_GetDuration(seeking, &
time);
4824
4825 filter2.seek_duration = 0x12345;
4826 filter1.seek_duration = 0x23456;
4827 hr = IMediaSeeking_GetDuration(seeking, &
time);
4830
4831 filter1.seek_hr = filter2.seek_hr = 0xbeef;
4832 hr = IMediaSeeking_GetDuration(seeking, &
time);
4835
4837 filter2.seek_hr =
S_OK;
4838 hr = IMediaSeeking_GetDuration(seeking, &
time);
4841
4842 filter1.seek_hr = 0xdeadbeef;
4843 hr = IMediaSeeking_GetDuration(seeking, &
time);
4844 ok(
hr == 0xdeadbeef,
"Got hr %#lx.\n",
hr);
4845
4846 filter1.seek_hr = filter2.seek_hr =
E_NOTIMPL;
4847 hr = IMediaSeeking_GetDuration(seeking, &
time);
4849 filter1.seek_hr = filter2.seek_hr =
S_OK;
4850
4853
4854 filter1.seek_stop = 0x54321;
4855 filter2.seek_stop = 0x65432;
4856 hr = IMediaSeeking_GetStopPosition(seeking, &
time);
4859
4860 filter2.seek_stop = 0x54321;
4861 filter1.seek_stop = 0x65432;
4862 hr = IMediaSeeking_GetStopPosition(seeking, &
time);
4865
4866 filter1.seek_hr = filter2.seek_hr = 0xbeef;
4867 hr = IMediaSeeking_GetStopPosition(seeking, &
time);
4870
4872 filter2.seek_hr =
S_OK;
4873 hr = IMediaSeeking_GetStopPosition(seeking, &
time);
4876
4877 filter1.seek_hr = 0xdeadbeef;
4878 hr = IMediaSeeking_GetStopPosition(seeking, &
time);
4879 ok(
hr == 0xdeadbeef,
"Got hr %#lx.\n",
hr);
4880
4881 filter1.seek_hr = filter2.seek_hr =
E_NOTIMPL;
4882 hr = IMediaSeeking_GetStopPosition(seeking, &
time);
4884 filter1.seek_hr = filter2.seek_hr =
S_OK;
4885
4888
4889 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
4892
4895
4897 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
4901
4904
4906 stop = 0x321;
4916
4917 filter1.seek_hr = filter2.seek_hr = 0xbeef;
4921
4923 filter2.seek_hr =
S_OK;
4927
4928 filter1.seek_hr = 0xdeadbeef;
4931 ok(
hr == 0xdeadbeef,
"Got hr %#lx.\n",
hr);
4932
4933 filter1.seek_hr = filter2.seek_hr =
E_NOTIMPL;
4937 filter1.seek_hr = filter2.seek_hr =
S_OK;
4938
4939 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
4942
4944 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
4948
4950 stop = 0x321;
4960
4962 stop = 0x321;
4972
4975
4976 hr = IMediaSeeking_SetRate(seeking, 2.0);
4978 todo_wine ok(filter1.seek_rate == 2.0,
"Got rate %.16e.\n", filter1.seek_rate);
4979 todo_wine ok(filter2.seek_rate == 2.0,
"Got rate %.16e.\n", filter2.seek_rate);
4980
4981 hr = IMediaSeeking_SetRate(seeking, 1.0);
4983 todo_wine ok(filter1.seek_rate == 1.0,
"Got rate %.16e.\n", filter1.seek_rate);
4984 todo_wine ok(filter2.seek_rate == 1.0,
"Got rate %.16e.\n", filter2.seek_rate);
4985
4986 hr = IMediaSeeking_SetRate(seeking, -1.0);
4988 todo_wine ok(filter1.seek_rate == -1.0,
"Got rate %.16e.\n", filter1.seek_rate);
4989 todo_wine ok(filter2.seek_rate == -1.0,
"Got rate %.16e.\n", filter2.seek_rate);
4990
4993
4994 hr = IMediaSeeking_GetRate(seeking, &
rate);
4997
4998 hr = IMediaSeeking_SetRate(seeking, 1.0);
5000
5001
5002
5003
5004
5007
5008
5010 stop = 9000 * 10000;
5014
5015 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5021 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
5027
5028
5030 stop = 8000 * 10000;
5031 hr = IMediaSeeking_SetPositions(seeking, &
current,
5035
5037
5038 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5044 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
5050
5053
5057
5058 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5064 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
5070
5073 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5076
5079
5082
5084 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5088 hr = IMediaSeeking_GetPositions(seeking, &
current, &stop);
5092
5095
5096
5097
5098
5099 hr = IFilterGraph2_SetDefaultSyncSource(
graph);
5101
5102 filter1.seek_stop = 5000 * 10000;
5103 filter2.seek_stop = 6000 * 10000;
5104
5107
5108 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5111
5114
5115 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5118
5121
5122 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5125
5128
5129 filter1.seek_hr = filter2.seek_hr =
E_NOTIMPL;
5130 filter1.seek_stop = filter2.seek_stop = 0xdeadbeef;
5131
5134
5135 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5138
5141
5144
5145 hr = IMediaSeeking_GetCurrentPosition(seeking, &
time);
5148
5149 hr = IMediaSeeking_SetTimeFormat(seeking, &TIME_FORMAT_MEDIA_TIME);
5151
5152 hr = IMediaSeeking_SetTimeFormat(seeking, &TIME_FORMAT_NONE);
5154
5157
5158 IMediaFilter_Release(
filter);
5159 IMediaControl_Release(
control);
5160 IMediaSeeking_Release(seeking);
5161 IMediaEventSink_Release(eventsink);
5162
5163 ok(filter1.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter1.seeking_ref);
5164 ok(filter2.seeking_ref > 0,
"Unexpected seeking refcount %ld.\n", filter2.seeking_ref);
5165
5166 ref = IFilterGraph2_Release(
graph);
5167 ok(!
ref,
"Got outstanding refcount %ld.\n",
ref);
5168 ok(filter1.ref == 1,
"Got outstanding refcount %ld.\n", filter1.ref);
5169 ok(filter2.ref == 1,
"Got outstanding refcount %ld.\n", filter2.ref);
5170 ok(filter1.seeking_ref == 0,
"Unexpected seeking refcount %ld.\n", filter1.seeking_ref);
5171 ok(filter2.seeking_ref == 0,
"Unexpected seeking refcount %ld.\n", filter2.seeking_ref);
5172}
@ AM_SEEKING_CanGetDuration
@ AM_SEEKING_CanGetCurrentPos
@ AM_SEEKING_CanDoSegments
@ AM_SEEKING_CanSeekAbsolute
struct task_struct * current
static BOOL compare_time(ULONGLONG x, ULONGLONG y, unsigned int max_diff)
static void flush_cached_seeking(IFilterGraph2 *graph, struct testfilter *filter)
static const GUID testguid