root/modules/platinum/GPACMediaController.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 *                      GPAC - Multimedia Framework C SDK
 *
 *                      Authors: Jean Le Feuvre
 *                      Copyright (c) Telecom ParisTech 2009-2012
 *                      All rights reserved
 *
 *  This file is part of GPAC / Platinum UPnP module
 *
 *  GPAC is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  GPAC is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *
 *      ----------------------------------------------------------------------------------
 *              PLATINUM IS LICENSED UNDER GPL or commercial agreement - cf platinum license
 *      ----------------------------------------------------------------------------------
 *
 */

#ifndef _GPAC_MEDIA_CONTROLLER_H_
#define _GPAC_MEDIA_CONTROLLER_H_

#include "PltMediaServer.h"
#include "PltMediaController.h"
#include "PltMediaBrowser.h"
#include "NptMap.h"
#include "NptStack.h"

#include <gpac/thread.h>

typedef struct {
        NPT_SharedVariable shared_var;
        NPT_Result         res;
        PLT_BrowseInfo     info;
} GPAC_BrowseData;

/*basic class to hold each media renderer*/
class GPAC_MediaRendererItem
{
public:
        GPAC_MediaRendererItem(PLT_DeviceDataReference device, NPT_String uuid) : m_device(device), m_UUID(uuid) { }
        PLT_DeviceDataReference m_device;
        NPT_String m_UUID;
};

/*basic class to hold each media server*/
class GPAC_MediaServerItem
{
public:
        GPAC_MediaServerItem(PLT_DeviceDataReference device, NPT_String uuid) : m_device(device), m_UUID(uuid) , m_BrowseResults(NULL) { }
        PLT_DeviceDataReference m_device;
        NPT_String m_UUID;
        /*results of the last browse request on this server*/
        PLT_MediaObjectListReference m_BrowseResults;
        /*parent directory stack*/
        NPT_Stack<NPT_String> m_ParentDirectories;
};

typedef NPT_Reference<GPAC_BrowseData> GPAC_BrowseDataReference;

class GF_UPnP;

class GPAC_MediaController : public PLT_CtrlPointListener,
        public PLT_MediaControllerDelegate,
        public PLT_MediaBrowserDelegate
{
public:
        GPAC_MediaController(PLT_CtrlPointReference& ctrlPoint, GF_UPnP *upnp);
        ~GPAC_MediaController();

        virtual NPT_Result OnDeviceAdded(PLT_DeviceDataReference& device)
        {
                return NPT_SUCCESS;
        }
        virtual NPT_Result OnDeviceRemoved(PLT_DeviceDataReference& device)
        {
                return NPT_SUCCESS;
        }
        virtual NPT_Result OnActionResponse(NPT_Result           res,
                                            PLT_ActionReference& action,
                                            void*                userdata);
        virtual NPT_Result OnEventNotify(PLT_Service* service, NPT_List<PLT_StateVariable*>* vars);

        // PLT_MediaControllerDelegate
        virtual bool OnMRAdded(PLT_DeviceDataReference& device);
        virtual void OnMRRemoved(PLT_DeviceDataReference& device);
        virtual void OnMRStateVariablesChanged(PLT_Service* /* service */, NPT_List<PLT_StateVariable*>* /* vars */);

        //PLT_MediaBrowserDelegate
        virtual bool OnMSAdded(PLT_DeviceDataReference& device);
        virtual void OnMSRemoved(PLT_DeviceDataReference& device);
        virtual void OnMSStateVariablesChanged(PLT_Service *service, NPT_List<PLT_StateVariable*>* vars);
        virtual void OnBrowseResult(NPT_Result               res,
                                    PLT_DeviceDataReference& device,
                                    PLT_BrowseInfo*          info,
                                    void*                    userdata);

        NPT_Result Browse(GPAC_MediaServerItem *server, const char *id, const char *filter);


        GF_List *m_MediaRenderers;
        GF_List *m_MediaServers;

        /* The UPnP MediaRenderer control point. */
        PLT_MediaController*    m_MediaController;
        /* The UPnP MediaServer control point. */
        PLT_MediaBrowser *m_MediaBrowser;

protected:
        NPT_Result Browse(GPAC_BrowseDataReference& browse_data,
                          PLT_DeviceDataReference& device,
                          const char*              object_id,
                          NPT_Int32                index,
                          NPT_Int32                count,
                          bool                     browse_metadata = false,
                          const char*              filter = "*",
                          const char*              sort = "");

private:
        NPT_Result  WaitForResponse(NPT_SharedVariable& shared_var);

        GF_UPnP *m_pUPnP;
        GF_Mutex *m_ControlPointLock;

};

#endif /* _GPAC_MEDIA_CONTROLLER_H_ */


/* [<][>][^][v][top][bottom][index][help] */