#include "saa7164.h"
+int saa7164_api_set_gop_size(struct saa7164_port *port)
+{
+ struct saa7164_dev *dev = port->dev;
+ tmComResEncVideoGopStructure_t gs;
+ int ret;
+
+ dprintk(DBGLVL_ENC, "%s()\n", __func__);
+
+ gs.ucRefFrameDist = SAA7164_ENCODER_DEFAULT_GOP_DIST;
+ gs.ucGOPSize = SAA7164_ENCODER_DEFAULT_GOP_SIZE;
+ ret = saa7164_cmd_send(port->dev, port->hwcfg.sourceid, SET_CUR,
+ EU_VIDEO_GOP_STRUCTURE_CONTROL,
+ sizeof(gs), &gs);
+ if (ret != SAA_OK)
+ printk(KERN_ERR "%s() error, ret = 0x%x\n", __func__, ret);
+
+ return ret;
+}
+
int saa7164_api_set_encoder(struct saa7164_port *port)
{
struct saa7164_dev *dev = port->dev;
tmComResEncAudioBitRate_t ab;
int ret;
- dprintk(DBGLVL_ENC, "%s() unitid=0x%x\n", __func__, port->hwcfg.sourceid);
+ dprintk(DBGLVL_ENC, "%s() unitid=0x%x\n", __func__,
+ port->hwcfg.sourceid);
ret = saa7164_cmd_send(port->dev, port->hwcfg.sourceid, SET_CUR,
EU_PROFILE_CONTROL, sizeof(u8), &port->encoder_profile);
printk(KERN_ERR "%s() error, ret = 0x%x\n", __func__, ret);
saa7164_api_set_aspect_ratio(port);
+ saa7164_api_set_gop_size(port);
return ret;
}
#define EU_PROFILE_CONTROL 0x00
#define EU_VIDEO_FORMAT_CONTROL 0x01
#define EU_VIDEO_BIT_RATE_CONTROL 0x02
+#define EU_VIDEO_GOP_STRUCTURE_CONTROL 0x04
#define EU_VIDEO_INPUT_ASPECT_CONTROL 0x0A
#define EU_AUDIO_FORMAT_CONTROL 0x0C
#define EU_AUDIO_BIT_RATE_CONTROL 0x0D
u8 height;
} __attribute__((packed)) tmComResEncVideoInputAspectRatio_t;
+/* Video Encoder GOP IBP message */
+/* 1. IPPPPPPPPPPPPPP */
+/* 2. IBPBPBPBPBPBPBP */
+/* 3. IBBPBBPBBPBBP */
+#define SAA7164_ENCODER_DEFAULT_GOP_DIST ( 1)
+#define SAA7164_ENCODER_DEFAULT_GOP_SIZE (15)
+typedef struct
+{
+ u8 ucGOPSize; /* GOP Size 12, 15 */
+ u8 ucRefFrameDist; /* Reference Frame Distance */
+} __attribute__((packed)) tmComResEncVideoGopStructure_t;
+
/* Encoder processor definition */
typedef struct
{