Skip to content

Commit

Permalink
player: chromecast ops - name or ip configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
juanrubio committed Nov 10, 2017
1 parent c7138cf commit a71de7f
Show file tree
Hide file tree
Showing 7 changed files with 168 additions and 118 deletions.
47 changes: 12 additions & 35 deletions player/src/services/chromecast/tizchromecastconfig.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@

#include <OMX_TizoniaExt.h>

#include "tizgraphtypes.hpp"
#include "tizgraphconfig.hpp"
#include "tizgraphtypes.hpp"

namespace tiz
{
Expand All @@ -44,54 +44,31 @@ namespace tiz
{

public:
chromecastconfig (const tizplaylist_ptr_t &playlist, const std::string &user,
const std::string &pass, const std::string &device_id,
const OMX_TIZONIA_AUDIO_GMUSICPLAYLISTTYPE playlist_type,
const bool is_unlimited_search = false)
: config (playlist),
user_ (user),
pass_ (pass),
device_id_ (device_id),
playlist_type_ (playlist_type),
is_unlimited_search_ (is_unlimited_search)
chromecastconfig (const std::string &cc_name_or_ip,
const tizgraphconfig_ptr_t &service_config)
: config (service_config->get_playlist ()),
name_or_ip_ (cc_name_or_ip),
service_config_ (service_config)
{
}

~chromecastconfig ()
{
}

std::string get_user_name () const
{
return user_;
}

std::string get_user_pass () const
{
return pass_;
}

std::string get_device_id () const
{
return device_id_;
}

OMX_TIZONIA_AUDIO_GMUSICPLAYLISTTYPE get_playlist_type () const
std::string get_name_or_ip () const
{
return playlist_type_;
return name_or_ip_;
}

bool is_unlimited_search () const
tizgraphconfig_ptr_t get_service_config () const
{
return is_unlimited_search_;
return service_config_;
}

protected:
const std::string user_;
const std::string pass_;
const std::string device_id_;
const OMX_TIZONIA_AUDIO_GMUSICPLAYLISTTYPE playlist_type_;
bool is_unlimited_search_;
const std::string name_or_ip_;
tizgraphconfig_ptr_t service_config_;
};
} // namespace graph
} // namespace tiz
Expand Down
5 changes: 3 additions & 2 deletions player/src/services/chromecast/tizchromecastgraph.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,10 @@ graph::ops *graph::chromecast::do_init ()
omx_comp_name_lst_t comp_list;
comp_list.push_back ("OMX.Aratelia.audio_renderer.chromecast");

// We'll push an empty role list. The component role will be set once it's
// known what we need
// We'll push a default role. The actual component role will be set once it's
// known.
omx_comp_role_lst_t role_list;
role_list.push_back ("audio_renderer.chromecast");

return new chromecastops (this, comp_list, role_list);
}
Expand Down
126 changes: 82 additions & 44 deletions player/src/services/chromecast/tizchromecastgraphops.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,20 @@
#include <boost/bind.hpp>
#include <boost/make_shared.hpp>

#include <OMX_Core.h>
#include <OMX_Component.h>
#include <OMX_Core.h>
#include <OMX_TizoniaExt.h>
#include <tizplatform.h>

#include "tizchromecastconfig.hpp"
#include "tizchromecastgraphops.hpp"
#include <tizdirbleconfig.hpp>
#include <tizgmusicconfig.hpp>
#include <tizgraph.hpp>
#include <tizgraphutil.hpp>
#include <tizprobe.hpp>
#include <tizgraph.hpp>
#include <tizgmusicconfig.hpp>
#include <tizscloudconfig.hpp>
#include <tizdirbleconfig.hpp>
#include <tizyoutubeconfig.hpp>
#include "tizchromecastconfig.hpp"
#include "tizchromecastgraphops.hpp"

#ifdef TIZ_LOG_CATEGORY_NAME
#undef TIZ_LOG_CATEGORY_NAME
Expand All @@ -60,53 +60,67 @@ namespace graph = tiz::graph;
//
// chromecastops
//
graph::chromecastops::chromecastops (graph *p_graph,
const omx_comp_name_lst_t &comp_lst,
const omx_comp_role_lst_t &role_lst)
graph::chromecastops::chromecastops (graph* p_graph,
const omx_comp_name_lst_t& comp_lst,
const omx_comp_role_lst_t& role_lst)
: tiz::graph::ops (p_graph, comp_lst, role_lst),
encoding_ (OMX_AUDIO_CodingAutoDetect),
config_func_()
config_service_func_ (),
cc_config_ ()
{
}

