[media] saa7164: allow the encoder GOP structure to be configured
authorSteven Toth <stoth@kernellabs.com>
Sat, 31 Jul 2010 17:48:45 +0000 (14:48 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 21 Oct 2010 09:54:40 +0000 (07:54 -0200)
Signed-off-by: Steven Toth <stoth@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/saa7164/saa7164-api.c
drivers/media/video/saa7164/saa7164-reg.h
drivers/media/video/saa7164/saa7164-types.h

index 5e05723..5dcdf7b 100644 (file)
 
 #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;
@@ -31,7 +50,8 @@ int saa7164_api_set_encoder(struct saa7164_port *port)
        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);
@@ -57,6 +77,7 @@ int saa7164_api_set_encoder(struct saa7164_port *port)
                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;
 }
index a4ad559..ad60534 100644 (file)
 #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
index 5340404..7c2788d 100644 (file)
@@ -325,6 +325,18 @@ typedef struct
        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
 {