Creating a Media Plug-in

From LinuxMCE
Revision as of 13:54, 27 August 2009 by Ray N (Talk | contribs) (Reverted edit of Ray N, changed back to last version by Tschak909)

Jump to: navigation, search

To create the Media Plug-In, you must

  • Create the DCE Skeleton
  • Implement the methods. at very least, the base plugin subclass, and a media stream subclass.

Implementing DCE Skeleton

First, you must create the appropriate information in the database so that the DCEGen tool can create a C++ skeleton for you. The new templates can be created using the Device Templates menu.

The Necessary DCE Parameters

  • Create a DCE device implemented in C++, make sure to use the category "Media Router Plugins < Plugins for the Router"
  • Plug-ins traditionally have the name of the paired media player and the name "Plug-In" i.e. "MAME Plug-In"
  • Use the following form as a template:
    • This Device is Controlled by Category: DCERouter
    • Is PlugIn should be selected
    • Device Data should have the following added to it:
      • #85 Priority - set a default value of 70, check Allowed to Modify
    • Events should have the following added to it:
      • Playback Info Changed

Once this is done, use DCEGen to create the appropriate devices.

Now that the code is created, you need to implement the following methods:

This is inside MAME_Plugin.h

#ifndef MAME_PlugIn_h
#define MAME_PlugIn_h

//	DCE Implemenation for #1906 MAME Plug-In

#include "Gen_Devices/MAME_PlugInBase.h"

#include "../Media_Plugin/Media_Plugin.h"
#include "../Media_Plugin/MediaStream.h"
#include "../Media_Plugin/MediaHandlerBase.h"

#include "MAMEMediaStream.h"

namespace DCE
	class MAME_PlugIn : public MAME_PlugIn_Command, public MediaHandlerBase

		pluto_pthread_mutex_t m_MAMEMediaMutex; //protect us from ourselves

		// Constructors/Destructor
		MAME_PlugIn(int DeviceID, string ServerAddress,bool bConnectEventHandler=true,bool bLocalMode=false,class Router *pRouter=NULL);
		virtual ~MAME_PlugIn();
		virtual bool GetConfig();
		virtual bool Register();
		virtual void ReceivedCommandForChild(DeviceData_Impl *pDeviceData_Impl,string &sCMD_Result,Message *pMessage);
		virtual void ReceivedUnknownCommand(string &sCMD_Result,Message *pMessage);

	// Private member variables


		class Orbiter_Plugin *m_pOrbiter_Plugin;

	/** Mandatory implementations */

		* @brief
		virtual class MediaStream *CreateMediaStream( class MediaHandlerInfo *pMediaHandlerInfo, int iPK_MediaProvider, vector<class EntertainArea *> &vectEntertainArea, MediaDevice *pMediaDevice, int iPK_Users, deque<MediaFile *> *dequeFilenames, int StreamID );

		* @brief Start media playback
		virtual bool StartMedia( class MediaStream *pMediaStream,string &sError );

		* @brief Stop media playback
		virtual bool StopMedia( class MediaStream *pMediaStream );

		virtual MediaDevice *FindMediaDeviceForEntertainArea(EntertainArea *pEntertainArea);
		* @brief We need to see all media inserted events so we can start the appropriate media devices

		MAMEMediaStream *ConvertToMAMEMediaStream(MediaStream *pMediaStream, string callerIdMessage = "");

				Do not change the declarations

			*****DATA***** accessors inherited from base class
	int DATA_Get_Priority();

			*****EVENT***** accessors inherited from base class
	void EVENT_Playback_Info_Changed(string sMediaDescription,string sSectionDescription,string sSynposisDescription);

			*****COMMANDS***** we need to implement



Some notes here, basically, these are the methods you need to get a working media plugin.

  • continue*

Template:Needs Programmer Review