Ticket #8777: dish_descriptors3.diff

File dish_descriptors3.diff, 4.2 KB (added by Mark.Buechler@…, 14 years ago)

Start using some of the decoded descriptors. Ratings and stars will follow.

  • libs/libmythtv/eithelper.cpp

     
    333333        QString subtitle      = QString("");
    334334        QString description   = QString("");
    335335        QString category      = QString("");
    336         MythCategoryType category_type = kCategoryNone;
     336        uint category_type = kCategoryNone;
    337337        unsigned char subtitle_type=0, audio_props=0, video_props=0;
    338338
    339339        // Parse descriptors
     
    368368        parse_dvb_component_descriptors(list, subtitle_type, audio_props,
    369369                                        video_props);
    370370
     371        QString programId = QString("");
     372        QString seriesId  = QString("");
     373        QString rating    = QString("");
     374        QString rating_system = QString("");
     375        QString advisory = QString("");
     376        float stars = 0.0;
     377
     378        if (EITFixUp::kFixDish & fix)
     379        {
     380            const unsigned char *mpaa_data =
     381                MPEGDescriptor::Find(list, DescriptorID::dish_event_mpaa);
     382            if (mpaa_data)
     383            {
     384                DishEventMPAADescriptor mpaa(mpaa_data);
     385                stars = mpaa.stars();
     386
     387                if (stars) // Only movies for now
     388                {
     389                    rating = mpaa.rating();
     390                    rating_system = "MPAA";
     391                    advisory = mpaa.advisory();
     392                }
     393            }
     394
     395            if (!stars) // Not MPAA rated, check VCHIP
     396            {
     397                const unsigned char *vchip_data =
     398                    MPEGDescriptor::Find(list, DescriptorID::dish_event_vchip);
     399                if (vchip_data)
     400                {
     401                    DishEventVCHIPDescriptor vchip(vchip_data);
     402                    rating = vchip.rating();
     403                    rating_system = "VCHIP";
     404                    advisory = vchip.advisory();
     405                }
     406            }
     407
     408            if (!advisory.isEmpty() && !rating.isEmpty())
     409                rating += ", " + advisory;
     410            else if (!advisory.isEmpty())
     411            {
     412                rating = advisory;
     413                rating_system = "advisory";
     414            }
     415
     416            const unsigned char *tags_data =
     417                MPEGDescriptor::Find(list, DescriptorID::dish_event_tags);
     418            if (tags_data)
     419            {
     420                DishEventTagsDescriptor tags(tags_data);
     421                seriesId  = tags.seriesid();
     422                programId = tags.programid();
     423            }
     424
     425            const unsigned char *properties_data =
     426                MPEGDescriptor::Find(list, DescriptorID::dish_event_properties);
     427            if (properties_data)
     428            {
     429                DishEventPropertiesDescriptor properties(properties_data);
     430                subtitle_type |= properties.SubtitleProperties(descCompression);
     431                audio_props   |= properties.AudioProperties(descCompression);
     432            }
     433        }
     434
    371435        const unsigned char *content_data =
    372436            MPEGDescriptor::Find(list, DescriptorID::content);
    373437        if (content_data)
    374438        {
    375             ContentDescriptor content(content_data);
    376             category      = content.GetDescription(0);
    377             category_type = content.GetMythCategory(0);
     439            if ((EITFixUp::kFixDish & fix) || (EITFixUp::kFixBell & fix))
     440            {
     441                DishContentDescriptor content(content_data);
     442                category_type = content.GetTheme();
     443                if (EITFixUp::kFixDish & fix)
     444                    category  = content.GetCategory();
     445            }
     446            else
     447            {
     448                ContentDescriptor content(content_data);
     449                category      = content.GetDescription(0);
     450                category_type = content.GetMythCategory(0);
     451            }
    378452        }
    379453
    380454        desc_list_t contentIds =
    381455            MPEGDescriptor::FindAll(list, DescriptorID::dvb_content_identifier);
    382         QString programId = QString("");
    383         QString seriesId  = QString("");
    384456        for (uint j = 0; j < contentIds.size(); j++)
    385457        {
    386458            DVBContentIdentifierDescriptor desc(contentIds[j]);