void graph::chromecastops::do_load ()
{
assert (comp_lst_.size () == 1);
assert (role_lst_.empty ());
assert (role_lst_.size () == 1);
assert (config_);

const std::type_info& ti_current = typeid(*config_);
const std::type_info& ti_gmusic = typeid(tizgmusicconfig_ptr_t);
const std::type_info& ti_scloud = typeid(tizscloudconfig_ptr_t);
const std::type_info& ti_dirble = typeid(tizdirbleconfig_ptr_t);
const std::type_info& ti_youtube = typeid(tizyoutubeconfig_ptr_t);
// Clear the role list. We'll override it with a new role once we know what
// we need.
role_lst_.clear ();

tizchromecastconfig_ptr_t cc_config_
= boost::dynamic_pointer_cast< chromecastconfig > (config_);
assert (cc_config_);

const std::type_info& ti_current
= typeid (*(cc_config_->get_service_config ()));
const std::type_info& ti_gmusic = typeid (tizgmusicconfig_ptr_t);
const std::type_info& ti_scloud = typeid (tizscloudconfig_ptr_t);
const std::type_info& ti_dirble = typeid (tizdirbleconfig_ptr_t);
const std::type_info& ti_youtube = typeid (tizyoutubeconfig_ptr_t);

if (ti_current == ti_gmusic)
{
role_lst_.push_back ("audio_renderer.chromecast.gmusic");
config_func_ = boost::bind(&tiz::graph::chromecastops::do_configure_gmusic, this);
}
{
role_lst_.push_back ("audio_renderer.chromecast.gmusic");
config_service_func_
= boost::bind (&tiz::graph::chromecastops::do_configure_gmusic, this);
}
else if (ti_current == ti_scloud)
{
role_lst_.push_back ("audio_renderer.chromecast.scloud");
config_func_ = boost::bind(&tiz::graph::chromecastops::do_configure_scloud, this);
}
{
role_lst_.push_back ("audio_renderer.chromecast.scloud");
config_service_func_
= boost::bind (&tiz::graph::chromecastops::do_configure_scloud, this);
}
else if (ti_current == ti_dirble)
{
role_lst_.push_back ("audio_renderer.chromecast.dirble");
config_func_ = boost::bind(&tiz::graph::chromecastops::do_configure_dirble, this);
}
{
role_lst_.push_back ("audio_renderer.chromecast.dirble");
config_service_func_
= boost::bind (&tiz::graph::chromecastops::do_configure_dirble, this);
}
else if (ti_current == ti_youtube)
{
role_lst_.push_back ("audio_renderer.chromecast.youtube");
config_func_ = boost::bind(&tiz::graph::chromecastops::do_configure_youtube, this);
}
{
role_lst_.push_back ("audio_renderer.chromecast.youtube");
config_service_func_
= boost::bind (&tiz::graph::chromecastops::do_configure_youtube, this);
}
else
{
std::string msg ("Unable to set a suitable component role");
BOOST_ASSERT_MSG (false, msg.c_str());
G_OPS_BAIL_IF_ERROR (OMX_ErrorComponentNotFound, msg.c_str ());
}
{
std::string msg ("Unable to set a suitable component role");
BOOST_ASSERT_MSG (false, msg.c_str ());
G_OPS_BAIL_IF_ERROR (OMX_ErrorComponentNotFound, msg.c_str ());
}
// At this point we are instantiating a graph with a single component.
tiz::graph::ops::do_load ();
}
Expand All @@ -115,7 +129,14 @@ void graph::chromecastops::do_configure ()
{
if (last_op_succeeded ())
{
config_func_();
// Set the chromecast name or ip parameter
do_configure_chromecast ();

if (last_op_succeeded ())
{
// Now set the service parameters
config_service_func_ ();
}
}
}

Expand Down Expand Up @@ -168,8 +189,8 @@ bool graph::chromecastops::is_fatal_error (const OMX_ERRORTYPE error) const
}

void graph::chromecastops::do_record_fatal_error (const OMX_HANDLETYPE handle,
const OMX_ERRORTYPE error,
const OMX_U32 port)
const OMX_ERRORTYPE error,
const OMX_U32 port)
{
tiz::graph::ops::do_record_fatal_error (handle, error, port);
if (error == OMX_ErrorContentURIError)
Expand All @@ -178,10 +199,21 @@ void graph::chromecastops::do_record_fatal_error (const OMX_HANDLETYPE handle,
}
}

