This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/v4l-utils.git tree:

Subject: libv4l2rds: DI segment order was swapped
Author:  Hans Verkuil <[email protected]>
Date:    Sun Jul 27 21:31:16 2014 +0200

The segment number of bit 3 of the DI code is 0, increasing to segment
number 3 for bit 0. The code assumed segment S matched bit S, but it
is bit (3 - S) instead.

Very confusing choice in the standard, so I'm not surprised this was
broken.

Signed-off-by: Hans Verkuil <[email protected]>

 lib/libv4l2rds/libv4l2rds.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

---

http://git.linuxtv.org/v4l-utils.git?a=commitdiff;h=66e6a25b682debfa328b23056ff4050683054569

diff --git a/lib/libv4l2rds/libv4l2rds.c b/lib/libv4l2rds/libv4l2rds.c
index efc8a7d..596cd19 100644
--- a/lib/libv4l2rds/libv4l2rds.c
+++ b/lib/libv4l2rds/libv4l2rds.c
@@ -807,28 +807,28 @@ static uint32_t rds_decode_group0(struct 
rds_private_state *priv_state)
 
        /* bit 2 of block B contains 1 bit of the Decoder Control Information 
(DI)
         * the segment number defines the bit position
-        * New bits are only accepted the segments arrive in the correct order 
*/
+        * New bits are only accepted if the segments arrive in the correct 
order */
        bool bit2 = grp->data_b_lsb & 0x04;
        if (segment == 0 || segment == priv_state->next_di_segment) {
                switch (segment) {
                case 0:
                        priv_state->new_di = set_bit(priv_state->new_di,
-                               V4L2_RDS_FLAG_STEREO, bit2);
+                               V4L2_RDS_FLAG_DYNAMIC_PTY, bit2);
                        priv_state->next_di_segment = 1;
                        break;
                case 1:
                        priv_state->new_di = set_bit(priv_state->new_di,
-                               V4L2_RDS_FLAG_ARTIFICIAL_HEAD, bit2);
+                               V4L2_RDS_FLAG_COMPRESSED, bit2);
                        priv_state->next_di_segment = 2;
                        break;
                case 2:
                        priv_state->new_di = set_bit(priv_state->new_di,
-                               V4L2_RDS_FLAG_COMPRESSED, bit2);
+                               V4L2_RDS_FLAG_ARTIFICIAL_HEAD, bit2);
                        priv_state->next_di_segment = 3;
                        break;
                case 3:
                        priv_state->new_di = set_bit(priv_state->new_di,
-                               V4L2_RDS_FLAG_DYNAMIC_PTY, bit2);
+                               V4L2_RDS_FLAG_STEREO, bit2);
                        /* check if the value of DI has changed, and store
                         * and signal DI update in case */
                        if (handle->di != priv_state->new_di) {

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to