diff options
author | Mike Isely <devnull@localhost> | 2006-01-14 20:11:08 +0000 |
---|---|---|
committer | Mike Isely <devnull@localhost> | 2006-01-14 20:11:08 +0000 |
commit | d994bb1e8067e27e458a8e741b57476171fa45d1 (patch) | |
tree | 94346f9d466e0269543e15c4df97d13d491ed2d1 | |
parent | 4216cf3bb3ba15fd9c18be2d62e65f78c2d95c16 (diff) | |
download | mediapointer-dvb-s2-d994bb1e8067e27e458a8e741b57476171fa45d1.tar.gz mediapointer-dvb-s2-d994bb1e8067e27e458a8e741b57476171fa45d1.tar.bz2 |
Start using cx2341x.h for encoder commands
-Change pvrusb2-encoder.c to use encoder command definitions from
cx2341x.h instead of hardcoding those definitions directly.
From: Mike Isely <isely@pobox.com>
Signed-off-by: Mike Isely <isely@pobox.com>
-rw-r--r-- | v4l/ChangeLog | 11 | ||||
-rw-r--r-- | v4l_experimental/pvrusb2/pvrusb2-encoder.c | 155 |
2 files changed, 43 insertions, 123 deletions
diff --git a/v4l/ChangeLog b/v4l/ChangeLog index 9ed5f2fed..a519780ed 100644 --- a/v4l/ChangeLog +++ b/v4l/ChangeLog @@ -1,3 +1,14 @@ +2006-01-14 20:08 mcisely + + * v4l_experimental/pvrusb2/pvrusb2-encoder.c: + (pvr2_encoder_configure), (pvr2_encoder_start), + (pvr2_encoder_stop): + + -Use encoder command definitions from cx2341x.h instead of + hard-coding them into pvrusb2's encoder module. + + Signed-off-by: Mike Isely <isely@pobox.com> + 2006-01-14 19:05 mcisely * v4l_experimental/pvrusb2/pvrusb2-audio.c: diff --git a/v4l_experimental/pvrusb2/pvrusb2-encoder.c b/v4l_experimental/pvrusb2/pvrusb2-encoder.c index 91e03b2bc..046cd9f1f 100644 --- a/v4l_experimental/pvrusb2/pvrusb2-encoder.c +++ b/v4l_experimental/pvrusb2/pvrusb2-encoder.c @@ -1,6 +1,6 @@ /* * - * $Id: pvrusb2-encoder.c,v 1.4 2006/01/01 08:26:03 mcisely Exp $ + * $Id: pvrusb2-encoder.c,v 1.5 2006/01/14 20:11:08 mcisely Exp $ * * Copyright (C) 2005 Mike Isely <isely@pobox.com> * Copyright (C) 2004 Aurelien Alleaume <slts@free.fr> @@ -22,6 +22,7 @@ #include <linux/device.h> // for linux/firmware.h #include <linux/firmware.h> +#include "cx2341x.h" #include "pvrusb2-util.h" #include "pvrusb2-encoder.h" #include "pvrusb2-hdw-internal.h" @@ -56,98 +57,6 @@ static u32 pvr_tbl_audiobitrate[] = { [PVR2_CVAL_AUDIOBITRATE_VBR] = 0x0 << 4, }; -/* Firmware API commands - definitions found from ivtv */ -#ifdef notdef -#define IVTV_API_DEC_PING_FW 0x00 -#define IVTV_API_DEC_START_PLAYBACK 0x01 -#define IVTV_API_DEC_STOP_PLAYBACK 0x02 -#define IVTV_API_DEC_PLAYBACK_SPEED 0x03 -#define IVTV_API_DEC_STEP_VIDEO 0x05 -#define IVTV_API_DEC_DMA_BLOCKSIZE 0x08 -#define IVTV_API_DEC_XFER_INFO 0x09 -#define IVTV_API_DEC_DMA_STATUS 0x0a -#define IVTV_API_DEC_DMA_FROM_HOST 0x0b -#define IVTV_API_DEC_PAUSE_PLAYBACK 0x0d -#define IVTV_API_DEC_HALT_FW 0x0f - -#define IVTV_API_DEC_DISP_STANDARD 0x10 -#define IVTV_API_DEC_GETVER 0x11 -#define IVTV_API_DEC_STREAM_INPUT 0x14 -#define IVTV_API_DEC_TIMING_INFO 0x15 -#define IVTV_API_DEC_SELECT_AUDIO 0x16 -#define IVTV_API_DEC_EVENT_NOTIFICATION 0x17 -#define IVTV_API_DEC_DISPLAY_BUFFERS 0x18 -#define IVTV_API_DEC_EXTRACT_VBI 0x19 -#define IVTV_API_DEC_DECODE_SOURCE 0x1a -#define IVTV_API_DEC_AUDIO_OUTPUT 0x1b -#define IVTV_API_DEC_SET_AV_DELAY 0x1c -#define IVTV_API_DEC_BUFFER 0x1e - -#define IVTV_API_FB_GET_FRAMEBUFFER 0x41 -#define IVTV_API_FB_GET_PIXEL_FORMAT 0x42 -#define IVTV_API_FB_SET_PIXEL_FORMAT 0x43 -#define IVTV_API_FB_GET_STATE 0x44 -#define IVTV_API_FB_SET_STATE 0x45 -#define IVTV_API_FB_GET_OSD_COORDS 0x46 -#define IVTV_API_FB_SET_OSD_COORDS 0x47 -#define IVTV_API_FB_GET_SCREEN_COORDS 0x48 -#define IVTV_API_FB_SET_SCREEN_COORDS 0x49 -#define IVTV_API_FB_GET_GLOBAL_ALPHA 0x4a -#define IVTV_API_FB_SET_GLOBAL_ALPHA 0x4b -#define IVTV_API_FB_SET_BLEND_COORDS 0x4c -#define IVTV_API_FB_GET_FLICKER_STATE 0x4f - -#define IVTV_API_FB_SET_FLICKER_STATE 0x50 -#define IVTV_API_FB_BLT_COPY 0x52 -#define IVTV_API_FB_BLT_FILL 0x53 -#define IVTV_API_FB_BLT_TEXT 0x54 -#define IVTV_API_FB_SET_FRAMEBUFFER_WINDOW 0x56 - -#define IVTV_API_FB_SET_CHROMA_KEY 0x60 -#define IVTV_API_FB_GET_ALPHA_CONTENT_INDEX 0x61 -#define IVTV_API_FB_SET_ALPHA_CONTENT_INDEX 0x62 -#endif - -#define IVTV_API_ENC_PING_FW 0x80 -#define IVTV_API_BEGIN_CAPTURE 0x81 -#define IVTV_API_END_CAPTURE 0x82 -#define IVTV_API_ASSIGN_FRAMERATE 0x8f - -#define IVTV_API_ASSIGN_FRAME_SIZE 0x91 -#define IVTV_API_ASSIGN_BITRATES 0x95 -#define IVTV_API_ASSIGN_GOP_PROPERTIES 0x97 -#define IVTV_API_ASSIGN_ASPECT_RATIO 0x99 -#define IVTV_API_ASSIGN_DNR_FILTER_MODE 0x9b -#define IVTV_API_ASSIGN_DNR_FILTER_PROPS 0x9d -#define IVTV_API_ASSIGN_CORING_LEVELS 0x9f - -#define IVTV_API_ASSIGN_SPATIAL_FILTER_TYPE 0xa1 - -#define IVTV_API_ASSIGN_3_2_PULLDOWN 0xb1 -#define IVTV_API_SELECT_VBI_LINE 0xb7 -#define IVTV_API_ASSIGN_STREAM_TYPE 0xb9 -#define IVTV_API_ASSIGN_OUTPUT_PORT 0xbb -#define IVTV_API_ASSIGN_AUDIO_PROPERTIES 0xbd - -#define IVTV_API_ENC_HALT_FW 0xc3 -#define IVTV_API_ENC_GETVER 0xc4 -#define IVTV_API_ASSIGN_GOP_CLOSURE 0xc5 -#define IVTV_API_ASSIGN_PGM_INDEX_INFO 0xc7 -#define IVTV_API_CONFIG_VBI 0xc8 -#define IVTV_API_ASSIGN_DMA_BLOCKLEN 0xc9 -#define IVTV_API_SCHED_DMA_TO_HOST 0xcc -#define IVTV_API_INITIALIZE_INPUT 0xcd - -#define IVTV_API_ASSIGN_FRAME_DROP_RATE 0xd0 -#define IVTV_API_PAUSE_ENCODER 0xd2 -#define IVTV_API_REFRESH_INPUT 0xd3 -#define IVTV_API_EVENT_NOTIFICATION 0xd5 -#define IVTV_API_ASSIGN_NUM_VSYNC_LINES 0xd6 -#define IVTV_API_ASSIGN_PLACEHOLDER 0xd8 -#define IVTV_API_MUTE_VIDEO 0xd9 -#define IVTV_API_MUTE_AUDIO 0xda - -#define IVTV_API_OSD_DMA_FROM_HOST 0xff /* Firmware mailbox flags - definitions found from ivtv */ #define IVTV_MBOX_FIRMWARE_DONE 0x00000004 @@ -384,11 +293,11 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw) pvr2_trace(PVR2_TRACE_ENCODER,"pvr2_encoder_configure"); /* set stream output port. */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_OUTPUT_PORT, 2, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_OUTPUT_PORT, 2, 0x01, 0x01); /* set the Program Index Information. We want I,P,B frames (max 400) */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_PGM_INDEX_INFO, 2, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_PGM_INDEX_INFO, 2, 0x07, 0x0190); /* NOTE : windows driver sends some 0xdc */ @@ -407,28 +316,28 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw) /* Strange compared to ivtv data. */ #ifdef notdef - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_NUM_VSYNC_LINES, 2, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_NUM_VSYNC_LINES, 2, 0x0120, 0x0120); - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_NUM_VSYNC_LINES, 2, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_NUM_VSYNC_LINES, 2, 0x0131, 0x0131); #endif - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_NUM_VSYNC_LINES, 2, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_NUM_VSYNC_LINES, 2, 0xf0, 0xf0); /* setup firmware to notify us about some events (don't know why...) */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_EVENT_NOTIFICATION, 4, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_EVENT_NOTIFICATION, 4, 0, 0, 0x10000000, 0xffffffff); /* set fps to 25 or 30 (1 or 0)*/ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_FRAMERATE, 1, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_FRAME_RATE, 1, is_30fps ? 0 : 1); /* set encoding resolution */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_FRAME_SIZE, 2, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_FRAME_SIZE, 2, (height_full ? height : (height / 2)), width); /* set encoding aspect ratio to 4:3 */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_ASPECT_RATIO, 1, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_ASPECT_RATIO, 1, 0x02); /* VBI */ @@ -436,7 +345,7 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw) if (hdw->config == pvr2_config_vbi) { int lines = 2 * (is_30fps ? 12 : 18); int size = (4*((lines*1443+3)/4)) / lines; - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_CONFIG_VBI, 7, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_VBI_CONFIG, 7, 0xbd05, 1, 4, 0x25256262, 0x387f7f7f, lines , size); @@ -445,37 +354,37 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw) #define line_used(l) (is_30fps ? (l >= 10 && l <= 21) : (l >= 6 && l <= 23)) for (i = 2 ; i <= 24 ; i++){ ret |= pvr2_write_encoder_vcmd( - hdw,IVTV_API_SELECT_VBI_LINE, 5, + hdw,CX2341X_ENC_SET_VBI_LINE, 5, i-1,line_used(i), 0, 0, 0); ret |= pvr2_write_encoder_vcmd( - hdw,IVTV_API_SELECT_VBI_LINE, 5, + hdw,CX2341X_ENC_SET_VBI_LINE, 5, (i-1) | (1 << 31), line_used(i), 0, 0, 0); } } else { ret |= pvr2_write_encoder_vcmd( - hdw,IVTV_API_SELECT_VBI_LINE, 5, + hdw,CX2341X_ENC_SET_VBI_LINE, 5, 0xffffffff,0,0,0,0); } /* set stream type, depending on resolution. */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_STREAM_TYPE, 1, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_STREAM_TYPE, 1, height_full ? 0x0a : 0x0b); /* set video bitrate */ ret |= pvr2_write_encoder_vcmd( - hdw, IVTV_API_ASSIGN_BITRATES, 3, + hdw, CX2341X_ENC_SET_BIT_RATE, 3, (hdw->controls[PVR2_CID_VBR].value ? 1 : 0), hdw->controls[PVR2_CID_AVERAGEVIDEOBITRATE].value, (u32) (hdw->controls[PVR2_CID_PEAKVIDEOBITRATE].value) / 400); /* setup GOP structure (GOP size = 0f or 0c, 3-1 = 2 B-frames) */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_GOP_PROPERTIES, 2, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_GOP_PROPERTIES, 2, is_30fps ? 0x0f : 0x0c, 0x03); /* enable 3:2 pulldown */ - ret |= pvr2_write_encoder_vcmd(hdw,IVTV_API_ASSIGN_3_2_PULLDOWN,1,0); + ret |= pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_SET_3_2_PULLDOWN,1,0); /* set GOP open/close property (open) */ - ret |= pvr2_write_encoder_vcmd(hdw,IVTV_API_ASSIGN_GOP_CLOSURE,1,0); + ret |= pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_SET_GOP_CLOSURE,1,0); /* set audio stream properties 0x40b9? 0100 0000 1011 1001 */ audio = (pvr_tbl_audiobitrate[hdw->controls[ @@ -486,28 +395,28 @@ int pvr2_encoder_configure(struct pvr2_hdw *hdw) pvr_tbl_emphasis[hdw->controls[ PVR2_CID_AUDIOEMPHASIS].value]); - ret |= pvr2_write_encoder_vcmd(hdw,IVTV_API_ASSIGN_AUDIO_PROPERTIES,1, + ret |= pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_SET_AUDIO_PROPERTIES,1, audio); /* set dynamic noise reduction filter to manual, Horiz/Vert */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_DNR_FILTER_MODE, 2, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_DNR_FILTER_MODE, 2, 0, 0x03); /* dynamic noise reduction filter param */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_DNR_FILTER_PROPS, 2 + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_DNR_FILTER_PROPS, 2 , 0, 0); /* dynamic noise reduction median filter */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_ASSIGN_CORING_LEVELS, 4, + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_SET_CORING_LEVELS, 4, 0, 0xff, 0, 0xff); /* spacial prefiler parameter */ ret |= pvr2_write_encoder_vcmd(hdw, - IVTV_API_ASSIGN_SPATIAL_FILTER_TYPE, 2, + CX2341X_ENC_SET_SPATIAL_FILTER_TYPE, 2, 0x01, 0x01); /* initialize video input */ - ret |= pvr2_write_encoder_vcmd(hdw, IVTV_API_INITIALIZE_INPUT, 0); + ret |= pvr2_write_encoder_vcmd(hdw, CX2341X_ENC_INITIALIZE_INPUT, 0); if (!ret) { hdw->subsys_enabled_mask |= PVR2_SUBSYS_ENC_CFG; @@ -528,13 +437,13 @@ int pvr2_encoder_start(struct pvr2_hdw *hdw) pvr2_hdw_gpio_chg_out(hdw,0xffffffff,0x00000000); if (hdw->config == pvr2_config_vbi) { - status = pvr2_write_encoder_vcmd(hdw,IVTV_API_BEGIN_CAPTURE,2, + status = pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_START_CAPTURE,2, 0x01,0x14); } else if (hdw->config == pvr2_config_mpeg) { - status = pvr2_write_encoder_vcmd(hdw,IVTV_API_BEGIN_CAPTURE,2, + status = pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_START_CAPTURE,2, 0,0x13); } else { - status = pvr2_write_encoder_vcmd(hdw,IVTV_API_BEGIN_CAPTURE,2, + status = pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_START_CAPTURE,2, 0,0x13); } if (!status) { @@ -551,13 +460,13 @@ int pvr2_encoder_stop(struct pvr2_hdw *hdw) pvr2_write_register(hdw, 0x0048, 0xffffffff); if (hdw->config == pvr2_config_vbi) { - status = pvr2_write_encoder_vcmd(hdw,IVTV_API_END_CAPTURE,3, + status = pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_STOP_CAPTURE,3, 0x01,0x01,0x14); } else if (hdw->config == pvr2_config_mpeg) { - status = pvr2_write_encoder_vcmd(hdw,IVTV_API_END_CAPTURE,3, + status = pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_STOP_CAPTURE,3, 0x01,0,0x13); } else { - status = pvr2_write_encoder_vcmd(hdw,IVTV_API_END_CAPTURE,3, + status = pvr2_write_encoder_vcmd(hdw,CX2341X_ENC_STOP_CAPTURE,3, 0x01,0,0x13); } |