void graph::chromecastops::do_configure_chromecast ()
{
assert (cc_config_);

G_OPS_BAIL_IF_ERROR (tiz::graph::util::set_chromecast_name_or_ip (
handles_[0], cc_config_->get_name_or_ip ()),
"Unable to set OMX_TizoniaIndexParamChromecastSession");
}

void graph::chromecastops::do_configure_gmusic ()
{
assert (cc_config_);
tizgmusicconfig_ptr_t gmusic_config
= boost::dynamic_pointer_cast< gmusicconfig > (config_);
= boost::dynamic_pointer_cast< gmusicconfig > (
cc_config_->get_service_config ());
assert (gmusic_config);

G_OPS_BAIL_IF_ERROR (
Expand All @@ -200,8 +232,10 @@ void graph::chromecastops::do_configure_gmusic ()

void graph::chromecastops::do_configure_scloud ()
{
assert (cc_config_);
tizscloudconfig_ptr_t scloud_config
= boost::dynamic_pointer_cast< scloudconfig > (config_);
= boost::dynamic_pointer_cast< scloudconfig > (
cc_config_->get_service_config ());
assert (scloud_config);

G_OPS_BAIL_IF_ERROR (
Expand All @@ -218,8 +252,10 @@ void graph::chromecastops::do_configure_scloud ()

void graph::chromecastops::do_configure_dirble ()
{
assert (cc_config_);
tizdirbleconfig_ptr_t dirble_config
= boost::dynamic_pointer_cast< dirbleconfig > (config_);
= boost::dynamic_pointer_cast< dirbleconfig > (
cc_config_->get_service_config ());
assert (dirble_config);

G_OPS_BAIL_IF_ERROR (tiz::graph::util::set_dirble_api_key (
Expand All @@ -235,8 +271,10 @@ void graph::chromecastops::do_configure_dirble ()

void graph::chromecastops::do_configure_youtube ()
{
assert (cc_config_);
tizyoutubeconfig_ptr_t youtube_config
= boost::dynamic_pointer_cast< youtubeconfig > (config_);
= boost::dynamic_pointer_cast< youtubeconfig > (
cc_config_->get_service_config ());
assert (youtube_config);

G_OPS_BAIL_IF_ERROR (
Expand Down
9 changes: 6 additions & 3 deletions player/src/services/chromecast/tizchromecastgraphops.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@

#include <boost/function.hpp>

#include "tizgraphops.hpp"
#include <tizgraphtypes.hpp>
#include <tizgraphops.hpp>

namespace tiz
{
Expand All @@ -57,6 +58,7 @@ namespace tiz
const OMX_U32 port);

private:
void do_configure_chromecast ();
void do_configure_gmusic ();
void do_configure_scloud ();
void do_configure_dirble ();
Expand All @@ -65,15 +67,16 @@ namespace tiz
OMX_ERRORTYPE get_encoding_type_from_chromecast_source ();

private:
typedef boost::function< void() > config_func_t;
typedef boost::function< void() > config_service_func_t;

private:
// re-implemented from the base class
bool probe_stream_hook ();

private:
OMX_AUDIO_CODINGTYPE encoding_;
config_func_t config_func_;
config_service_func_t config_service_func_;
tizchromecastconfig_ptr_t cc_config_;
};
} // namespace graph
} // namespace tiz
Expand Down
16 changes: 16 additions & 0 deletions player/src/tizgraphutil.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,22 @@ graph::util::set_flac_type (
return OMX_ErrorNone;
}

OMX_ERRORTYPE graph::util::set_chromecast_name_or_ip (
const OMX_HANDLETYPE handle, const std::string &name_or_ip)
{
// Set the Chromecast name or ip address
OMX_TIZONIA_PARAM_CHROMECASTSESSIONTYPE sessiontype;
TIZ_INIT_OMX_STRUCT (sessiontype);
tiz_check_omx (OMX_GetParameter (
handle,
static_cast< OMX_INDEXTYPE > (OMX_TizoniaIndexParamChromecastSession),
&sessiontype));
tiz::graph::util::copy_omx_string (sessiontype.cNameOrIpAddr, name_or_ip);
return OMX_SetParameter (handle, static_cast< OMX_INDEXTYPE > (
OMX_TizoniaIndexParamChromecastSession),
&sessiontype);
}

OMX_ERRORTYPE graph::util::set_gmusic_user_and_device_id (
const OMX_HANDLETYPE handle, const std::string &user,
const std::string &pass, const std::string &device_id)
Expand Down
Loading

0 comments on commit a71de7f

Please sign in to comment.