diff --git a/mythtv/libs/libmythtv/avformatdecoder.cpp b/mythtv/libs/libmythtv/avformatdecoder.cpp
index 0e14e16..6787d5e 100644
--- a/mythtv/libs/libmythtv/avformatdecoder.cpp
+++ b/mythtv/libs/libmythtv/avformatdecoder.cpp
@@ -2559,8 +2559,6 @@ void AvFormatDecoder::DecodeDTVCC(const uint8_t *buf, uint len, bool scte)
     {
         uint cc_code  = buf[2+(cur*3)];
         bool cc_valid = cc_code & 0x04;
-        if (!cc_valid)
-            continue;
 
         uint data1    = buf[3+(cur*3)];
         uint data2    = buf[4+(cur*3)];
@@ -2568,6 +2566,13 @@ void AvFormatDecoder::DecodeDTVCC(const uint8_t *buf, uint len, bool scte)
         uint cc_type  = cc_code & 0x03;
         uint field;
 
+        if (!cc_valid) {
+            if (cc_type >= 0x2) {
+                ccd708->decode_cc_null();
+            }
+            continue;
+        }
+
         if (scte || cc_type <= 0x1) // EIA-608 field-1/2
         {
             if (cc_type == 0x2)
diff --git a/mythtv/libs/libmythtv/cc708decoder.cpp b/mythtv/libs/libmythtv/cc708decoder.cpp
index cb551c5..516438f 100644
--- a/mythtv/libs/libmythtv/cc708decoder.cpp
+++ b/mythtv/libs/libmythtv/cc708decoder.cpp
@@ -66,6 +66,14 @@ void CC708Decoder::decode_cc_data(uint cc_type, uint data1, uint data2)
     }
 }
 
+void CC708Decoder::decode_cc_null()
+{
+    if (partialPacket.size && reader)
+        parse_cc_packet(reader, &partialPacket, last_seen);
+
+    partialPacket.size = 0;
+}
+
 void CC708Decoder::services(uint seconds, bool seen[64]) const
 {
     time_t now = time(NULL);
diff --git a/mythtv/libs/libmythtv/cc708decoder.h b/mythtv/libs/libmythtv/cc708decoder.h
index 4a00073..21bd499 100644
--- a/mythtv/libs/libmythtv/cc708decoder.h
+++ b/mythtv/libs/libmythtv/cc708decoder.h
@@ -32,6 +32,7 @@ class CC708Decoder
    ~CC708Decoder() {}
 
     void decode_cc_data(uint cc_type, uint data1, uint data2);
+    void decode_cc_null();
 
     /// \return Services seen in last few seconds as specified.
     void services(uint seconds, bool[64]) const;
