summaryrefslogtreecommitdiff
path: root/amavutils/mediactl/media_ctl.cpp (plain)
blob: caa859ce8cb9d712b95722ec8d16a5745631cfd8
1/*
2 * Copyright (c) 2014 Amlogic, Inc. All rights reserved.
3 *
4 * This source code is subject to the terms and conditions defined in the
5 * file 'LICENSE' which is part of this source code package.
6 *
7 * Description:
8 */
9
10
11#define LOG_TAG "media_ctl"
12#include <stdio.h>
13#include <stdlib.h>
14#include <fcntl.h>
15#include <string.h>
16#include <unistd.h>
17#include <sys/ioctl.h>
18#include <errno.h>
19#include <cutils/log.h>
20#include <../mediaconfig/media_config.h>
21#include <amports/amstream.h>
22#include "common_ctl.h"
23#include <media_ctl.h>
24#include <video_ctl.h>
25
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30static int mediactl_set_black_policy(const char* path, int blackout)
31{
32 int para=blackout;
33 if (path == NULL)
34 return -1;
35 return media_video_set_int(AMSTREAM_IOC_SET_BLACKOUT_POLICY, para);
36}
37
38static int mediactl_get_black_policy(const char* path)
39{
40 if (path == NULL)
41 return -1;
42 return media_video_get_int(AMSTREAM_IOC_GET_BLACKOUT_POLICY);
43}
44
45static int mediactl_get_disable_video(const char* path)
46{
47 if (path == NULL)
48 return -1;
49 return media_video_get_int(AMSTREAM_IOC_GET_VIDEO_DISABLE);
50}
51
52static int mediactl_set_disable_video(const char* path, int mode)
53{
54 int para=mode;
55 if (path == NULL)
56 return -1;
57 return media_video_set_int(AMSTREAM_IOC_SET_VIDEO_DISABLE, para);
58}
59
60static int mediactl_set_screen_mode(const char* path, int mode)
61{
62 int para=mode;
63 if (path == NULL)
64 return -1;
65 return media_video_set_int(AMSTREAM_IOC_SET_SCREEN_MODE, para);
66}
67
68static int mediactl_get_screen_mode(const char* path)
69{
70 if (path == NULL)
71 return -1;
72 return media_video_get_int(AMSTREAM_IOC_GET_SCREEN_MODE);
73}
74
75static int mediactl_clear_video_buf( const char * path, int val)
76{
77 int para=val;
78 if (path == NULL)
79 return -1;
80 return media_video_set_int(AMSTREAM_IOC_CLEAR_VBUF, para);
81}
82int mediactl_get_subtitle_fps(const char* path)
83{
84 if (path == NULL)
85 return -1;
86 return media_sub_getinfo(SUB_FPS);
87}
88
89int mediactl_set_subtitle_fps(const char * path,int fps)
90{
91 if (path == NULL)
92 return -1;
93 return media_sub_setinfo(SUB_FPS, fps);
94}
95
96int mediactl_get_subtitle_total(const char * path)
97{
98 if (path == NULL)
99 return -1;
100 return media_sub_getinfo(SUB_TOTAL);
101}
102
103int mediactl_set_subtitle_total(const char * path, int total)
104{
105 if (path == NULL)
106 return -1;
107 return media_sub_setinfo(SUB_TOTAL, total);
108}
109
110int mediactl_get_subtitle_enable(const char * path)
111{
112 if (path == NULL)
113 return -1;
114 return media_sub_getinfo(SUB_ENABLE);
115}
116
117int mediactl_set_subtitle_enable(const char * path,int enable)
118{
119 if (path == NULL)
120 return -1;
121 return media_sub_setinfo(SUB_ENABLE, enable);
122}
123
124int mediactl_get_subtitle_index(const char * path)
125{
126 if (path == NULL)
127 return -1;
128 return media_sub_getinfo(SUB_INDEX);
129}
130
131int mediactl_set_subtitle_index(const char * path,int index)
132{
133 if (path == NULL)
134 return -1;
135 return media_sub_setinfo(SUB_INDEX, index);
136}
137
138int mediactl_get_subtitle_width(const char * path)
139{
140 if (path == NULL)
141 return -1;
142 return media_sub_getinfo(SUB_WIDTH);
143}
144
145int mediactl_set_subtitle_width(const char * path, int width)
146{
147 if (path == NULL)
148 return -1;
149 return media_sub_setinfo(SUB_WIDTH, width);
150}
151
152int mediactl_get_subtitle_height(const char * path)
153{
154 if (path == NULL)
155 return -1;
156 return media_sub_getinfo(SUB_HEIGHT);
157}
158
159int mediactl_set_subtitle_height(const char * path, int height)
160{
161 if (path == NULL)
162 return -1;
163 return media_sub_setinfo(SUB_HEIGHT, height);
164}
165
166int mediactl_get_subtitle_subtype(const char * path)
167{
168 if (path == NULL)
169 return -1;
170 return media_sub_getinfo(SUB_SUBTYPE);
171}
172
173int mediactl_set_subtitle_subtype(const char * path, int type)
174{
175 if (path == NULL)
176 return -1;
177 return media_sub_setinfo(SUB_SUBTYPE, type);
178}
179
180int mediactl_get_subtitle_curr(const char * path)
181{
182 if (path == NULL)
183 return -1;
184 return media_sub_getinfo(SUB_CURRENT);
185}
186
187int mediactl_set_subtitle_curr(const char * path, int num)
188{
189 if (path == NULL)
190 return -1;
191 return media_sub_setinfo(SUB_CURRENT, num);
192}
193
194int mediactl_get_subtitle_startpts(const char * path)
195{
196 if (path == NULL)
197 return -1;
198 return media_sub_getinfo(SUB_START_PTS);
199}
200
201int mediactl_set_subtitle_startpts(const char * path, int startpts)
202{
203 if (path == NULL)
204 return -1;
205 return media_sub_setinfo(SUB_START_PTS, startpts);
206}
207
208static MediaCtlPool Mediactl_SetPool[] = {
209 {"/sys/class/tsync/enable","media.tsync.enable",
210 media_set_ctl,media_get_ctl,
211 media_set_ctl_str,media_get_ctl_str},
212 {"/sys/class/tsync/slowsync_enable","media.tsync.slowsync_enable",
213 media_set_ctl,media_get_ctl,
214 media_set_ctl_str,media_get_ctl_str},
215 {"/sys/class/tsync/startsync_mode","media.tsync.startsync_mode",
216 media_set_ctl,media_get_ctl,
217 media_set_ctl_str,media_get_ctl_str},
218 {"/sys/class/tsync/av_threshold_min","media.tsync.av_threshold_min",
219 media_set_ctl,media_get_ctl,
220 media_set_ctl_str,media_get_ctl_str},
221 {"/sys/class/tsync/vpause_flag","media.tsync.vpause_flag",
222 media_set_ctl,media_get_ctl,
223 media_set_ctl_str,media_get_ctl_str},
224 {"/sys/class/tsync/pts_pcrscr","media.tsync.pts_pcrscr",
225 media_set_ctl,media_get_ctl,
226 media_set_ctl_str,media_get_ctl_str},
227 {"/sys/class/tsync/pts_video","media.tsync.pts_video",
228 media_set_ctl,media_get_ctl,
229 media_set_ctl_str,media_get_ctl_str},
230 {"/sys/class/tsync/pts_audio","media.tsync.pts_audio",
231 media_set_ctl,media_get_ctl,
232 media_set_ctl_str,media_get_ctl_str},
233 {"/sys/class/tsync/vpause_flag","media.tsync.vpause_flag",
234 media_set_ctl,media_get_ctl,
235 media_set_ctl_str,media_get_ctl_str},
236 {"/sys/class/tsync/mode","media.tsync.mode",
237 media_set_ctl,media_get_ctl,
238 media_set_ctl_str,media_get_ctl_str},
239 {"/sys/class/tsync/firstapts","media.tsync.firstapts",
240 media_set_ctl,media_get_ctl,
241 media_set_ctl_str,media_get_ctl_str},
242 {"/sys/class/tsync/event","media.tsync.event",
243 media_set_ctl,media_get_ctl,
244 media_set_ctl_str,media_get_ctl_str},
245 {"/sys/class/tsync/discontinue","media.tsync.discontinue",
246 media_set_ctl,media_get_ctl,
247 media_set_ctl_str,media_get_ctl_str},
248 {"/sys/class/tsync/dobly_av_sync","media.tsync.dobly_av_sync",
249 media_set_ctl,media_get_ctl,
250 media_set_ctl_str,media_get_ctl_str},
251 {"/sys/class/tsync/pcr_recover","media.tsync.pcr_recover",
252 media_set_ctl,media_get_ctl,
253 media_set_ctl_str,media_get_ctl_str},
254 {"/sys/class/tsync/debug_pts_checkin","media.tsync.debug_pts_checkin",
255 media_set_ctl,media_get_ctl,
256 media_set_ctl_str,media_get_ctl_str},
257 {"/sys/class/tsync/debug_pts_checkout","media.tsync.debug_pts_checkout",
258 media_set_ctl,media_get_ctl,
259 media_set_ctl_str,media_get_ctl_str},
260 {"/sys/class/tsync/debug_video_pts","media.tsync.debug_video_pts",
261 media_set_ctl,media_get_ctl,
262 media_set_ctl_str,media_get_ctl_str},
263 {"/sys/class/tsync/debug_audio_pts","media.tsync.debug_audio_pts",
264 media_set_ctl,media_get_ctl,
265 media_set_ctl_str,media_get_ctl_str},
266 {"/sys/class/tsync/av_threshold_max","media.tsync.av_threshold_max",
267 media_set_ctl,media_get_ctl,
268 media_set_ctl_str,media_get_ctl_str},
269 {"/sys/class/tsync/last_checkin_apts","media.tsync.last_checkin_apts",
270 media_set_ctl,media_get_ctl,
271 media_set_ctl_str,media_get_ctl_str},
272 {"/sys/class/tsync/firstvpts","media.tsync.firstvpts",
273 media_set_ctl,media_get_ctl,
274 media_set_ctl_str,media_get_ctl_str},
275 {"/sys/class/tsync/checkin_firstvpts","media.tsync.checkin_firstvpts",
276 media_set_ctl,media_get_ctl,
277 media_set_ctl_str,media_get_ctl_str},
278 {"/sys/class/audiodsp/digital_raw","/sys/class/audiodsp/digital_raw",
279 media_set_ctl,media_get_ctl,
280 media_set_ctl_str,media_get_ctl_str},
281 {"/sys/class/audiodsp/ac3_drc_control","media.audio.audiodsp.ac3_drc_control",
282 media_set_ctl,media_get_ctl,
283 media_set_ctl_str,media_get_ctl_str},
284 {"/sys/class/audiodsp/audio_samesource","media.audio.audiodsp.audio_samesource",
285 media_set_ctl,media_get_ctl,
286 media_set_ctl_str,media_get_ctl_str},
287 {"/sys/class/audiodsp/codec_fatal_err","/sys/class/audiodsp/codec_fatal_err",
288 media_set_ctl,media_get_ctl,
289 media_set_ctl_str,media_get_ctl_str},
290 {"/sys/class/audiodsp/digital_codec","media.audio.audiodsp.digital_codec",
291 media_set_ctl,media_get_ctl,
292 media_set_ctl_str,media_get_ctl_str},
293 {"/sys/class/audiodsp/dts_dec_control","media.audio.audiodsp.dts_dec_control",
294 media_set_ctl,media_get_ctl,
295 media_set_ctl_str,media_get_ctl_str},
296 {"/sys/module/amvideo/parameters/new_frame_count","media.video.new_frame_count",
297 media_set_ctl,media_get_ctl,
298 media_set_ctl_str,media_get_ctl_str},
299 {"/sys/module/amvideo/parameters/hdmi_in_onvideo","media.video.hdmi_in_onvideo",
300 media_set_ctl,media_get_ctl,
301 media_set_ctl_str,media_get_ctl_str},
302 {"/sys/module/amvideo/parameters/pause_one_3d_fl_frame","media.video.pause_one_3d_fl_frame",
303 media_set_ctl,media_get_ctl,
304 media_set_ctl_str,media_get_ctl_str},
305 {"/sys/module/amvideo/parameters/pause_one_3d_fl_frame","media.video.pause_one_3d_fl_frame",
306 media_set_ctl,media_get_ctl,
307 media_set_ctl_str,media_get_ctl_str},
308 {"/sys/module/amvideo/parameters/debug_flag","media.video.debug_flag",
309 media_set_ctl,media_get_ctl,
310 media_set_ctl_str,media_get_ctl_str},
311 {"/sys/module/amvideo/parameters/force_3d_scaler","media.video.force_3d_scaler",
312 media_set_ctl,media_get_ctl,
313 media_set_ctl_str,media_get_ctl_str},
314 {"/sys/module/amvideo/parameters/video_3d_format","media.video.video_3d_format",
315 media_set_ctl,media_get_ctl,
316 media_set_ctl_str,media_get_ctl_str},
317 {"/sys/module/amvideo/parameters/vsync_enter_line_max","media.video.vsync_enter_line_max",
318 media_set_ctl,media_get_ctl,
319 media_set_ctl_str,media_get_ctl_str},
320 {"/sys/module/amvideo/parameters/vsync_enter_line_max","media.video.vsync_enter_line_max",
321 media_set_ctl,media_get_ctl,
322 media_set_ctl_str,media_get_ctl_str},
323 {"/sys/module/amvideo/parameters/vsync_exit_line_max","media.video.vsync_exit_line_max",
324 media_set_ctl,media_get_ctl,
325 media_set_ctl_str,media_get_ctl_str},
326 {"/sys/module/amvideo/parameters/vsync_rdma_line_max","media.video.vsync_rdma_line_max",
327 media_set_ctl,media_get_ctl,
328 media_set_ctl_str,media_get_ctl_str},
329 {"/sys/module/amvideo/parameters/underflow","media.video.underflow",
330 media_set_ctl,media_get_ctl,
331 media_set_ctl_str,media_get_ctl_str},
332 {"/sys/module/amvideo/parameters/next_peek_underflow","media.video.next_peek_underflow",
333 media_set_ctl,media_get_ctl,
334 media_set_ctl_str,media_get_ctl_str},
335 {"/sys/module/amvideo/parameters/smooth_sync_enable","media.video.smooth_sync_enable",
336 media_set_ctl,media_get_ctl,
337 media_set_ctl_str,media_get_ctl_str},
338 {"/sys/module/amvideo/parameters/hdmi_in_onvideo","media.video.hdmi_in_onvideo",
339 media_set_ctl,media_get_ctl,
340 media_set_ctl_str,media_get_ctl_str},
341 {"/sys/module/amvideo/parameters/video_play_clone_rate","media.video.video_play_clone_rate",
342 media_set_ctl,media_get_ctl,
343 media_set_ctl_str,media_get_ctl_str},
344 {"/sys/module/amvideo/parameters/android_clone_rate","media.video.android_clone_rate",
345 media_set_ctl,media_get_ctl,
346 media_set_ctl_str,media_get_ctl_str},
347 {"/sys/module/amvideo/parameters/noneseamless_play_clone_rate","media.video.noneseamless_play_clone_rate",
348 media_set_ctl,media_get_ctl,
349 media_set_ctl_str,media_get_ctl_str},
350 {"/sys/module/amvideo/parameters/cur_dev_idx","media.video.cur_dev_idx",
351 media_set_ctl,media_get_ctl,
352 media_set_ctl_str,media_get_ctl_str},
353 {"/sys/module/amvideo/parameters/omx_pts","media.video.omx_pts",
354 media_set_ctl,media_get_ctl,
355 media_set_ctl_str,media_get_ctl_str},
356 {"/sys/module/amvideo/parameters/omx_pts_interval_upper","media.video.omx_pts_interval_upper",
357 media_set_ctl,media_get_ctl,
358 media_set_ctl_str,media_get_ctl_str},
359 {"/sys/module/amvideo/parameters/bypass_pps","media.video.bypass_pps",
360 media_set_ctl,media_get_ctl,
361 media_set_ctl_str,media_get_ctl_str},
362 {"/sys/module/amvideo/parameters/platform_type","media.video.platform_type",
363 media_set_ctl,media_get_ctl,
364 media_set_ctl_str,media_get_ctl_str},
365 {"/sys/module/amvideo/parameters/process_3d_type","media.video.process_3d_type",
366 media_set_ctl,media_get_ctl,
367 media_set_ctl_str,media_get_ctl_str},
368 {"/sys/module/amvideo/parameters/framepacking_support","media.video.framepacking_support",
369 media_set_ctl,media_get_ctl,
370 media_set_ctl_str,media_get_ctl_str},
371 {"/sys/module/amvideo/parameters/framepacking_width","media.video.framepacking_width",
372 media_set_ctl,media_get_ctl,
373 media_set_ctl_str,media_get_ctl_str},
374 {"/sys/module/amvideo/parameters/framepacking_height","media.video.framepacking_height",
375 media_set_ctl,media_get_ctl,
376 media_set_ctl_str,media_get_ctl_str},
377 {"/sys/module/amvideo/parameters/framepacking_blank","media.video.framepacking_blank",
378 media_set_ctl,media_get_ctl,
379 media_set_ctl_str,media_get_ctl_str},
380 {"/sys/module/amvideo/parameters/reverse","media.video.reverse",
381 media_set_ctl,media_get_ctl,
382 media_set_ctl_str,media_get_ctl_str},
383 {"/sys/module/amvdec_h265/parameters/double_write_mode","media.decoder.h265.double_write_mode",
384 media_set_ctl,media_get_ctl,
385 media_set_ctl_str,media_get_ctl_str},
386 {"/sys/module/amvdec_h265/parameters/buf_alloc_width","media.decoder.h265.buf_alloc_width",
387 media_set_ctl,media_get_ctl,
388 media_set_ctl_str,media_get_ctl_str},
389 {"/sys/module/amvdec_h265/parameters/buf_alloc_height","media.decoder.h265.buf_alloc_height",
390 media_set_ctl,media_get_ctl,
391 media_set_ctl_str,media_get_ctl_str},
392 {"/sys/module/amvdec_h265/parameters/buffer_mode","media.decoder.h265.buffer_mode",
393 media_set_ctl,media_get_ctl,
394 media_set_ctl_str,media_get_ctl_str},
395 {"/sys/module/amvdec_h265/parameters/dynamic_buf_num_margin","media.decoder.h265.dynamic_buf_num_margin",
396 media_set_ctl,media_get_ctl,
397 media_set_ctl_str,media_get_ctl_str},
398 {"/sys/module/amvdec_h265/parameters/debug","media.decoder.h265.debug",
399 media_set_ctl,media_get_ctl,
400 media_set_ctl_str,media_get_ctl_str},
401 {"/sys/module/amvdec_vp9/parameters/double_write_mode","media.decoder.vp9.double_write_mode",
402 media_set_ctl,media_get_ctl,
403 media_set_ctl_str,media_get_ctl_str},
404 {"/sys/module/amvdec_vp9/parameters/buf_alloc_width","media.decoder.vp9.buf_alloc_width",
405 media_set_ctl,media_get_ctl,
406 media_set_ctl_str,media_get_ctl_str},
407 {"/sys/module/amvdec_vp9/parameters/buf_alloc_height","media.decoder.vp9.buf_alloc_height",
408 media_set_ctl,media_get_ctl,
409 media_set_ctl_str,media_get_ctl_str},
410 {"/sys/class/vfm/map","media.vfm.map",
411 media_set_ctl,media_get_ctl,
412 media_set_ctl_str,media_get_ctl_str},
413 {"/sys/class/video/video_seek_flag","media.video.video_seek_flag",
414 media_set_ctl,media_get_ctl,
415 media_set_ctl_str,media_get_ctl_str},
416 {"/sys/class/video/slowsync_repeat_enable","media.video.slowsync_repeat_enable",
417 media_set_ctl,media_get_ctl,
418 media_set_ctl_str,media_get_ctl_str},
419 {"/sys/class/video/show_first_frame_nosync","media.video.show_first_frame_nosync",
420 media_set_ctl,media_get_ctl,
421 media_set_ctl_str,media_get_ctl_str},
422 {"/sys/class/amstream/videobufused","media.amports.videobufused",
423 media_set_ctl,media_get_ctl,
424 media_set_ctl_str,media_get_ctl_str},
425 {"/sys/class/vdec/poweron_clock_level","media.decoder.vdec.poweron_clock_level",
426 media_set_ctl,media_get_ctl,
427 media_set_ctl_str,media_get_ctl_str},
428 {"/sys/class/codec_mm/tvp_enable","media.codec_mm.trigger.tvp_enable",
429 media_set_ctl,media_get_ctl,
430 media_set_ctl_str,media_get_ctl_str},
431 {"/sys/class/codec_mm/fastplay","media.codec_mm.trigger.fastplay",
432 media_set_ctl,media_get_ctl,
433 media_set_ctl_str,media_get_ctl_str},
434 {"/sys/class/codec_mm/debug","media.codec_mm.trigger.debug",
435 media_set_ctl,media_get_ctl,
436 media_set_ctl_str,media_get_ctl_str},
437 {"/sys/class/video/blackout_policy","/dev/amvideo",
438 mediactl_set_black_policy,mediactl_get_black_policy,
439 NULL,NULL},
440 {"/sys/class/video/screen_mode","/dev/amvideo",
441 mediactl_set_screen_mode,mediactl_get_screen_mode,
442 NULL,NULL},
443 {"/sys/class/video/disable_video","/dev/amvideo",
444 mediactl_set_disable_video,mediactl_get_disable_video,
445 NULL,NULL},
446 {"/sys/class/video/clear_video_buf","/dev/amvideo",
447 mediactl_clear_video_buf,NULL,
448 NULL,NULL},
449 {"/sys/class/subtitle/fps","/dev/amsubtitle",
450 mediactl_set_subtitle_fps,mediactl_get_subtitle_fps,
451 NULL,NULL},
452 {"/sys/class/subtitle/total","/dev/amsubtitle",
453 mediactl_set_subtitle_total,mediactl_get_subtitle_total,
454 NULL,NULL},
455 {"/sys/class/subtitle/curr","/dev/amsubtitle",
456 mediactl_set_subtitle_curr,mediactl_get_subtitle_curr,
457 NULL,NULL},
458 {"/sys/class/subtitle/subtype","/dev/amsubtitle",
459 mediactl_set_subtitle_subtype,mediactl_get_subtitle_subtype,
460 NULL,NULL},
461 {"/sys/class/subtitle/startpts","/dev/amsubtitle",
462 mediactl_set_subtitle_startpts,mediactl_get_subtitle_startpts,
463 NULL,NULL},
464 {"/sys/class/subtitle/index","/dev/amsubtitle",
465 mediactl_set_subtitle_index,mediactl_get_subtitle_index,
466 NULL,NULL},
467 {NULL, NULL, NULL, NULL, NULL, NULL}
468};
469
470int mediactl_set_str_func(const char* path, char* val)
471{
472 MediaCtlPool *p = Mediactl_SetPool;
473 int ret = UnSupport;
474 while (p && p->device) {
475 if (!strcmp(p->device, path)) {
476 if (p->mediactl_setstr) {
477 ret = p->mediactl_setstr(p->path,val);
478 }
479 break;
480 }
481 p++;
482 }
483 return ret;
484}
485
486int mediactl_get_str_func(const char* path, char* valstr, int size)
487{
488 MediaCtlPool *p = Mediactl_SetPool;
489 int ret = UnSupport;
490 while (p && p->device) {
491 if (!strcmp(p->device, path)) {
492 if (p->mediactl_getstr) {
493 ret = p->mediactl_getstr(p->path,valstr,size);
494 }
495 break;
496 }
497 p++;
498 }
499 return ret;
500}
501
502int mediactl_set_int_func(const char* path, int val)
503{
504 MediaCtlPool *p = Mediactl_SetPool;
505 int ret = UnSupport;
506 while (p && p->device) {
507 if (!strcmp(p->device, path)) {
508 if (p->mediactl_setval) {
509 ret = p->mediactl_setval(p->path,val);
510 }
511 break;
512 }
513 p++;
514 }
515 return ret;
516}
517
518int mediactl_get_int_func(const char* path)
519{
520 MediaCtlPool *p = Mediactl_SetPool;
521 int ret = UnSupport;
522 while (p && p->device) {
523 if (!strcmp(p->device, path)) {
524 if (p->mediactl_getval) {
525 ret = p->mediactl_getval(p->path);
526 }
527 break;
528 }
529 p++;
530 }
531 return ret;
532}
533
534#ifdef __cplusplus
535}
536#endif