2019-05-27 09:55:06 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2008-04-29 03:24:33 +04:00
/*
* cx18 init / start / stop / exit stream functions
*
* Derived from ivtv - streams . h
*
* Copyright ( C ) 2007 Hans Verkuil < hverkuil @ xs4all . nl >
2010-05-24 01:53:35 +04:00
* Copyright ( C ) 2008 Andy Walls < awalls @ md . metrocast . net >
2008-04-29 03:24:33 +04:00
*/
u32 cx18_find_handle ( struct cx18 * cx ) ;
2008-11-16 07:38:19 +03:00
struct cx18_stream * cx18_handle_to_stream ( struct cx18 * cx , u32 handle ) ;
2008-04-29 03:24:33 +04:00
int cx18_streams_setup ( struct cx18 * cx ) ;
int cx18_streams_register ( struct cx18 * cx ) ;
2008-05-01 17:31:12 +04:00
void cx18_streams_cleanup ( struct cx18 * cx , int unregister ) ;
2008-04-29 03:24:33 +04:00
2010-01-01 00:27:13 +03:00
# define CX18_ENC_STREAM_TYPE_IDX_FW_MDL_MIN (3)
void cx18_stream_rotate_idx_mdls ( struct cx18 * cx ) ;
2009-12-31 23:19:25 +03:00
static inline bool cx18_stream_enabled ( struct cx18_stream * s )
{
2015-03-09 19:34:03 +03:00
return s - > video_dev . v4l2_dev | |
2010-12-12 02:38:20 +03:00
( s - > dvb & & s - > dvb - > enabled ) | |
2009-12-31 23:19:25 +03:00
( s - > type = = CX18_ENC_STREAM_TYPE_IDX & &
s - > cx - > stream_buffers [ CX18_ENC_STREAM_TYPE_IDX ] ! = 0 ) ;
}
2009-11-09 05:45:24 +03:00
/* Related to submission of mdls to firmware */
2009-04-16 03:45:10 +04:00
static inline void cx18_stream_load_fw_queue ( struct cx18_stream * s )
{
2011-01-03 16:49:34 +03:00
schedule_work ( & s - > out_work_order ) ;
2009-04-16 03:45:10 +04:00
}
2009-11-09 05:45:24 +03:00
static inline void cx18_stream_put_mdl_fw ( struct cx18_stream * s ,
struct cx18_mdl * mdl )
2009-04-16 03:45:10 +04:00
{
2009-11-09 05:45:24 +03:00
/* Put mdl on q_free; the out work handler will move mdl(s) to q_busy */
cx18_enqueue ( s , mdl , & s - > q_free ) ;
2009-04-16 03:45:10 +04:00
cx18_stream_load_fw_queue ( s ) ;
}
2009-04-14 05:42:43 +04:00
void cx18_out_work_handler ( struct work_struct * work ) ;
/* Capture related */
2008-04-29 03:24:33 +04:00
int cx18_start_v4l2_encode_stream ( struct cx18_stream * s ) ;
int cx18_stop_v4l2_encode_stream ( struct cx18_stream * s , int gop_end ) ;
void cx18_stop_all_captures ( struct cx18 * cx ) ;