Commit 0a33ab16 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

media: vidtv: avoid data copy when initializing the multiplexer

Initialize the fields of the arguments directly when
declaring it, and pass the args as a pointer, instead of
copying them.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 0d271a79
...@@ -161,7 +161,17 @@ vidtv_bridge_on_new_pkts_avail(void *priv, u8 *buf, u32 npkts) ...@@ -161,7 +161,17 @@ vidtv_bridge_on_new_pkts_avail(void *priv, u8 *buf, u32 npkts)
static int vidtv_start_streaming(struct vidtv_dvb *dvb) static int vidtv_start_streaming(struct vidtv_dvb *dvb)
{ {
struct vidtv_mux_init_args mux_args = {0}; struct vidtv_mux_init_args mux_args = {
.mux_rate_kbytes_sec = mux_rate_kbytes_sec,
.on_new_packets_available_cb = vidtv_bridge_on_new_pkts_avail,
.pcr_period_usecs = pcr_period_msec * USEC_PER_MSEC,
.si_period_usecs = si_period_msec * USEC_PER_MSEC,
.pcr_pid = pcr_pid,
.transport_stream_id = VIDTV_DEFAULT_TS_ID,
.network_id = VIDTV_DEFAULT_NETWORK_ID,
.network_name = VIDTV_DEFAULT_NETWORK_NAME,
.priv = dvb,
};
struct device *dev = &dvb->pdev->dev; struct device *dev = &dvb->pdev->dev;
u32 mux_buf_sz; u32 mux_buf_sz;
...@@ -170,21 +180,13 @@ static int vidtv_start_streaming(struct vidtv_dvb *dvb) ...@@ -170,21 +180,13 @@ static int vidtv_start_streaming(struct vidtv_dvb *dvb)
return 0; return 0;
} }
mux_buf_sz = (mux_buf_sz_pkts) ? mux_buf_sz_pkts : vidtv_bridge_mux_buf_sz_for_mux_rate(); mux_buf_sz = (mux_buf_sz_pkts) ? mux_buf_sz_pkts :
vidtv_bridge_mux_buf_sz_for_mux_rate();
mux_args.mux_rate_kbytes_sec = mux_rate_kbytes_sec;
mux_args.on_new_packets_available_cb = vidtv_bridge_on_new_pkts_avail;
mux_args.mux_buf_sz = mux_buf_sz; mux_args.mux_buf_sz = mux_buf_sz;
mux_args.pcr_period_usecs = pcr_period_msec * 1000;
mux_args.si_period_usecs = si_period_msec * 1000;
mux_args.pcr_pid = pcr_pid;
mux_args.transport_stream_id = VIDTV_DEFAULT_TS_ID;
mux_args.network_id = VIDTV_DEFAULT_NETWORK_ID,
mux_args.network_name = VIDTV_DEFAULT_NETWORK_NAME,
mux_args.priv = dvb;
dvb->streaming = true; dvb->streaming = true;
dvb->mux = vidtv_mux_init(dvb->fe[0], dev, mux_args); dvb->mux = vidtv_mux_init(dvb->fe[0], dev, &mux_args);
if (!dvb->mux) if (!dvb->mux)
return -ENOMEM; return -ENOMEM;
vidtv_mux_start_thread(dvb->mux); vidtv_mux_start_thread(dvb->mux);
......
...@@ -466,7 +466,7 @@ void vidtv_mux_stop_thread(struct vidtv_mux *m) ...@@ -466,7 +466,7 @@ void vidtv_mux_stop_thread(struct vidtv_mux *m)
struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe, struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
struct device *dev, struct device *dev,
struct vidtv_mux_init_args args) struct vidtv_mux_init_args *args)
{ {
struct vidtv_mux *m; struct vidtv_mux *m;
...@@ -476,28 +476,28 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe, ...@@ -476,28 +476,28 @@ struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
m->dev = dev; m->dev = dev;
m->fe = fe; m->fe = fe;
m->timing.pcr_period_usecs = args.pcr_period_usecs; m->timing.pcr_period_usecs = args->pcr_period_usecs;
m->timing.si_period_usecs = args.si_period_usecs; m->timing.si_period_usecs = args->si_period_usecs;
m->mux_rate_kbytes_sec = args.mux_rate_kbytes_sec; m->mux_rate_kbytes_sec = args->mux_rate_kbytes_sec;
m->on_new_packets_available_cb = args.on_new_packets_available_cb; m->on_new_packets_available_cb = args->on_new_packets_available_cb;
m->mux_buf = vzalloc(args.mux_buf_sz); m->mux_buf = vzalloc(args->mux_buf_sz);
if (!m->mux_buf) if (!m->mux_buf)
goto free_mux; goto free_mux;
m->mux_buf_sz = args.mux_buf_sz; m->mux_buf_sz = args->mux_buf_sz;
m->pcr_pid = args.pcr_pid; m->pcr_pid = args->pcr_pid;
m->transport_stream_id = args.transport_stream_id; m->transport_stream_id = args->transport_stream_id;
m->priv = args.priv; m->priv = args->priv;
m->network_id = args.network_id; m->network_id = args->network_id;
m->network_name = kstrdup(args.network_name, GFP_KERNEL); m->network_name = kstrdup(args->network_name, GFP_KERNEL);
m->timing.current_jiffies = get_jiffies_64(); m->timing.current_jiffies = get_jiffies_64();
if (args.channels) if (args->channels)
m->channels = args.channels; m->channels = args->channels;
else else
if (vidtv_channels_init(m) < 0) if (vidtv_channels_init(m) < 0)
goto free_mux_buf; goto free_mux_buf;
......
...@@ -170,7 +170,7 @@ struct vidtv_mux_init_args { ...@@ -170,7 +170,7 @@ struct vidtv_mux_init_args {
struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe, struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe,
struct device *dev, struct device *dev,
struct vidtv_mux_init_args args); struct vidtv_mux_init_args *args);
void vidtv_mux_destroy(struct vidtv_mux *m); void vidtv_mux_destroy(struct vidtv_mux *m);
void vidtv_mux_start_thread(struct vidtv_mux *m); void vidtv_mux_start_thread(struct vidtv_mux *m);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment