/*
 * Copyright 2010 Trident Microsystems (Far East) Ltd. All rights reserved.
 * All prior copyright rights in this work and the accompanying software
 * products transferred to Trident Microsystems (Far East) Ltd. by written
 * agreement.
 */
/*****************************************************************************/
/* Copyright (c) 2010 NXP B.V.  All rights are reserved.                     */
/*                                                                           */
/* Redistribution and use in source and binary forms, with or without        */
/* modification, are permitted provided that the following conditions        */
/* are met:                                                                  */
/*                                                                           */
/* Redistributions of source code must retain the above copyright            */
/* notice, this list of conditions and the following disclaimer.             */
/*                                                                           */
/* Redistributions in binary form must reproduce the above copyright         */
/* notice, this list of conditions and the following disclaimer in the       */
/* documentation and/or other materials provided with the distribution.      */
/*                                                                           */
/* Neither the name of NXP nor the names of its                              */
/* contributors may be used to endorse or promote products derived from      */
/* this software without specific prior written permission.                  */
/*                                                                           */
/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS       */
/* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT         */
/* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR     */
/* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT      */
/* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,     */
/* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT          */
/* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,     */
/* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY     */
/* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT       */
/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE         */
/* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH          */
/* DAMAGE.                                                                   */
/*                                                                           */
/*****************************************************************************/
/**
    @file   phStbStreamingSystem_StreamingComponent.h
    @brief  Interface for the Streaming System to make calls to streaming
            components

@b  Component:  phStbStreamingSystem.

    This header file is the implementation of the StreamingComponent interface
    from the Streaming System detailed design.
*//*

Rev Date        Author      Comments
--------------------------------------------------------------------------------
  1 20050603    J Grant     Skeleton
  2 20050616    burningh    Fix crosscheck comments
  3 20050621    burningh    Adding User Data to StreamingComponent interface
  4 20050711    mpage       Adding Configure Op
  5 20050926    burningh    Implement _Dump functions
  6 20051018    burningh    Add return code to StreamingComponent interface
  7 20060124    batelaan    Add extern "C" for use with C++
  8 20071217    burningh    Improve documentation of top-level APIs
  9 20080626    burningh    Update license text
 10 20090120    batelaan    Update file copyright/license text
--------------------------------------------------------------------------------
    For consistency and standardisation retain the Section Separators.
*/

#ifndef PHSTBSTREAMINGSYSTEM_STREAMINGCOMPONENT_H
#define PHSTBSTREAMINGSYSTEM_STREAMINGCOMPONENT_H

/*******************
* INCLUDE FILES    *
********************/

#ifdef __cplusplus
extern "C"
{
#endif

/**************************************************************************
* EXPORTED MACROS         PH[<LNX|TM|NONE>]_IPSTBSTREAMINGSYSTEM_STREAMINGCOMPONENT_<_WORD>+        *
***************************************************************************/

/*********************************************************************
* EXPORTED TYPEDEFS       [p]phStbStreamingSystem_StreamingComponent_<Word>+_t  *
**********************************************************************/

/** Enumeration of valid Streaming Component operations
    @see phStbStreamingSystem_StreamingComponent_t for full details */
typedef enum phStbStreamingSystem_StreamingComponentOp
{
    phStbStreamingSystem_StreamingComponentOpConfigure, /**< Configure streaming component */
    phStbStreamingSystem_StreamingComponentOpStart,     /**< Start streaming component */
    phStbStreamingSystem_StreamingComponentOpStop,      /**< Stop streaming component */
    phStbStreamingSystem_StreamingComponentOpDump       /**< Dump debug output for streaming component */
} phStbStreamingSystem_StreamingComponentOp_t;


/******************************************************************************/
/** Performs an operation from the StreamingComponent interface, depending
    on the value of the parameter "op"
    op == Configure: Cause the component's configuration to be updated
    op == Start:     Start processing input packets and generating output packets
    op == Stop:      Stop processing packets
                     Flush all packets currently queued for processing
    op == Dump:      Dump debugging information related to streaming

    Constraints:
        None

    @param op         IN  Operation to be performed
    @param pData      IN  op == Configure: Pointer to a
                                           phStbStreamingSystem_ConfigureArgs_t
                          op == Start:     Not used
                          op == Stop:      Not used
                          op == Dump:      Pointer to a (char*) which must be set
                                           to the address of the string to dump
    @param pUserData  IN  The user data that was passed in on resource creation

    @retval TM_OK           Success
    @retval AnotherValue    Error occured.
*/
typedef tmErrorCode_t (*phStbStreamingSystem_StreamingComponent_t)
    (phStbStreamingSystem_StreamingComponentOp_t op,
     void* pData,
     void* pUserData);


/******************************************************************************/
/** Additional data passed to a client with a Configure operation. This structure
    should contain all the information required for a streaming component's source
    and sink pins. */
typedef struct phStbStreamingSystem_ConfigureArgs
{
    /** Number of source pin configurations in the array. */
    UInt32 numSourcePins;
    /** Number of sink pin configurations in the array. */
    UInt32 numSinkPins;
    /** Array of source pin configurations. */
    void** ppSourceConfigs;
    /** Array of sink pin configurations. */
    void** ppSinkConfigs;
} phStbStreamingSystem_ConfigureArgs_t;


/**************************************************************************
* EXPORTED DATA      g[k|p|kp|pk|kpk]ph[<lnx|tm|NONE>]StbStreamingSystem_StreamingComponent_<Word>+ *
***************************************************************************/

/****************************************************************************
* EXPORTED FUNCTION PROTOTYPES     ph[<lnx|tm|NONE>]StbStreamingSystem_StreamingComponent[_<Word>+]   *
*****************************************************************************/

/******************************************************************************/
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/

#ifdef __cplusplus
}
#endif

#endif /* PHSTBSTREAMINGSYSTEM_STREAMINGCOMPONENT_H      Do not add any thing below this line */

