componentbase.cpp revision 9b88640fe94198cf3f03151136840b04014a0a7d
1/* 2 * Copyright (C) 2009 Wind River Systems. 3 */ 4 5#include <stdlib.h> 6#include <string.h> 7 8#include <OMX_Core.h> 9#include <OMX_Component.h> 10 11#include <componentbase.h> 12 13/* 14 * ComponentBase 15 */ 16/* 17 * constructor & destructor 18 */ 19void ComponentBase::__ComponentBase(void) 20{ 21 memset(name, 0, OMX_MAX_STRINGNAME_SIZE); 22 cmodule = NULL; 23 handle = NULL; 24 25 roles = NULL; 26 nr_roles = 0; 27} 28 29ComponentBase::ComponentBase() 30{ 31 __ComponentBase(); 32} 33 34ComponentBase::ComponentBase(const OMX_STRING name) 35{ 36 __ComponentBase(); 37 SetName(name); 38} 39 40ComponentBase::~ComponentBase() 41{ 42 if (roles) { 43 OMX_U32 i; 44 45 for (i = 0; i < nr_roles; i++) 46 free(roles[i]); 47 48 free(roles); 49 } 50} 51 52/* end of constructor & destructor */ 53 54/* 55 * accessor 56 */ 57/* name */ 58void ComponentBase::SetName(const OMX_STRING name) 59{ 60 strncpy(this->name, name, OMX_MAX_STRINGNAME_SIZE); 61 this->name[OMX_MAX_STRINGNAME_SIZE-1] = '\0'; 62} 63 64const OMX_STRING ComponentBase::GetName(void) 65{ 66 return name; 67} 68 69/* component module */ 70void ComponentBase::SetCModule(CModule *cmodule) 71{ 72 this->cmodule = cmodule; 73} 74 75CModule *ComponentBase::GetCModule(void) 76{ 77 return cmodule; 78} 79 80/* end of accessor */ 81 82/* 83 * core methods & helpers 84 */ 85/* roles */ 86OMX_ERRORTYPE ComponentBase::SetRolesOfComponent(OMX_U32 nr_roles, 87 const OMX_U8 **roles) 88{ 89 OMX_U32 i; 90 91 this->roles = (OMX_U8 **)malloc(sizeof(OMX_STRING) * nr_roles); 92 if (!this->roles) 93 return OMX_ErrorInsufficientResources; 94 95 for (i = 0; i < nr_roles; i++) { 96 this->roles[i] = (OMX_U8 *)malloc(OMX_MAX_STRINGNAME_SIZE); 97 if (!this->roles[i]) { 98 int j; 99 100 for (j = (int )i-1; j >= 0; j--) 101 free(this->roles[j]); 102 free(this->roles); 103 104 return OMX_ErrorInsufficientResources; 105 } 106 107 strncpy((OMX_STRING)&this->roles[i][0], 108 (const OMX_STRING)&roles[i][0], 109 OMX_MAX_STRINGNAME_SIZE); 110 } 111 112 this->nr_roles = nr_roles; 113 return OMX_ErrorNone; 114} 115 116OMX_ERRORTYPE ComponentBase::GetRolesOfComponent(OMX_U32 *nr_roles, 117 OMX_U8 **roles) 118{ 119 OMX_U32 i; 120 OMX_U32 this_nr_roles = this->nr_roles; 121 122 if (!roles) { 123 *nr_roles = this_nr_roles; 124 return OMX_ErrorNone; 125 } 126 127 if (!nr_roles || (*nr_roles != this_nr_roles)) 128 return OMX_ErrorBadParameter; 129 130 for (i = 0; i < this_nr_roles; i++) { 131 if (!roles[i]) 132 break; 133 134 if (roles && roles[i]) 135 strncpy((OMX_STRING)&roles[i][0], 136 (const OMX_STRING)&this->roles[i][0], 137 OMX_MAX_STRINGNAME_SIZE); 138 } 139 140 if (i != this_nr_roles) 141 return OMX_ErrorBadParameter; 142 143 *nr_roles = this_nr_roles; 144 return OMX_ErrorNone; 145} 146 147bool ComponentBase::QueryHavingThisRole(const OMX_STRING role) 148{ 149 OMX_U32 i; 150 151 if (!roles || !role) 152 return false; 153 154 for (i = 0; i < nr_roles; i++) { 155 if (!strcmp((OMX_STRING)&roles[i][0], role)) 156 return true; 157 } 158 159 return false; 160} 161 162/* end of core methods & helpers */ 163 164/* 165 * component methods & helpers 166 */ 167OMX_ERRORTYPE ComponentBase::GetComponentVersion( 168 OMX_IN OMX_HANDLETYPE hComponent, 169 OMX_OUT OMX_STRING pComponentName, 170 OMX_OUT OMX_VERSIONTYPE* pComponentVersion, 171 OMX_OUT OMX_VERSIONTYPE* pSpecVersion, 172 OMX_OUT OMX_UUIDTYPE* pComponentUUID) 173{ 174 ComponentBase *cbase; 175 176 if (!hComponent) 177 return OMX_ErrorBadParameter; 178 179 cbase = static_cast<ComponentBase *> 180 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 181 if (!cbase) 182 return OMX_ErrorBadParameter; 183 184 return cbase->CBaseGetComponentVersion(hComponent, 185 pComponentName, 186 pComponentVersion, 187 pSpecVersion, 188 pComponentUUID); 189} 190 191OMX_ERRORTYPE ComponentBase::CBaseGetComponentVersion( 192 OMX_IN OMX_HANDLETYPE hComponent, 193 OMX_OUT OMX_STRING pComponentName, 194 OMX_OUT OMX_VERSIONTYPE* pComponentVersion, 195 OMX_OUT OMX_VERSIONTYPE* pSpecVersion, 196 OMX_OUT OMX_UUIDTYPE* pComponentUUID) 197{ 198 /* 199 * Todo 200 */ 201 202 return OMX_ErrorNotImplemented; 203} 204 205OMX_ERRORTYPE ComponentBase::SendCommand( 206 OMX_IN OMX_HANDLETYPE hComponent, 207 OMX_IN OMX_COMMANDTYPE Cmd, 208 OMX_IN OMX_U32 nParam1, 209 OMX_IN OMX_PTR pCmdData) 210{ 211 ComponentBase *cbase; 212 213 if (!hComponent) 214 return OMX_ErrorBadParameter; 215 216 cbase = static_cast<ComponentBase *> 217 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 218 if (!cbase) 219 return OMX_ErrorBadParameter; 220 221 return cbase->CBaseSendCommand(hComponent, Cmd, nParam1, pCmdData); 222} 223 224OMX_ERRORTYPE ComponentBase::CBaseSendCommand( 225 OMX_IN OMX_HANDLETYPE hComponent, 226 OMX_IN OMX_COMMANDTYPE Cmd, 227 OMX_IN OMX_U32 nParam1, 228 OMX_IN OMX_PTR pCmdData) 229{ 230 /* 231 * Todo 232 */ 233 234 return OMX_ErrorNotImplemented; 235} 236 237OMX_ERRORTYPE ComponentBase::GetParameter( 238 OMX_IN OMX_HANDLETYPE hComponent, 239 OMX_IN OMX_INDEXTYPE nParamIndex, 240 OMX_INOUT OMX_PTR pComponentParameterStructure) 241{ 242 ComponentBase *cbase; 243 244 if (!hComponent) 245 return OMX_ErrorBadParameter; 246 247 cbase = static_cast<ComponentBase *> 248 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 249 if (!cbase) 250 return OMX_ErrorBadParameter; 251 252 return cbase->CBaseGetParameter(hComponent, nParamIndex, 253 pComponentParameterStructure); 254} 255 256OMX_ERRORTYPE ComponentBase::CBaseGetParameter( 257 OMX_IN OMX_HANDLETYPE hComponent, 258 OMX_IN OMX_INDEXTYPE nParamIndex, 259 OMX_INOUT OMX_PTR pComponentParameterStructure) 260{ 261 /* 262 * Todo 263 */ 264 265 return OMX_ErrorNotImplemented; 266} 267 268OMX_ERRORTYPE ComponentBase::SetParameter( 269 OMX_IN OMX_HANDLETYPE hComponent, 270 OMX_IN OMX_INDEXTYPE nIndex, 271 OMX_IN OMX_PTR pComponentParameterStructure) 272{ 273 ComponentBase *cbase; 274 275 if (!hComponent) 276 return OMX_ErrorBadParameter; 277 278 cbase = static_cast<ComponentBase *> 279 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 280 if (!cbase) 281 return OMX_ErrorBadParameter; 282 283 return cbase->CBaseSetParameter(hComponent, nIndex, 284 pComponentParameterStructure); 285} 286 287OMX_ERRORTYPE ComponentBase::CBaseSetParameter( 288 OMX_IN OMX_HANDLETYPE hComponent, 289 OMX_IN OMX_INDEXTYPE nIndex, 290 OMX_IN OMX_PTR pComponentParameterStructure) 291{ 292 /* 293 * Todo 294 */ 295 296 return OMX_ErrorNotImplemented; 297} 298 299OMX_ERRORTYPE ComponentBase::GetConfig( 300 OMX_IN OMX_HANDLETYPE hComponent, 301 OMX_IN OMX_INDEXTYPE nIndex, 302 OMX_INOUT OMX_PTR pComponentConfigStructure) 303{ 304 ComponentBase *cbase; 305 306 if (!hComponent) 307 return OMX_ErrorBadParameter; 308 309 cbase = static_cast<ComponentBase *> 310 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 311 if (!cbase) 312 return OMX_ErrorBadParameter; 313 314 return cbase->CBaseGetConfig(hComponent, nIndex, 315 pComponentConfigStructure); 316} 317 318OMX_ERRORTYPE ComponentBase::CBaseGetConfig( 319 OMX_IN OMX_HANDLETYPE hComponent, 320 OMX_IN OMX_INDEXTYPE nIndex, 321 OMX_INOUT OMX_PTR pComponentConfigStructure) 322{ 323 /* 324 * Todo 325 */ 326 327 return OMX_ErrorNotImplemented; 328} 329 330OMX_ERRORTYPE ComponentBase::SetConfig( 331 OMX_IN OMX_HANDLETYPE hComponent, 332 OMX_IN OMX_INDEXTYPE nIndex, 333 OMX_IN OMX_PTR pComponentConfigStructure) 334{ 335 ComponentBase *cbase; 336 337 if (!hComponent) 338 return OMX_ErrorBadParameter; 339 340 cbase = static_cast<ComponentBase *> 341 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 342 if (!cbase) 343 return OMX_ErrorBadParameter; 344 345 return cbase->CBaseSetConfig(hComponent, nIndex, 346 pComponentConfigStructure); 347} 348 349OMX_ERRORTYPE ComponentBase::CBaseSetConfig( 350 OMX_IN OMX_HANDLETYPE hComponent, 351 OMX_IN OMX_INDEXTYPE nIndex, 352 OMX_IN OMX_PTR pComponentConfigStructure) 353{ 354 /* 355 * Todo 356 */ 357 358 return OMX_ErrorNotImplemented; 359} 360 361OMX_ERRORTYPE ComponentBase::GetExtensionIndex( 362 OMX_IN OMX_HANDLETYPE hComponent, 363 OMX_IN OMX_STRING cParameterName, 364 OMX_OUT OMX_INDEXTYPE* pIndexType) 365{ 366 ComponentBase *cbase; 367 368 if (!hComponent) 369 return OMX_ErrorBadParameter; 370 371 cbase = static_cast<ComponentBase *> 372 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 373 if (!cbase) 374 return OMX_ErrorBadParameter; 375 376 return cbase->CBaseGetExtensionIndex(hComponent, cParameterName, 377 pIndexType); 378} 379 380OMX_ERRORTYPE ComponentBase::CBaseGetExtensionIndex( 381 OMX_IN OMX_HANDLETYPE hComponent, 382 OMX_IN OMX_STRING cParameterName, 383 OMX_OUT OMX_INDEXTYPE* pIndexType) 384{ 385 /* 386 * Todo 387 */ 388 389 return OMX_ErrorNotImplemented; 390} 391 392OMX_ERRORTYPE ComponentBase::GetState( 393 OMX_IN OMX_HANDLETYPE hComponent, 394 OMX_OUT OMX_STATETYPE* pState) 395{ 396 ComponentBase *cbase; 397 398 if (!hComponent) 399 return OMX_ErrorBadParameter; 400 401 cbase = static_cast<ComponentBase *> 402 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 403 if (!cbase) 404 return OMX_ErrorBadParameter; 405 406 return cbase->CBaseGetState(hComponent, pState); 407} 408 409OMX_ERRORTYPE ComponentBase::CBaseGetState( 410 OMX_IN OMX_HANDLETYPE hComponent, 411 OMX_OUT OMX_STATETYPE* pState) 412{ 413 /* 414 * Todo 415 */ 416 417 return OMX_ErrorNotImplemented; 418} 419 420OMX_ERRORTYPE ComponentBase::ComponentTunnelRequest( 421 OMX_IN OMX_HANDLETYPE hComponent, 422 OMX_IN OMX_U32 nPort, 423 OMX_IN OMX_HANDLETYPE hTunneledComponent, 424 OMX_IN OMX_U32 nTunneledPort, 425 OMX_INOUT OMX_TUNNELSETUPTYPE* pTunnelSetup) 426{ 427 ComponentBase *cbase; 428 429 if (!hComponent) 430 return OMX_ErrorBadParameter; 431 432 cbase = static_cast<ComponentBase *> 433 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 434 if (!cbase) 435 return OMX_ErrorBadParameter; 436 437 return cbase->CBaseComponentTunnelRequest(hComponent, nPort, 438 hTunneledComponent, 439 nTunneledPort, pTunnelSetup); 440} 441 442OMX_ERRORTYPE ComponentBase::CBaseComponentTunnelRequest( 443 OMX_IN OMX_HANDLETYPE hComp, 444 OMX_IN OMX_U32 nPort, 445 OMX_IN OMX_HANDLETYPE hTunneledComp, 446 OMX_IN OMX_U32 nTunneledPort, 447 OMX_INOUT OMX_TUNNELSETUPTYPE* pTunnelSetup) 448{ 449 /* 450 * Todo 451 */ 452 453 return OMX_ErrorNotImplemented; 454} 455 456OMX_ERRORTYPE ComponentBase::UseBuffer( 457 OMX_IN OMX_HANDLETYPE hComponent, 458 OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 459 OMX_IN OMX_U32 nPortIndex, 460 OMX_IN OMX_PTR pAppPrivate, 461 OMX_IN OMX_U32 nSizeBytes, 462 OMX_IN OMX_U8* pBuffer) 463{ 464 ComponentBase *cbase; 465 466 if (!hComponent) 467 return OMX_ErrorBadParameter; 468 469 cbase = static_cast<ComponentBase *> 470 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 471 if (!cbase) 472 return OMX_ErrorBadParameter; 473 474 return cbase->CBaseUseBuffer(hComponent, ppBufferHdr, nPortIndex, 475 pAppPrivate, nSizeBytes, pBuffer); 476} 477 478OMX_ERRORTYPE ComponentBase::CBaseUseBuffer( 479 OMX_IN OMX_HANDLETYPE hComponent, 480 OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 481 OMX_IN OMX_U32 nPortIndex, 482 OMX_IN OMX_PTR pAppPrivate, 483 OMX_IN OMX_U32 nSizeBytes, 484 OMX_IN OMX_U8* pBuffer) 485{ 486 /* 487 * Todo 488 */ 489 490 return OMX_ErrorNotImplemented; 491} 492 493OMX_ERRORTYPE ComponentBase::AllocateBuffer( 494 OMX_IN OMX_HANDLETYPE hComponent, 495 OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer, 496 OMX_IN OMX_U32 nPortIndex, 497 OMX_IN OMX_PTR pAppPrivate, 498 OMX_IN OMX_U32 nSizeBytes) 499{ 500 ComponentBase *cbase; 501 502 if (!hComponent) 503 return OMX_ErrorBadParameter; 504 505 cbase = static_cast<ComponentBase *> 506 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 507 if (!cbase) 508 return OMX_ErrorBadParameter; 509 510 return cbase->CBaseAllocateBuffer(hComponent, ppBuffer, nPortIndex, 511 pAppPrivate, nSizeBytes); 512} 513 514OMX_ERRORTYPE ComponentBase::CBaseAllocateBuffer( 515 OMX_IN OMX_HANDLETYPE hComponent, 516 OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer, 517 OMX_IN OMX_U32 nPortIndex, 518 OMX_IN OMX_PTR pAppPrivate, 519 OMX_IN OMX_U32 nSizeBytes) 520{ 521 /* 522 * Todo 523 */ 524 525 return OMX_ErrorNotImplemented; 526} 527 528OMX_ERRORTYPE ComponentBase::FreeBuffer( 529 OMX_IN OMX_HANDLETYPE hComponent, 530 OMX_IN OMX_U32 nPortIndex, 531 OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) 532{ 533 ComponentBase *cbase; 534 535 if (!hComponent) 536 return OMX_ErrorBadParameter; 537 538 cbase = static_cast<ComponentBase *> 539 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 540 if (!cbase) 541 return OMX_ErrorBadParameter; 542 543 return cbase->CBaseFreeBuffer(hComponent, nPortIndex, pBuffer); 544} 545 546OMX_ERRORTYPE ComponentBase::CBaseFreeBuffer( 547 OMX_IN OMX_HANDLETYPE hComponent, 548 OMX_IN OMX_U32 nPortIndex, 549 OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) 550{ 551 /* 552 * Todo 553 */ 554 555 return OMX_ErrorNotImplemented; 556} 557 558OMX_ERRORTYPE ComponentBase::EmptyThisBuffer( 559 OMX_IN OMX_HANDLETYPE hComponent, 560 OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) 561{ 562 ComponentBase *cbase; 563 564 if (!hComponent) 565 return OMX_ErrorBadParameter; 566 567 cbase = static_cast<ComponentBase *> 568 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 569 if (!cbase) 570 return OMX_ErrorBadParameter; 571 572 return cbase->CBaseEmptyThisBuffer(hComponent, pBuffer); 573} 574 575OMX_ERRORTYPE ComponentBase::CBaseEmptyThisBuffer( 576 OMX_IN OMX_HANDLETYPE hComponent, 577 OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) 578{ 579 /* 580 * Todo 581 */ 582 583 return OMX_ErrorNotImplemented; 584} 585 586OMX_ERRORTYPE ComponentBase::FillThisBuffer( 587 OMX_IN OMX_HANDLETYPE hComponent, 588 OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) 589{ 590 ComponentBase *cbase; 591 592 if (!hComponent) 593 return OMX_ErrorBadParameter; 594 595 cbase = static_cast<ComponentBase *> 596 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 597 if (!cbase) 598 return OMX_ErrorBadParameter; 599 600 return cbase->CBaseFillThisBuffer(hComponent, pBuffer); 601} 602 603OMX_ERRORTYPE ComponentBase::CBaseFillThisBuffer( 604 OMX_IN OMX_HANDLETYPE hComponent, 605 OMX_IN OMX_BUFFERHEADERTYPE* pBuffer) 606{ 607 /* 608 * Todo 609 */ 610 611 return OMX_ErrorNotImplemented; 612} 613 614OMX_ERRORTYPE ComponentBase::SetCallbacks( 615 OMX_IN OMX_HANDLETYPE hComponent, 616 OMX_IN OMX_CALLBACKTYPE* pCallbacks, 617 OMX_IN OMX_PTR pAppData) 618{ 619 ComponentBase *cbase; 620 621 if (!hComponent) 622 return OMX_ErrorBadParameter; 623 624 cbase = static_cast<ComponentBase *> 625 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 626 if (!cbase) 627 return OMX_ErrorBadParameter; 628 629 return cbase->CBaseSetCallbacks(hComponent, pCallbacks, pAppData); 630} 631 632OMX_ERRORTYPE ComponentBase::CBaseSetCallbacks( 633 OMX_IN OMX_HANDLETYPE hComponent, 634 OMX_IN OMX_CALLBACKTYPE* pCallbacks, 635 OMX_IN OMX_PTR pAppData) 636{ 637 /* 638 * Todo 639 */ 640 641 return OMX_ErrorNotImplemented; 642} 643 644OMX_ERRORTYPE ComponentBase::ComponentDeInit( 645 OMX_IN OMX_HANDLETYPE hComponent) 646{ 647 ComponentBase *cbase; 648 649 if (!hComponent) 650 return OMX_ErrorBadParameter; 651 652 cbase = static_cast<ComponentBase *> 653 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 654 if (!cbase) 655 return OMX_ErrorBadParameter; 656 657 return cbase->CBaseComponentDeInit(hComponent); 658} 659 660OMX_ERRORTYPE ComponentBase::CBaseComponentDeInit( 661 OMX_IN OMX_HANDLETYPE hComponent) 662{ 663 /* 664 * Todo 665 */ 666 667 return OMX_ErrorNotImplemented; 668} 669 670OMX_ERRORTYPE ComponentBase::UseEGLImage( 671 OMX_IN OMX_HANDLETYPE hComponent, 672 OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 673 OMX_IN OMX_U32 nPortIndex, 674 OMX_IN OMX_PTR pAppPrivate, 675 OMX_IN void* eglImage) 676{ 677 ComponentBase *cbase; 678 679 if (!hComponent) 680 return OMX_ErrorBadParameter; 681 682 cbase = static_cast<ComponentBase *> 683 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 684 if (!cbase) 685 return OMX_ErrorBadParameter; 686 687 return cbase->CBaseUseEGLImage(hComponent, ppBufferHdr, nPortIndex, 688 pAppPrivate, eglImage); 689} 690 691OMX_ERRORTYPE ComponentBase::CBaseUseEGLImage( 692 OMX_IN OMX_HANDLETYPE hComponent, 693 OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 694 OMX_IN OMX_U32 nPortIndex, 695 OMX_IN OMX_PTR pAppPrivate, 696 OMX_IN void* eglImage) 697{ 698 /* 699 * Todo 700 */ 701 702 return OMX_ErrorNotImplemented; 703} 704 705OMX_ERRORTYPE ComponentBase::ComponentRoleEnum( 706 OMX_IN OMX_HANDLETYPE hComponent, 707 OMX_OUT OMX_U8 *cRole, 708 OMX_IN OMX_U32 nIndex) 709{ 710 ComponentBase *cbase; 711 712 if (!hComponent) 713 return OMX_ErrorBadParameter; 714 715 cbase = static_cast<ComponentBase *> 716 (((OMX_COMPONENTTYPE *)hComponent)->pComponentPrivate); 717 if (!cbase) 718 return OMX_ErrorBadParameter; 719 720 return cbase->CBaseComponentRoleEnum(hComponent, cRole, nIndex); 721} 722 723OMX_ERRORTYPE ComponentBase::CBaseComponentRoleEnum( 724 OMX_IN OMX_HANDLETYPE hComponent, 725 OMX_OUT OMX_U8 *cRole, 726 OMX_IN OMX_U32 nIndex) 727{ 728 if (hComponent != (OMX_HANDLETYPE *)this->handle) 729 return OMX_ErrorBadParameter; 730 731 if (nIndex > nr_roles) 732 return OMX_ErrorBadParameter; 733 734 strncpy((char *)cRole, (const char *)roles[nIndex], 735 OMX_MAX_STRINGNAME_SIZE); 736 return OMX_ErrorNone; 737} 738 739/* end of component methods & helpers */ 740 741/* 742 * omx header manipuation 743 */ 744void ComponentBase::SetTypeHeader(OMX_PTR type, OMX_U32 size) 745{ 746 OMX_U32 *nsize; 747 OMX_VERSIONTYPE *nversion; 748 749 if (!type) 750 return; 751 752 nsize = (OMX_U32 *)type; 753 nversion = (OMX_VERSIONTYPE *)((OMX_U8 *)type + sizeof(OMX_U32)); 754 755 *nsize = sizeof(size); 756 nversion->nVersion = OMX_SPEC_VERSION; 757} 758 759OMX_BOOL ComponentBase::CheckTypeHeader(OMX_PTR type, OMX_U32 size) 760{ 761 OMX_U32 *nsize; 762 OMX_VERSIONTYPE *nversion; 763 OMX_U8 mismatch = 0; 764 765 if (!type) 766 return OMX_FALSE; 767 768 nsize = (OMX_U32 *)type; 769 nversion = (OMX_VERSIONTYPE *)((OMX_U8 *)type + sizeof(OMX_U32)); 770 771 mismatch = (*nsize != sizeof(size)) ? 1 : 0; 772 mismatch |= (nversion->nVersion != OMX_SPEC_VERSION) ? 1 : 0; 773 774 if (mismatch) 775 return OMX_TRUE; 776 else 777 return OMX_FALSE; 778} 779