19 #include "closedcaptions.h"
21 #include "ccDataReader.h"
23 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
24 #define private public
26 #include "vlGfxScreen.h"
27 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__)
37 static void cc_msg_callback(CC_MSG_type_t decoderMsg)
39 if (CC_MSG_RENDER_START == decoderMsg)
41 LOG_WARNING(
"CC IS BEING DISPLAYED");
47 bool ClosedCaptions::m_wasLoadedOnce =
false;
50 void ClosedCaptions::shutdown()
52 struct MyvlGfxScreen:
public vlGfxScreen
54 static void shutdown()
56 IDirectFB* dfb = get_dfb();
64 m_wasLoadedOnce =
false;
65 MyvlGfxScreen::shutdown();
70 ClosedCaptions::ClosedCaptions()
72 m_CCVisibilityStatus = 0;
73 m_isCCRendering =
false;
74 m_isCCEnabled =
false;
75 m_isCCReaderStarted =
true;
76 m_isParentalBlocked =
true;
77 m_isCCStopedAtTrickMode =
false;
78 m_viddecHandle = NULL;
82 ClosedCaptions::~ClosedCaptions()
87 bool ClosedCaptions::setEnabled(
bool bNewState)
90 LOG_INFO(
"setEnabled enabled=%d", (
int)bNewState);
92 if(bNewState == m_isCCEnabled)
98 m_isCCEnabled = bNewState;
103 if ((m_isCCEnabled) && (!m_isParentalBlocked) && (!m_isCCStopedAtTrickMode))
106 if (m_ccOptions.size() > 0)
116 if(0 == access(
"/tmp/force_cc_enable_disable_failure", F_OK))
118 LOG_WARNING(
"Forcing setEnabled Failure.");
125 void ClosedCaptions::setVisible(
bool is_visible)
127 LOG_INFO(
"Entered %s \n", __FUNCTION__);
141 bool ClosedCaptions::start(
void* pViddecHandle)
143 LOG_INFO(
"start: viddecHandle=%p", pViddecHandle);
145 if (NULL != pViddecHandle)
147 if (!m_isCCRendering)
150 int status = media_closeCaptionStart (pViddecHandle);
153 LOG_ERROR(
"start media_closeCaptionStart failed %d", status);
156 m_isCCReaderStarted =
true;
158 m_viddecHandle = pViddecHandle;
160 m_wasLoadedOnce =
true;
163 if ((m_isCCEnabled) && (!m_isParentalBlocked) && (!m_isCCStopedAtTrickMode))
167 QVariantHash options;
169 options[
"textForegroundColor"] =
"BLUE";
170 options[
"textItalicized"] =
"false";
171 options[
"windowBorderEdgeStyle"] =
"NONE";
172 options[
"textEdgeColor"] =
"RED";
173 options[
"textEdgeStyle"] =
"Uniform";
174 options[
"windowBorderEdgeColor"] =
"BLACK";
175 options[
"textBackgroundOpacity"] =
"SOLID";
176 options[
"textUnderline"] =
"false";
177 options[
"windowFillColor"] =
"white";
178 options[
"textSize"] =
"Medium";
179 options[
"textBackgroundColor"] =
"Green";
180 options[
"fontStyle"] =
"DEFAULT";
181 options[
"textForegroundOpacity"] =
"SOLID";
182 options[
"windowFillOpacity"] =
"TRANSPARENT";
184 setAttribute (options);
187 if (m_ccOptions.size() > 0)
192 LOG_INFO(
"ClosedCaptions::start - Started CC data fetching");
197 LOG_INFO(
"ClosedCaptions::start - CC is not enabled");
202 LOG_INFO(
"ClosedCaptions::start - Already started");
206 #ifdef USE_CLOSED_CAPTIONING_CHIPSET_I
207 else if ((pViddecHandle == NULL) && (m_viddecHandle != NULL))
210 int status = media_closeCaptionStop();
213 LOG_ERROR(
"ClosedCaptions::start media_closeCaptionStop failed %d", status);
219 m_viddecHandle = NULL;
224 LOG_ERROR(
"ClosedCaptions::start - Invalid video decoder handle passed");
230 bool ClosedCaptions::stop()
238 int status = media_closeCaptionStop();
241 LOG_ERROR(
"ClosedCaptions::stop media_closeCaptionStop failed %d", status);
246 LOG_INFO(
"ClosedCaptions::stop succeeded");
249 m_viddecHandle = NULL;
253 m_isParentalBlocked =
false;
254 m_isCCStopedAtTrickMode =
false;
255 m_isCCReaderStarted =
false;
260 bool ClosedCaptions::ccStart()
262 if (m_isCCReaderStarted && !m_isCCRendering)
265 m_isCCRendering =
true;
266 LOG_WARNING(
"ClosedCaptions::ccStart started");
267 if(0 == access(
"/tmp/force_cc_enable_disable_failure", F_OK))
269 LOG_WARNING(
"Forcing ccStart failure");
284 bool ClosedCaptions::ccStop()
289 m_isCCRendering =
false;
290 LOG_INFO(
"ClosedCaptions::ccStart stopped");
295 void ClosedCaptions::ccInit (
void)
297 static bool bInitStatus =
false;
302 int status = vlMpeosCCManagerInit();
305 LOG_ERROR(
"ClosedCaptions::ccInit vlMpeosCCManagerInit failed %d", status);
310 LOG_INFO(
"ClosedCaptions::ccInit succeeded");
312 if (0 != m_CCVisibilityStatus)
320 LOG_INFO(
"ClosedCaptions::ccInit - Already inited.. nothing to be done");
326 std::string ClosedCaptions::getAvailableTracks()
330 return "1,2,3,4,5,6";
334 void ClosedCaptions::setEvent(
bool status, moduleEvents eventType)
336 LOG_INFO(
"Entered %s \n", __FUNCTION__);
340 m_CCVisibilityStatus |= eventType;
344 if (m_CCVisibilityStatus & eventType)
346 m_CCVisibilityStatus ^= eventType;
349 if (0 == m_CCVisibilityStatus)
360 QVariantList ClosedCaptions::getSupportedOptions()
369 <<
"textForegroundColor"
370 <<
"textForegroundOpacity"
371 <<
"textBackgroundColor"
372 <<
"textBackgroundOpacity"
376 <<
"windowFillOpacity"
377 <<
"windowBorderEdgeColor"
378 <<
"windowBorderEdgeStyle"
385 QVariantList ClosedCaptions::getServiceDetails()
387 QVariantList availableCCServices;
388 QVariantHash ccServiceDetails;
391 dumpCaptionDescriptor();
394 int size = m_cationServices.length();
395 closedCaptionsService serviceData;
397 for(
int i = 0; i < size;i++)
399 serviceData = m_cationServices.at(i);
401 ccServiceDetails.insert(
"ccType",serviceData.ccType);
402 ccServiceDetails.insert(
"track",serviceData.track);
403 ccServiceDetails.insert(
"language",serviceData.language);
404 ccServiceDetails.insert(
"hasEasyReader",serviceData.hasEasyReader);
405 ccServiceDetails.insert(
"isWideAspectRatio",serviceData.isWideAspectRatio);
406 availableCCServices.append(ccServiceDetails);
408 return availableCCServices;
411 bool ClosedCaptions::setTrack(
const QString& track)
413 int iTrack = track.toInt();
415 LOG_WARNING(
"setTrack track=%s index=%d", track.toAscii().constData(), iTrack);
418 if(iTrack < 1 || iTrack > 6)
422 int status = ccSetDigitalChannel((
unsigned int)iTrack);
425 LOG_ERROR(
"setTrack ccSetDigitalChannel failed %d", status);
443 analogChannel = GSW_CC_ANALOG_SERVICE_NONE;
446 status = ccSetAnalogChannel(analogChannel);
449 LOG_ERROR(
"setTrack ccSetAnalogChannel failed %d", status);
454 if(0 == access(
"/tmp/force_cc_set_track_failure", F_OK))
456 LOG_WARNING(
"Forcing CC setTrack failure");
465 static gsw_CcColor* pCCcolorCaps[GSW_CC_COLOR_MAX];
466 static bool bFlagForMalloc =
false;
467 unsigned int ccSizeOfCabs = 0;
468 QByteArray inputBytes = inputStr.toAscii();
469 const char* pColorTextIn = inputBytes.constData();
470 LOG_INFO(
"%s: %s", __FUNCTION__, pColorTextIn ? pColorTextIn :
"NULL");
471 static const int MAX_COLOR_BUFFER_LEN = ((GSW_MAX_CC_COLOR_NAME_LENGTH > 8 ? GSW_MAX_CC_COLOR_NAME_LENGTH : 8) + 1);
472 char pColorText[MAX_COLOR_BUFFER_LEN];
474 if ((pColorTextIn) && (pGetColor))
479 bFlagForMalloc =
true;
480 for (
int iLoop = 0; iLoop < GSW_CC_COLOR_MAX; iLoop++)
483 memset (pCCcolorCaps[iLoop], 0,
sizeof(
gsw_CcColor));
488 if (0 == strncasecmp (
"0x000000", pColorTextIn, MAX_COLOR_BUFFER_LEN))
489 strncpy(pColorText,
"BLACK",
sizeof(pColorText));
491 if (0 == strncasecmp (
"0xFFFFFF", pColorTextIn, MAX_COLOR_BUFFER_LEN))
492 strncpy(pColorText,
"WHITE",
sizeof(pColorText));
494 if (0 == strncasecmp (
"0xFF0000", pColorTextIn, MAX_COLOR_BUFFER_LEN))
495 strncpy(pColorText,
"RED",
sizeof(pColorText));
497 if (0 == strncasecmp (
"0x00FF00", pColorTextIn, MAX_COLOR_BUFFER_LEN))
498 strncpy(pColorText,
"GREEN",
sizeof(pColorText));
500 if (0 == strncasecmp (
"0x0000FF", pColorTextIn, MAX_COLOR_BUFFER_LEN))
501 strncpy(pColorText,
"BLUE",
sizeof(pColorText));
503 if (0 == strncasecmp (
"0xFFFF00", pColorTextIn, MAX_COLOR_BUFFER_LEN))
504 strncpy(pColorText,
"YELLOW",
sizeof(pColorText));
506 if (0 == strncasecmp (
"0xFF00FF", pColorTextIn, MAX_COLOR_BUFFER_LEN))
507 strncpy(pColorText,
"MAGENTA",
sizeof(pColorText));
509 if (0 == strncasecmp (
"0x00FFFF", pColorTextIn, MAX_COLOR_BUFFER_LEN))
510 strncpy(pColorText,
"CYAN",
sizeof(pColorText));
512 if (0 == strncasecmp (
"0xFF000000", pColorTextIn, MAX_COLOR_BUFFER_LEN))
513 strncpy(pColorText,
"AUTO",
sizeof(pColorText));
515 strncpy(pColorText, pColorTextIn, MAX_COLOR_BUFFER_LEN);
517 ccGetCapability(attributeIndex, ccType, (
void**) &pCCcolorCaps, &ccSizeOfCabs);
519 for (
unsigned int i = 0; i < ccSizeOfCabs; i++)
522 if (0 == strncasecmp (pCCcolorCaps[i]->name, pColorText, GSW_MAX_CC_COLOR_NAME_LENGTH))
524 LOG_INFO(
"%s found match %s", __FUNCTION__, pCCcolorCaps[i]->name);
525 memcpy (pGetColor, pCCcolorCaps[i],
sizeof (
gsw_CcColor));
531 LOG_WARNING(
"%s: Unsupported Color type %s", __FUNCTION__, pColorText);
535 LOG_WARNING(
"%s: Null input", __FUNCTION__);
543 QByteArray inputBytes = inputStr.toAscii();
544 const char* pGivenOpacity = inputBytes.constData();
545 LOG_INFO(
"%s: %s", __FUNCTION__, pGivenOpacity ? pGivenOpacity :
"NULL");
546 if ((pGivenOpacity) && (pGetOpacity))
548 if (0 == strncasecmp (pGivenOpacity,
"solid", strlen (
"solid")))
549 *pGetOpacity = GSW_CC_OPACITY_SOLID;
550 else if (0 == strncasecmp (pGivenOpacity,
"flash", strlen (
"flash")))
551 *pGetOpacity = GSW_CC_OPACITY_FLASHING;
552 else if (0 == strncasecmp (pGivenOpacity,
"translucent", strlen (
"translucent")))
553 *pGetOpacity = GSW_CC_OPACITY_TRANSLUCENT;
554 else if (0 == strncasecmp (pGivenOpacity,
"transparent", strlen (
"transparent")))
555 *pGetOpacity = GSW_CC_OPACITY_TRANSPARENT;
556 else if (0 == strncasecmp (pGivenOpacity,
"auto", strlen (
"auto")))
557 *pGetOpacity = GSW_CC_OPACITY_EMBEDDED;
560 LOG_WARNING(
"%s: Unsupported Opacity type %s", __FUNCTION__, pGivenOpacity);
565 LOG_WARNING(
"%s: Null input", __FUNCTION__);
573 QByteArray inputBytes = inputStr.toAscii();
574 const char* pGivenFontSize = inputBytes.constData();
575 LOG_INFO(
"%s: %s", __FUNCTION__, pGivenFontSize ? pGivenFontSize :
"NULL");
576 if ((pGivenFontSize) && (pGetFontSize))
578 if (0 == strncasecmp (pGivenFontSize,
"small", strlen (
"small")))
579 *pGetFontSize = GSW_CC_FONT_SIZE_SMALL;
580 else if ((0 == strncasecmp (pGivenFontSize,
"standard", strlen (
"standard"))) || (0 == strncasecmp (pGivenFontSize,
"medium", strlen (
"medium"))))
581 *pGetFontSize = GSW_CC_FONT_SIZE_STANDARD;
582 else if (0 == strncasecmp (pGivenFontSize,
"large", strlen (
"large")))
583 *pGetFontSize = GSW_CC_FONT_SIZE_LARGE;
584 else if (0 == strncasecmp (pGivenFontSize,
"auto", strlen (
"auto")))
585 *pGetFontSize = GSW_CC_FONT_SIZE_EMBEDDED;
588 LOG_WARNING(
"%s: Unsupported Font Size type %s", __FUNCTION__, pGivenFontSize);
593 LOG_WARNING(
"%s: Null input", __FUNCTION__);
601 QByteArray inputBytes = inputStr.toAscii();
602 const char* pGivenFontStyle = inputBytes.constData();
603 LOG_INFO(
"%s: %s", __FUNCTION__, pGivenFontStyle ? pGivenFontStyle :
"NULL");
604 if ((pGivenFontStyle) && (pGetFontStyle))
606 if (0 == strncasecmp (pGivenFontStyle,
"default", strlen (
"default")))
607 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_DEFAULT,
sizeof(gsw_CcFontStyle));
608 else if ((0 == strncasecmp (pGivenFontStyle,
"monospaced_serif", strlen (
"monospaced_serif"))) || (0 == strncasecmp (pGivenFontStyle,
"Monospaced serif", strlen (
"Monospaced serif"))))
609 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_MONOSPACED_SERIF,
sizeof(gsw_CcFontStyle));
610 else if ((0 == strncasecmp (pGivenFontStyle,
"proportional_serif", strlen (
"proportional_serif"))) || (0 == strncasecmp (pGivenFontStyle,
"Proportional serif", strlen (
"Proportional serif"))))
611 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_PROPORTIONAL_SERIF,
sizeof(gsw_CcFontStyle));
612 else if ((0 == strncasecmp (pGivenFontStyle,
"monospaced_sanserif", strlen (
"monospaced_sanserif"))) || (0 == strncasecmp (pGivenFontStyle,
"Monospaced sans serif", strlen (
"Monospaced sans serif"))))
613 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_MONOSPACED_SANSSERIF,
sizeof(gsw_CcFontStyle));
614 else if ((0 == strncasecmp (pGivenFontStyle,
"proportional_sanserif", strlen (
"proportional_sanserif"))) || (0 == strncasecmp (pGivenFontStyle,
"Proportional sans serif", strlen (
"Proportional sans serif"))))
615 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_PROPORTIONAL_SANSSERIF,
sizeof(gsw_CcFontStyle));
616 else if (0 == strncasecmp (pGivenFontStyle,
"casual", strlen (
"casual")))
617 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_CASUAL,
sizeof(gsw_CcFontStyle));
618 else if (0 == strncasecmp (pGivenFontStyle,
"cursive", strlen (
"cursive")))
619 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_CURSIVE,
sizeof(gsw_CcFontStyle));
620 else if ((0 == strncasecmp (pGivenFontStyle,
"smallcaps", strlen (
"smallcaps"))) || (0 == strncasecmp (pGivenFontStyle,
"small capital", strlen (
"small capital"))))
621 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_SMALL_CAPITALS,
sizeof(gsw_CcFontStyle));
622 else if (0 == strncasecmp (pGivenFontStyle,
"auto", strlen (
"auto")))
623 memcpy (pGetFontStyle, GSW_CC_FONT_STYLE_EMBEDDED,
sizeof(gsw_CcFontStyle));
625 LOG_WARNING(
"%s: Unsupported Font style type %s", __FUNCTION__, pGivenFontStyle);
629 LOG_WARNING(
"%s: Null input", __FUNCTION__);
637 QByteArray inputBytes = inputStr.toAscii();
638 const char* pGivenEdgeType = inputBytes.constData();
639 LOG_INFO(
"%s: %s", __FUNCTION__, pGivenEdgeType ? pGivenEdgeType :
"NULL");
640 if ((pGivenEdgeType) && (pGetEdgeType))
642 if (0 == strncasecmp (pGivenEdgeType,
"none", strlen (
"none")))
643 *pGetEdgeType = GSW_CC_EDGE_TYPE_NONE;
644 else if (0 == strncasecmp (pGivenEdgeType,
"raised", strlen (
"raised")))
645 *pGetEdgeType = GSW_CC_EDGE_TYPE_RAISED;
646 else if (0 == strncasecmp (pGivenEdgeType,
"depressed", strlen (
"depressed")))
647 *pGetEdgeType = GSW_CC_EDGE_TYPE_DEPRESSED;
648 else if (0 == strncasecmp (pGivenEdgeType,
"uniform", strlen (
"uniform")))
649 *pGetEdgeType = GSW_CC_EDGE_TYPE_UNIFORM;
650 else if ((0 == strncasecmp (pGivenEdgeType,
"drop_shadow_left", strlen (
"drop_shadow_left"))) || (0 == strncasecmp (pGivenEdgeType,
"Left drop shadow", strlen (
"Left drop shadow"))))
651 *pGetEdgeType = GSW_CC_EDGE_TYPE_SHADOW_LEFT;
652 else if ((0 == strncasecmp (pGivenEdgeType,
"drop_shadow_right", strlen (
"drop_shadow_right"))) || (0 == strncasecmp (pGivenEdgeType,
"Right drop shadow", strlen (
"Right drop shadow"))))
653 *pGetEdgeType = GSW_CC_EDGE_TYPE_SHADOW_RIGHT;
654 else if (0 == strncasecmp (pGivenEdgeType,
"auto", strlen (
"auto")))
655 *pGetEdgeType = GSW_CC_EDGE_TYPE_EMBEDDED;
657 LOG_WARNING(
"%s: Unsupported Edge type %s", __FUNCTION__, pGivenEdgeType);
661 LOG_WARNING(
"%s: Null input", __FUNCTION__);
669 QByteArray inputBytes = inputStr.toAscii();
670 const char* pGivenTextStyle = inputBytes.constData();
671 LOG_INFO(
"%s: %s", __FUNCTION__, pGivenTextStyle ? pGivenTextStyle :
"NULL");
672 if ((pGivenTextStyle) && (pGetTextStyle))
674 if (0 == strncasecmp (pGivenTextStyle,
"false", strlen (
"false")))
675 *pGetTextStyle = GSW_CC_TEXT_STYLE_FALSE;
676 else if (0 == strncasecmp (pGivenTextStyle,
"true", strlen (
"true")))
677 *pGetTextStyle = GSW_CC_TEXT_STYLE_TRUE;
678 else if (0 == strncasecmp (pGivenTextStyle,
"auto", strlen (
"auto")))
679 *pGetTextStyle = GSW_CC_TEXT_STYLE_EMBEDDED_TEXT;
682 LOG_WARNING(
"%s: Unsupported Text style %s", __FUNCTION__, pGivenTextStyle);
687 LOG_WARNING(
"%s: Null input", __FUNCTION__);
693 void ClosedCaptions::setAttribute(QVariantHash options)
695 LOG_WARNING(
"setAttribute");
697 if (m_ccOptions != options)
699 m_ccOptions = options;
705 ccGetAttributes (&attribute, GSW_CC_TYPE_DIGITAL);
710 getColor (GSW_CC_ATTRIB_FONT_COLOR, GSW_CC_TYPE_DIGITAL, options[
"textForegroundColor"].toString(), &(attribute.
charFgColor));
712 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_COLOR, GSW_CC_TYPE_DIGITAL);
713 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_COLOR, GSW_CC_TYPE_ANALOG);
719 getColor (GSW_CC_ATTRIB_BACKGROUND_COLOR, GSW_CC_TYPE_DIGITAL, options[
"textBackgroundColor"].toString(), &(attribute.
charBgColor));
721 ccSetAttributes(&attribute, GSW_CC_ATTRIB_BACKGROUND_COLOR, GSW_CC_TYPE_DIGITAL);
722 ccSetAttributes(&attribute, GSW_CC_ATTRIB_BACKGROUND_COLOR, GSW_CC_TYPE_ANALOG);
728 getColor (GSW_CC_ATTRIB_BORDER_COLOR, GSW_CC_TYPE_DIGITAL, options[
"windowBorderEdgeColor"].toString(), &(attribute.
borderColor));
730 ccSetAttributes(&attribute, GSW_CC_ATTRIB_BORDER_COLOR, GSW_CC_TYPE_DIGITAL);
731 ccSetAttributes(&attribute, GSW_CC_ATTRIB_BORDER_COLOR, GSW_CC_TYPE_ANALOG);
737 getColor (GSW_CC_ATTRIB_WIN_COLOR, GSW_CC_TYPE_DIGITAL, options[
"windowFillColor"].toString(), &(attribute.
winColor));
739 ccSetAttributes(&attribute, GSW_CC_ATTRIB_WIN_COLOR, GSW_CC_TYPE_DIGITAL);
740 ccSetAttributes(&attribute, GSW_CC_ATTRIB_WIN_COLOR, GSW_CC_TYPE_ANALOG);
746 getColor (GSW_CC_ATTRIB_EDGE_COLOR, GSW_CC_TYPE_DIGITAL, options[
"textEdgeColor"].toString(), &(attribute.
edgeColor));
748 ccSetAttributes(&attribute, GSW_CC_ATTRIB_EDGE_COLOR, GSW_CC_TYPE_DIGITAL);
749 ccSetAttributes(&attribute, GSW_CC_ATTRIB_EDGE_COLOR, GSW_CC_TYPE_ANALOG);
755 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_OPACITY, GSW_CC_TYPE_DIGITAL);
756 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_OPACITY, GSW_CC_TYPE_ANALOG);
762 ccSetAttributes(&attribute, GSW_CC_ATTRIB_BACKGROUND_OPACITY, GSW_CC_TYPE_DIGITAL);
763 ccSetAttributes(&attribute, GSW_CC_ATTRIB_BACKGROUND_OPACITY, GSW_CC_TYPE_ANALOG);
769 ccSetAttributes(&attribute, GSW_CC_ATTRIB_WIN_OPACITY, GSW_CC_TYPE_DIGITAL);
770 ccSetAttributes(&attribute, GSW_CC_ATTRIB_WIN_OPACITY, GSW_CC_TYPE_ANALOG);
776 ccSetAttributes(&attribute, GSW_CC_ATTRIB_EDGE_TYPE, GSW_CC_TYPE_DIGITAL);
777 ccSetAttributes(&attribute, GSW_CC_ATTRIB_EDGE_TYPE, GSW_CC_TYPE_ANALOG);
783 ccSetAttributes(&attribute, GSW_CC_ATTRIB_BORDER_TYPE, GSW_CC_TYPE_DIGITAL);
784 ccSetAttributes(&attribute, GSW_CC_ATTRIB_BORDER_TYPE, GSW_CC_TYPE_ANALOG);
790 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_STYLE, GSW_CC_TYPE_DIGITAL);
791 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_STYLE, GSW_CC_TYPE_ANALOG);
797 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_SIZE, GSW_CC_TYPE_DIGITAL);
798 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_SIZE, GSW_CC_TYPE_ANALOG);
810 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_ITALIC, GSW_CC_TYPE_DIGITAL);
811 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_ITALIC, GSW_CC_TYPE_ANALOG);
817 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_UNDERLINE, GSW_CC_TYPE_DIGITAL);
818 ccSetAttributes(&attribute, GSW_CC_ATTRIB_FONT_UNDERLINE, GSW_CC_TYPE_ANALOG);
826 bool ClosedCaptions::ccEASStarted()
828 LOG_INFO(
"ClosedCaptions::ccEASStarted - Entered");
833 bool ClosedCaptions::ccEASStopped()
835 LOG_INFO(
"ClosedCaptions::ccEASStopped - Entered");
847 bool ClosedCaptions::ccParentalLockStart()
849 LOG_INFO(
"ClosedCaptions::ccParentalLockStart - Entered");
850 m_isParentalBlocked =
true;
854 bool ClosedCaptions::ccParentalLockStop()
856 LOG_INFO(
"ClosedCaptions::ccParentalLockStop - Entered");
857 if ((m_isCCEnabled) && (m_isParentalBlocked) && (!m_isCCStopedAtTrickMode))
860 if (m_ccOptions.size() > 0)
862 setAttribute(m_ccOptions);
865 m_isParentalBlocked =
false;
869 bool ClosedCaptions::stopCCatTrickMode ()
871 LOG_INFO(
"ClosedCaptions::stopCCatTrickMode - Entered");
872 m_isCCStopedAtTrickMode =
true;
876 bool ClosedCaptions::startCCatNormalMode ()
878 LOG_INFO(
"ClosedCaptions::startCCatNormalMode - Entered");
879 m_isCCStopedAtTrickMode =
false;
880 if ((m_isCCEnabled) && (!m_isParentalBlocked) && (!m_isCCStopedAtTrickMode))
887 void ClosedCaptions::ccGfxPreResolution(
unsigned id)
889 LOG_INFO(
"ClosedCaptions::ccGfxPreResolution - Entered");
890 vlGfxPreResolution(
id);
895 void ClosedCaptions::ccGfxSetResolution(
unsigned id,
int width,
int height)
897 LOG_INFO(
"ClosedCaptions::ccGfxSetResolution - Entered");
898 vlGfxSetResolution(
id, width, height);
903 void ClosedCaptions::ccGfxPostResolution(
int id,
int width,
int height)
905 LOG_INFO(
"ClosedCaptions::ccGfxPostResolution - Entered");
906 vlGfxPostResolution(
id, width, height);