| /* |
| * drivers/amlogic/media/video_sink/video_receiver.h |
| * |
| * Copyright (C) 2017 Amlogic, Inc. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program 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 General Public License for |
| * more details. |
| * |
| */ |
| |
| #ifndef VIDEO_RECEIVER_HEADER_HH |
| #define VIDEO_RECEIVER_HEADER_HH |
| |
| #include <linux/amlogic/media/vfm/vframe.h> |
| #include "video_priv.h" |
| |
| struct video_layer_s; |
| |
| struct recv_func_s { |
| s32 (*early_proc)(struct video_recv_s *ins, u32 op); |
| struct vframe_s *(*dequeue_frame)(struct video_recv_s *ins); |
| s32 (*return_frame)(struct video_recv_s *ins, struct vframe_s *vf); |
| s32 (*late_proc)(struct video_recv_s *ins); |
| }; |
| |
| struct video_recv_s { |
| char *recv_name; |
| /* recv lock */ |
| spinlock_t lock; |
| struct vframe_receiver_s handle; |
| struct vframe_receiver_op_s *vf_ops; |
| struct vframe_s local_buf; |
| struct vframe_s *cur_buf; |
| struct vframe_s *rdma_buf; |
| struct vframe_s *buf_to_put[DISPBUF_TO_PUT_MAX]; |
| struct vframe_s *original_vf; |
| |
| bool switch_vf; |
| bool last_switch_state; |
| bool active; |
| bool request_exit; |
| bool do_exit; |
| bool exited; |
| bool irq_mode; |
| |
| u32 notify_flag; |
| u32 blackout; |
| u32 frame_count; |
| u32 drop_vf_cnt; |
| u8 path_id; |
| s8 buf_to_put_num; |
| struct recv_func_s *func; |
| }; |
| |
| struct video_recv_s *create_video_receiver(const char *recv_name, u8 path_id); |
| void destroy_video_receiver(struct video_recv_s *ins); |
| void switch_vf(struct video_recv_s *ins, bool switch_flag); |
| |
| #endif |