1/* 2 * Copyright (C) 2008 Google (Lei Zhang) 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * This library is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with this library; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 17 */ 18 19import "oaidl.idl"; 20import "ocidl.idl"; 21/* import "dxtrans.idl"; */ 22import "amstream.idl"; 23import "msxml.idl"; 24 25[ 26 object, 27 uuid(0579154A-2B53-4994-B0D0-E773148EFF85), 28 local, 29 pointer_default(unique) 30] 31interface ISampleGrabberCB : IUnknown 32{ 33 HRESULT SampleCB( 34 double SampleTime, 35 IMediaSample * pSample 36 ); 37 HRESULT BufferCB( 38 double SampleTime, 39 BYTE * pBuffer, 40 LONG BufferLen 41 ); 42} 43 44[ 45 object, 46 uuid(6B652FFF-11FE-4fce-92AD-0266B5D7C78F), 47 local, 48 pointer_default(unique) 49] 50interface ISampleGrabber: IUnknown 51{ 52 HRESULT SetOneShot( 53 BOOL OneShot 54 ); 55 56 HRESULT SetMediaType( 57 const AM_MEDIA_TYPE * pType 58 ); 59 60 HRESULT GetConnectedMediaType( 61 AM_MEDIA_TYPE * pType 62 ); 63 64 HRESULT SetBufferSamples( 65 BOOL BufferThem 66 ); 67 68 HRESULT GetCurrentBuffer( 69 [in,out] LONG * pBufferSize, 70 [out] LONG * pBuffer 71 ); 72 73 HRESULT GetCurrentSample( 74 [out] IMediaSample ** ppSample 75 ); 76 77 HRESULT SetCallback( 78 ISampleGrabberCB * pCallback, 79 LONG WhichMethodToCallback 80 ); 81}; 82 83[ 84 object, 85 uuid(65bd0710-24d2-4FF7-9324-ed2e5d3abafa), 86 pointer_default(unique) 87] 88interface IMediaDet : IUnknown 89{ 90 HRESULT get_Filter( 91 [out] IUnknown* *pVal 92 ); 93 94 HRESULT put_Filter( 95 IUnknown* newVal 96 ); 97 98 HRESULT get_OutputStreams( 99 [out] LONG *pVal 100 ); 101 102 HRESULT get_CurrentStream( 103 [out] LONG *pVal 104 ); 105 106 HRESULT put_CurrentStream( 107 LONG newVal 108 ); 109 110 HRESULT get_StreamType( 111 [out] GUID *pVal 112 ); 113 114 HRESULT get_StreamTypeB( 115 [out] BSTR *pVal 116 ); 117 118 HRESULT get_StreamLength( 119 [out] double *pVal 120 ); 121 122 HRESULT get_Filename( 123 [out] BSTR *pVal 124 ); 125 126 HRESULT put_Filename( 127 BSTR newVal 128 ); 129 130 HRESULT GetBitmapBits( 131 double StreamTime, 132 LONG * pBufferSize, 133 char * pBuffer, 134 LONG Width, 135 LONG Height 136 ); 137 138 HRESULT WriteBitmapBits( 139 double StreamTime, 140 LONG Width, 141 LONG Height, 142 BSTR Filename 143 ); 144 145 HRESULT get_StreamMediaType( 146 [out] AM_MEDIA_TYPE * pVal 147 ); 148 149 HRESULT GetSampleGrabber( 150 [out] ISampleGrabber ** ppVal 151 ); 152 153 HRESULT get_FrameRate( 154 [out] double *pVal 155 ); 156 157 HRESULT EnterBitmapGrabMode( 158 double SeekTime 159 ); 160}; 161 162[ 163 uuid(65BD0711-24D2-4ff7-9324-ED2E5D3ABAFA), 164] 165coclass MediaDet 166{ 167 [default] interface IMediaDet; 168}; 169 170[ 171 object, 172 uuid(288581E0-66CE-11d2-918F-00C0DF10D434), 173 odl, 174 pointer_default(unique) 175] 176interface IMediaLocator : IUnknown 177{ 178 HRESULT FindMediaFile( 179 BSTR input, 180 BSTR filter, 181 BSTR * output, 182 long flags 183 ); 184 185 HRESULT AddFoundLocation( 186 BSTR dir 187 ); 188}; 189 190typedef struct 191{ 192 BSTR name; 193 DISPID dispID; 194 LONG nValues; 195} DEXTER_PARAM; 196 197typedef struct 198{ 199 VARIANT v; 200 REFERENCE_TIME rt; 201 DWORD dwInterp; 202} DEXTER_VALUE; 203 204[ 205 object, 206 uuid(AE9472BD-B0C3-11D2-8D24-00A0C9441E20), 207 pointer_default(unique) 208] 209interface IPropertySetter : IUnknown 210{ 211 HRESULT LoadXML( 212 [in] IUnknown * pxml 213 ); 214 215 HRESULT PrintXML( 216 [out] char * xml, 217 [in] int size, 218 [out] int * printed, 219 [in] int indent 220 ); 221 222 HRESULT CloneProps( 223 [out] IPropertySetter ** setter, 224 [in] REFERENCE_TIME start, 225 [in] REFERENCE_TIME stop 226 ); 227 228 HRESULT AddProp( 229 [in] DEXTER_PARAM param, 230 [in] DEXTER_VALUE * value 231 ); 232 233 HRESULT GetProps( 234 [out] LONG * params, 235 [out] DEXTER_PARAM ** param, 236 [out] DEXTER_VALUE ** value 237 ); 238 239 HRESULT FreeProps( 240 [in] LONG params, 241 [in] DEXTER_PARAM * param, 242 [in] DEXTER_VALUE * value 243 ); 244 245 HRESULT ClearProps(); 246 247 HRESULT SaveToBlob( 248 [out] LONG * size, 249 [out] BYTE ** blob 250 ); 251 252 HRESULT LoadFromBlob( 253 [in] LONG size, 254 [in] BYTE * blob 255 ); 256 257 HRESULT SetProps( 258 [in] IUnknown * target, 259 [in] REFERENCE_TIME now 260 ); 261}; 262 263[ 264 object, 265 uuid(E43E73A2-0EFA-11d3-9601-00A0C9441E20), 266 odl, 267 pointer_default(unique) 268] 269interface IAMErrorLog : IUnknown 270{ 271 HRESULT LogError( 272 long severity, 273 BSTR error_str, 274 long error_code, 275 long hresult, 276 [in] VARIANT * extra 277 ); 278}; 279 280[ 281 object, 282 uuid(963566DA-BE21-4eaf-88E9-35704F8F52A1), 283 odl, 284 pointer_default(unique) 285] 286interface IAMSetErrorLog : IUnknown 287{ 288 [propget] HRESULT ErrorLog( 289 [out, retval] IAMErrorLog ** log 290 ); 291 292 [propput] HRESULT ErrorLog( 293 [in] IAMErrorLog * log 294 ); 295}; 296 297interface IAMTimeline; 298interface IAMTimelineGroup; 299interface IAMTimelineObj; 300interface IAMTimelineSrc; 301 302typedef enum 303{ 304 TIMELINE_MAJOR_TYPE_COMPOSITE = 1, 305 TIMELINE_MAJOR_TYPE_TRACK = 2, 306 TIMELINE_MAJOR_TYPE_SOURCE = 4, 307 TIMELINE_MAJOR_TYPE_TRANSITION = 8, 308 TIMELINE_MAJOR_TYPE_EFFECT = 16, 309 TIMELINE_MAJOR_TYPE_GROUP = 128 310} TIMELINE_MAJOR_TYPE; 311 312[ 313 object, 314 uuid(78530B74-61F9-11D2-8CAD-00A024580902), 315 odl, 316 pointer_default(unique) 317] 318interface IAMTimeline : IUnknown 319{ 320 HRESULT CreateEmptyNode( 321 [out] IAMTimelineObj ** obj, 322 TIMELINE_MAJOR_TYPE type 323 ); 324 325 HRESULT AddGroup( 326 IAMTimelineObj * group 327 ); 328 329 HRESULT RemGroupFromList( 330 IAMTimelineObj * group 331 ); 332 333 HRESULT GetGroup( 334 [out] IAMTimelineObj ** group, 335 long index 336 ); 337 338 HRESULT GetGroupCount( 339 long * count 340 ); 341 342 HRESULT ClearAllGroups(); 343 344 HRESULT GetInsertMode( 345 long * mode 346 ); 347 348 HRESULT SetInsertMode( 349 long mode 350 ); 351 352 HRESULT EnableTransitions( 353 BOOL enabled 354 ); 355 356 HRESULT TransitionsEnabled( 357 BOOL * enabled 358 ); 359 360 HRESULT EnableEffects( 361 BOOL enabled 362 ); 363 364 HRESULT EffectsEnabled( 365 BOOL * enabled 366 ); 367 368 HRESULT SetInterestRange( 369 REFERENCE_TIME start, 370 REFERENCE_TIME stop 371 ); 372 373 HRESULT GetDuration( 374 REFERENCE_TIME * duration 375 ); 376 377 HRESULT GetDuration2( 378 double * duration 379 ); 380 381 HRESULT SetDefaultFPS( 382 double fps 383 ); 384 385 HRESULT GetDefaultFPS( 386 double * fps 387 ); 388 389 HRESULT IsDirty( 390 BOOL * dirty 391 ); 392 393 HRESULT GetDirtyRange( 394 REFERENCE_TIME * start, 395 REFERENCE_TIME * stop 396 ); 397 398 HRESULT GetCountOfType( 399 long group, 400 long * value, 401 long * value_with_comps, 402 TIMELINE_MAJOR_TYPE type 403 ); 404 405 HRESULT ValidateSourceNames( 406 long flags, 407 IMediaLocator * override, 408 LONG_PTR notify_event 409 ); 410 411 HRESULT SetDefaultTransition( 412 GUID * guid 413 ); 414 415 HRESULT GetDefaultTransition( 416 GUID * guid 417 ); 418 419 HRESULT SetDefaultEffect( 420 GUID * guid 421 ); 422 423 HRESULT GetDefaultEffect( 424 GUID * guid 425 ); 426 427 HRESULT SetDefaultTransitionB( 428 BSTR guidb 429 ); 430 431 HRESULT GetDefaultTransitionB( 432 [out,retval] BSTR * guidb 433 ); 434 435 HRESULT SetDefaultEffectB( 436 BSTR guidb 437 ); 438 439 HRESULT GetDefaultEffectB( 440 [out,retval] BSTR * guidb 441 ); 442}; 443 444[ 445 uuid(78530B75-61F9-11D2-8CAD-00A024580902) 446] 447coclass AMTimeline 448{ 449 [default] interface IAMTimeline; 450 interface IPersistStream; 451 interface IAMSetErrorLog; 452}; 453 454[ 455 object, 456 uuid(9EED4F00-B8A6-11d2-8023-00C0DF10D434), 457 odl, 458 pointer_default(unique) 459] 460interface IAMTimelineGroup : IUnknown 461{ 462 HRESULT SetTimeline( 463 IAMTimeline * timeline 464 ); 465 466 HRESULT GetTimeline( 467 [out] IAMTimeline ** timeline 468 ); 469 470 HRESULT GetPriority( 471 long * priority 472 ); 473 474 HRESULT GetMediaType( 475 [out] AM_MEDIA_TYPE * 476 ); 477 478 HRESULT SetMediaType( 479 [in] AM_MEDIA_TYPE * 480 ); 481 482 HRESULT SetOutputFPS( 483 double fps 484 ); 485 486 HRESULT GetOutputFPS( 487 double * fps 488 ); 489 490 HRESULT SetGroupName( 491 BSTR name 492 ); 493 494 HRESULT GetGroupName( 495 [out,retval] BSTR * name 496 ); 497 498 HRESULT SetPreviewMode( 499 BOOL preview 500 ); 501 502 HRESULT GetPreviewMode( 503 BOOL * preview 504 ); 505 506 HRESULT SetMediaTypeForVB( 507 [in] long type 508 ); 509 510 HRESULT GetOutputBuffering( 511 [out] int * buffer 512 ); 513 514 HRESULT SetOutputBuffering( 515 [in] int buffer 516 ); 517 518 HRESULT SetSmartRecompressFormat( 519 long * format 520 ); 521 522 HRESULT GetSmartRecompressFormat( 523 long ** format 524 ); 525 526 HRESULT IsSmartRecompressFormatSet( 527 BOOL * set 528 ); 529 530 HRESULT IsRecompressFormatDirty( 531 BOOL * dirty 532 ); 533 534 HRESULT ClearRecompressFormatDirty(); 535 536 HRESULT SetRecompFormatFromSource( 537 IAMTimelineSrc * source 538 ); 539}; 540 541[ 542 object, 543 local, 544 uuid(78530B77-61F9-11D2-8CAD-00A024580902), 545 odl, 546 pointer_default(unique) 547] 548interface IAMTimelineObj : IUnknown 549{ 550 HRESULT GetStartStop( 551 REFERENCE_TIME * start, 552 REFERENCE_TIME * stop 553 ); 554 555 HRESULT GetStartStop2( 556 REFTIME * start, REFTIME * stop 557 ); 558 559 HRESULT FixTimes( 560 REFERENCE_TIME * start, REFERENCE_TIME * stop 561 ); 562 563 HRESULT FixTimes2( 564 REFTIME * start, REFTIME * stop 565 ); 566 567 HRESULT SetStartStop( 568 REFERENCE_TIME start, 569 REFERENCE_TIME stop 570 ); 571 572 HRESULT SetStartStop2( 573 REFTIME start, 574 REFTIME stop 575 ); 576 577 HRESULT GetPropertySetter( 578 [out,retval] IPropertySetter ** setter 579 ); 580 581 HRESULT SetPropertySetter( 582 IPropertySetter * setter 583 ); 584 585 HRESULT GetSubObject( 586 [out,retval] IUnknown ** obj 587 ); 588 589 HRESULT SetSubObject( 590 IUnknown * obj 591 ); 592 593 HRESULT SetSubObjectGUID( 594 GUID guid 595 ); 596 597 HRESULT SetSubObjectGUIDB( 598 BSTR guidb 599 ); 600 601 HRESULT GetSubObjectGUID( 602 GUID * guid 603 ); 604 605 HRESULT GetSubObjectGUIDB( 606 [out,retval] BSTR * guidb 607 ); 608 609 HRESULT GetSubObjectLoaded( 610 BOOL * loaded 611 ); 612 613 HRESULT GetTimelineType( 614 TIMELINE_MAJOR_TYPE * type 615 ); 616 617 HRESULT SetTimelineType( 618 TIMELINE_MAJOR_TYPE type 619 ); 620 621 HRESULT GetUserID( 622 long * id 623 ); 624 625 HRESULT SetUserID( 626 long id 627 ); 628 629 HRESULT GetGenID( 630 long * id 631 ); 632 633 HRESULT GetUserName( 634 [out,retval] BSTR * name 635 ); 636 637 HRESULT SetUserName( 638 BSTR name 639 ); 640 641 HRESULT GetUserData( 642 BYTE * data, 643 long * size 644 ); 645 646 HRESULT SetUserData( 647 BYTE * data, 648 long size 649 ); 650 651 HRESULT GetMuted( 652 BOOL * muted 653 ); 654 655 HRESULT SetMuted( 656 BOOL muted 657 ); 658 659 HRESULT GetLocked( 660 BOOL * locked 661 ); 662 663 HRESULT SetLocked( 664 BOOL locked 665 ); 666 667 HRESULT GetDirtyRange( 668 REFERENCE_TIME * start, 669 REFERENCE_TIME * stop 670 ); 671 672 HRESULT GetDirtyRange2( 673 REFTIME * start, 674 REFTIME * stop 675 ); 676 677 HRESULT SetDirtyRange( 678 REFERENCE_TIME start, 679 REFERENCE_TIME stop 680 ); 681 682 HRESULT SetDirtyRange2( 683 REFTIME start, 684 REFTIME stop 685 ); 686 687 HRESULT ClearDirty(); 688 689 HRESULT Remove(); 690 691 HRESULT RemoveAll(); 692 693 HRESULT GetTimelineNoRef( 694 IAMTimeline ** timeline 695 ); 696 697 HRESULT GetGroupIBelongTo( 698 [out] IAMTimelineGroup ** group 699 ); 700 701 HRESULT GetEmbedDepth( 702 long * depth 703 ); 704}; 705 706[ 707 object, 708 uuid(78530B79-61F9-11D2-8CAD-00A024580902), 709 odl, 710 pointer_default(unique) 711] 712interface IAMTimelineSrc : IUnknown 713{ 714 HRESULT GetMediaTimes( 715 REFERENCE_TIME * start, 716 REFERENCE_TIME * stop 717 ); 718 719 HRESULT GetMediaTimes2( 720 REFTIME * start, 721 REFTIME * stop 722 ); 723 724 HRESULT ModifyStopTime( 725 REFERENCE_TIME stop 726 ); 727 728 HRESULT ModifyStopTime2( 729 REFTIME stop 730 ); 731 732 HRESULT FixMediaTimes( 733 REFERENCE_TIME * start, 734 REFERENCE_TIME * stop 735 ); 736 737 HRESULT FixMediaTimes2( 738 REFTIME * start, 739 REFTIME * stop 740 ); 741 742 HRESULT SetMediaTimes( 743 REFERENCE_TIME Start, 744 REFERENCE_TIME Stop 745 ); 746 747 HRESULT SetMediaTimes2( 748 REFTIME Start, 749 REFTIME Stop 750 ); 751 752 HRESULT SetMediaLength( 753 REFERENCE_TIME length 754 ); 755 756 HRESULT SetMediaLength2( 757 REFTIME length 758 ); 759 760 HRESULT GetMediaLength( 761 REFERENCE_TIME * length 762 ); 763 764 HRESULT GetMediaLength2( 765 REFTIME * length 766 ); 767 768 HRESULT GetMediaName( 769 [out,retval] BSTR * name 770 ); 771 772 HRESULT SetMediaName( 773 BSTR name 774 ); 775 776 HRESULT SpliceWithNext( 777 IAMTimelineObj * next 778 ); 779 780 HRESULT GetStreamNumber( 781 long * num 782 ); 783 784 HRESULT SetStreamNumber( 785 long num 786 ); 787 788 HRESULT IsNormalRate( 789 BOOL * normal 790 ); 791 792 HRESULT GetDefaultFPS( 793 double * fps 794 ); 795 796 HRESULT SetDefaultFPS( 797 double fps 798 ); 799 800 HRESULT GetStretchMode( 801 int * mode 802 ); 803 804 HRESULT SetStretchMode( 805 int mode 806 ); 807}; 808 809enum 810{ 811 E_NOTINTREE = 0x80040400, 812 E_RENDER_ENGINE_IS_BROKEN = 0x80040401, 813 E_MUST_INIT_RENDERER = 0x80040402, 814 E_NOTDETERMINED = 0x80040403, 815 E_NO_TIMELINE = 0x80040404, 816 S_WARN_OUTPUTRESET = 40404 817}; 818