269 CleanupDeletePushL( jp2kComment ); |
269 CleanupDeletePushL( jp2kComment ); |
270 |
270 |
271 jp2kComment->iComment = mainMarker.iCom[index]->iCcom; |
271 jp2kComment->iComment = mainMarker.iCom[index]->iCcom; |
272 |
272 |
273 User::LeaveIfError( iFrameData->AppendImageData( jp2kComment ) ); |
273 User::LeaveIfError( iFrameData->AppendImageData( jp2kComment ) ); |
274 CleanupStack::Pop(); |
274 CleanupStack::Pop(jp2kComment); |
275 |
275 |
276 // Transfer the ownership of the buffer from TMainMarker to framework |
276 // Transfer the ownership of the buffer from TMainMarker to framework |
277 User::LeaveIfError( iFrameData->AppendImageBuffer( jp2kComment->iComment ) ); |
277 User::LeaveIfError( iFrameData->AppendImageBuffer( jp2kComment->iComment ) ); |
278 mainMarker.iCom[index]->iCcom = 0; |
278 mainMarker.iCom[index]->iCcom = 0; |
279 } |
279 } |
839 } |
839 } |
840 else |
840 else |
841 { |
841 { |
842 // COD in Tile Part Header |
842 // COD in Tile Part Header |
843 codMarker = new ( ELeave ) TCODMarker; |
843 codMarker = new ( ELeave ) TCODMarker; |
844 //CleanupDeletePushL( codMarker ); |
844 CleanupDeletePushL( codMarker ); |
845 CleanupStack::PushL(codMarker); |
|
846 } |
845 } |
847 |
846 |
848 codMarker->iScod = *iReader.iPtr++; |
847 codMarker->iScod = *iReader.iPtr++; |
849 codMarker->iProgressionOrder = *iReader.iPtr++; |
848 codMarker->iProgressionOrder = *iReader.iPtr++; |
850 codMarker->iNumOfLayers = PtrReadUtil::ReadBigEndianUint16Inc( iReader.iPtr ); |
849 codMarker->iNumOfLayers = PtrReadUtil::ReadBigEndianUint16Inc( iReader.iPtr ); |
862 |
861 |
863 if ( codMarker->iScod & 0x01 ) |
862 if ( codMarker->iScod & 0x01 ) |
864 { |
863 { |
865 // Entropy coder with precincts defined below |
864 // Entropy coder with precincts defined below |
866 codMarker->iPrecinctSiz = HBufC8::NewL( codMarker->iNumOfLevels + 1 ); |
865 codMarker->iPrecinctSiz = HBufC8::NewL( codMarker->iNumOfLevels + 1 ); |
867 CleanupStack::PushL(codMarker->iPrecinctSiz); |
|
868 for ( TUint8 index = 0; index < codMarker->iNumOfLevels + 1; ++index ) |
866 for ( TUint8 index = 0; index < codMarker->iNumOfLevels + 1; ++index ) |
869 { |
867 { |
870 codMarker->iPrecinctSiz->Des().Append( *iReader.iPtr++ ); |
868 codMarker->iPrecinctSiz->Des().Append( *iReader.iPtr++ ); |
871 } |
869 } |
872 } |
870 } |
875 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
873 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
876 { |
874 { |
877 // We must be missing some data in the marker |
875 // We must be missing some data in the marker |
878 User::Leave( KErrCorrupt ); |
876 User::Leave( KErrCorrupt ); |
879 } |
877 } |
880 if ( codMarker->iScod & 0x01 ) |
878 |
881 { |
|
882 CleanupStack::Pop(codMarker->iPrecinctSiz); |
|
883 } |
|
884 if ( !aMain ) |
879 if ( !aMain ) |
885 { |
880 { |
886 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
881 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
887 |
882 |
888 // Append COD to the current tile and decrement the tile length |
883 // Append COD to the current tile and decrement the tile length |
889 tile.AppendCOD( codMarker, markerLength + KMarkerSize ); |
884 tile.AppendCOD( codMarker, markerLength + KMarkerSize ); |
890 CleanupStack::PopAndDestroy(codMarker); |
885 CleanupStack::Pop(codMarker); |
891 } |
886 } |
892 |
887 |
893 // Any valid marker may come after COD marker |
888 // Any valid marker may come after COD marker |
894 iFHState = EStateInUnknown; |
889 iFHState = EStateInUnknown; |
895 return EFrameComplete; |
890 return EFrameComplete; |
925 } |
920 } |
926 |
921 |
927 const TSizMarker& sizMarker = iImageInfo->SizMarker(); |
922 const TSizMarker& sizMarker = iImageInfo->SizMarker(); |
928 |
923 |
929 TCOCMarker *cocMarker = new ( ELeave ) TCOCMarker; |
924 TCOCMarker *cocMarker = new ( ELeave ) TCOCMarker; |
930 //CleanupDeletePushL(cocMarker); |
925 CleanupDeletePushL(cocMarker); |
931 CleanupStack::PushL(cocMarker); |
|
932 |
926 |
933 if ( sizMarker.iCsiz < 257 ) |
927 if ( sizMarker.iCsiz < 257 ) |
934 { |
928 { |
935 // 8 bits component |
929 // 8 bits component |
936 cocMarker->iCcoc = *iReader.iPtr++; |
930 cocMarker->iCcoc = *iReader.iPtr++; |
955 |
949 |
956 if ( cocMarker->iScoc & 0x01 ) |
950 if ( cocMarker->iScoc & 0x01 ) |
957 { |
951 { |
958 // Entropy coder with precincts defined below |
952 // Entropy coder with precincts defined below |
959 cocMarker->iPrecinctSiz = HBufC8::NewL( cocMarker->iNumOfLevels + 1 ); |
953 cocMarker->iPrecinctSiz = HBufC8::NewL( cocMarker->iNumOfLevels + 1 ); |
960 CleanupStack::PushL(cocMarker->iPrecinctSiz); |
|
961 for ( TUint8 index = 0; index < cocMarker->iNumOfLevels + 1; ++index ) |
954 for ( TUint8 index = 0; index < cocMarker->iNumOfLevels + 1; ++index ) |
962 { |
955 { |
963 cocMarker->iPrecinctSiz->Des().Append( *iReader.iPtr++ ); |
956 cocMarker->iPrecinctSiz->Des().Append( *iReader.iPtr++ ); |
964 } |
957 } |
965 } |
958 } |
980 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
973 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
981 |
974 |
982 // Append COC to the current tile and decrement the tile length |
975 // Append COC to the current tile and decrement the tile length |
983 tile.AppendCOCL( cocMarker, markerLength + KMarkerSize ); |
976 tile.AppendCOCL( cocMarker, markerLength + KMarkerSize ); |
984 } |
977 } |
985 |
978 CleanupStack::Pop(cocMarker); |
986 if ( cocMarker->iScoc & 0x01 ) |
|
987 { |
|
988 CleanupStack::Pop(cocMarker->iPrecinctSiz); |
|
989 } |
|
990 CleanupStack::PopAndDestroy(cocMarker); |
|
991 |
979 |
992 // Any valid marker may come after COC marker |
980 // Any valid marker may come after COC marker |
993 iFHState = EStateInUnknown; |
981 iFHState = EStateInUnknown; |
994 |
982 |
995 return EFrameComplete; |
983 return EFrameComplete; |
1033 else |
1021 else |
1034 { |
1022 { |
1035 // QCD in Tile Part Header |
1023 // QCD in Tile Part Header |
1036 qcdMarker = new ( ELeave ) TQCDMarker; |
1024 qcdMarker = new ( ELeave ) TQCDMarker; |
1037 |
1025 |
1038 //CleanupDeletePushL( qcdMarker ); |
1026 CleanupDeletePushL( qcdMarker ); |
1039 CleanupStack::PushL( qcdMarker ); |
|
1040 } |
1027 } |
1041 |
1028 |
1042 qcdMarker->iSqcd = *iReader.iPtr++; |
1029 qcdMarker->iSqcd = *iReader.iPtr++; |
1043 |
1030 |
1044 if ( qcdMarker->iSqcd & 0x01 ) |
1031 if ( qcdMarker->iSqcd & 0x01 ) |
1077 qcdMarker->iExponent->Des().Append( (TUint8)( ( *iReader.iPtr++ >> 3 ) & 0x1f ) ); |
1064 qcdMarker->iExponent->Des().Append( (TUint8)( ( *iReader.iPtr++ >> 3 ) & 0x1f ) ); |
1078 --entries; |
1065 --entries; |
1079 } |
1066 } |
1080 } |
1067 } |
1081 } |
1068 } |
1082 |
|
1083 CleanupStack::PushL( qcdMarker->iExponent ); |
|
1084 if ((qcdMarker->iSqcd & 0x1f) || (qcdMarker->iSqcd & 0x01)) |
|
1085 { |
|
1086 CleanupStack::PushL( qcdMarker->iMantissa ); |
|
1087 } |
|
1088 |
1069 |
1089 // Make sure we read all the data |
1070 // Make sure we read all the data |
1090 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
1071 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
1091 { |
1072 { |
1092 // We must be missing some data in the marker |
1073 // We must be missing some data in the marker |
1093 User::Leave( KErrCorrupt ); |
1074 User::Leave( KErrCorrupt ); |
1094 } |
1075 } |
1095 |
1076 |
1096 |
|
1097 if ((qcdMarker->iSqcd & 0x1f) || (qcdMarker->iSqcd & 0x01)) |
|
1098 { |
|
1099 CleanupStack::Pop( qcdMarker->iMantissa ); |
|
1100 } |
|
1101 |
|
1102 CleanupStack::Pop( qcdMarker->iExponent ); |
|
1103 |
|
1104 if ( !aMain ) |
1077 if ( !aMain ) |
1105 { |
1078 { |
1106 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1079 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1107 |
1080 |
1108 // Append QCD to the current tile and decrement the tile length |
1081 // Append QCD to the current tile and decrement the tile length |
1109 tile.AppendQCD( qcdMarker, markerLength + KMarkerSize ); |
1082 tile.AppendQCD( qcdMarker, markerLength + KMarkerSize ); |
1110 //CleanupStack::PopAndDestroy(qcdMarker); |
1083 CleanupStack::Pop(qcdMarker); |
1111 CleanupStack::PopAndDestroy(qcdMarker); |
|
1112 } |
1084 } |
1113 |
1085 |
1114 // Any valid marker may come after QCD marker |
1086 // Any valid marker may come after QCD marker |
1115 iFHState = EStateInUnknown; |
1087 iFHState = EStateInUnknown; |
1116 |
1088 |
1147 |
1119 |
1148 const TSizMarker& sizMarker = iImageInfo->SizMarker(); |
1120 const TSizMarker& sizMarker = iImageInfo->SizMarker(); |
1149 |
1121 |
1150 TQCCMarker *qccMarker = new (ELeave) TQCCMarker; |
1122 TQCCMarker *qccMarker = new (ELeave) TQCCMarker; |
1151 |
1123 |
1152 //CleanupDeletePushL( qccMarker ); |
1124 CleanupDeletePushL( qccMarker ); |
1153 CleanupStack::PushL( qccMarker ); |
|
1154 |
1125 |
1155 if ( sizMarker.iCsiz < 257 ) |
1126 if ( sizMarker.iCsiz < 257 ) |
1156 { |
1127 { |
1157 // 8 bits component |
1128 // 8 bits component |
1158 qccMarker->iCqcc = *iReader.iPtr++; |
1129 qccMarker->iCqcc = *iReader.iPtr++; |
1201 qccMarker->iExponent->Des().Append( (TUint8)( ( *iReader.iPtr++ >> 3 ) & 0x1f ) ); |
1172 qccMarker->iExponent->Des().Append( (TUint8)( ( *iReader.iPtr++ >> 3 ) & 0x1f ) ); |
1202 --entries; |
1173 --entries; |
1203 } |
1174 } |
1204 } |
1175 } |
1205 } |
1176 } |
1206 |
|
1207 CleanupStack::PushL( qccMarker->iExponent ); |
|
1208 if( (qccMarker->iSqcc & 0x1f) || (qccMarker->iSqcc & 0x01) ) |
|
1209 { |
|
1210 CleanupStack::PushL( qccMarker->iMantissa ); |
|
1211 } |
|
1212 |
1177 |
1213 // Make sure we read all the data |
1178 // Make sure we read all the data |
1214 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
1179 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
1215 { |
1180 { |
1216 // We must be missing some data in the marker |
1181 // We must be missing some data in the marker |
1226 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1191 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1227 |
1192 |
1228 // Append QCC to the current tile and decrement the tile length |
1193 // Append QCC to the current tile and decrement the tile length |
1229 tile.AppendQCCL( qccMarker, markerLength + KMarkerSize ); |
1194 tile.AppendQCCL( qccMarker, markerLength + KMarkerSize ); |
1230 } |
1195 } |
1231 |
1196 CleanupStack::Pop(qccMarker); |
1232 if( (qccMarker->iSqcc & 0x1f) || (qccMarker->iSqcc & 0x01) ) |
|
1233 { |
|
1234 CleanupStack::Pop( qccMarker->iMantissa ); |
|
1235 } |
|
1236 |
|
1237 CleanupStack::Pop( qccMarker->iExponent ); |
|
1238 CleanupStack::PopAndDestroy(qccMarker); |
|
1239 |
1197 |
1240 // Any valid marker may come after QCC marker |
1198 // Any valid marker may come after QCC marker |
1241 iFHState = EStateInUnknown; |
1199 iFHState = EStateInUnknown; |
1242 |
1200 |
1243 return EFrameComplete; |
1201 return EFrameComplete; |
1273 } |
1231 } |
1274 |
1232 |
1275 const TSizMarker& sizMarker = iImageInfo->SizMarker(); |
1233 const TSizMarker& sizMarker = iImageInfo->SizMarker(); |
1276 |
1234 |
1277 TRGNMarker *rgnMarker = new ( ELeave ) TRGNMarker; |
1235 TRGNMarker *rgnMarker = new ( ELeave ) TRGNMarker; |
1278 CleanupStack::PushL( rgnMarker ); |
1236 CleanupDeletePushL( rgnMarker ); |
1279 |
1237 |
1280 if ( sizMarker.iCsiz < 257 ) |
1238 if ( sizMarker.iCsiz < 257 ) |
1281 { |
1239 { |
1282 // 8 bits component |
1240 // 8 bits component |
1283 rgnMarker->iCrgn = *iReader.iPtr++; |
1241 rgnMarker->iCrgn = *iReader.iPtr++; |
1307 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1265 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1308 |
1266 |
1309 // Append RGN to the current tile and decrement the tile length |
1267 // Append RGN to the current tile and decrement the tile length |
1310 tile.AppendRGNL( rgnMarker, markerLength + KMarkerSize ); |
1268 tile.AppendRGNL( rgnMarker, markerLength + KMarkerSize ); |
1311 } |
1269 } |
1312 CleanupStack::PopAndDestroy(rgnMarker); |
1270 CleanupStack::Pop(rgnMarker); |
1313 |
1271 |
1314 // Any valid marker may come after RGN marker |
1272 // Any valid marker may come after RGN marker |
1315 iFHState = EStateInUnknown; |
1273 iFHState = EStateInUnknown; |
1316 |
1274 |
1317 return EFrameComplete; |
1275 return EFrameComplete; |
1400 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1358 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1401 |
1359 |
1402 // Append POC to the current tile and decrement the tile length |
1360 // Append POC to the current tile and decrement the tile length |
1403 tile.AppendPOCL( pocMarker, markerLength + KMarkerSize ); |
1361 tile.AppendPOCL( pocMarker, markerLength + KMarkerSize ); |
1404 } |
1362 } |
1405 CleanupStack::Pop( ); |
1363 CleanupStack::Pop(pocMarker); |
1406 |
1364 |
1407 // Any valid marker may come after POC marker |
1365 // Any valid marker may come after POC marker |
1408 iFHState = EStateInUnknown; |
1366 iFHState = EStateInUnknown; |
1409 |
1367 |
1410 return EFrameComplete; |
1368 return EFrameComplete; |
1447 // Underflow, will keep reading |
1405 // Underflow, will keep reading |
1448 isUnderflow = ETrue; |
1406 isUnderflow = ETrue; |
1449 } |
1407 } |
1450 |
1408 |
1451 TPPMMarker *ppmMarker = new ( ELeave ) TPPMMarker; |
1409 TPPMMarker *ppmMarker = new ( ELeave ) TPPMMarker; |
1452 CleanupStack::PushL( ppmMarker ); |
1410 CleanupDeletePushL( ppmMarker ); |
1453 |
1411 |
1454 ppmMarker->iZppm = *iReader.iPtr++; |
1412 ppmMarker->iZppm = *iReader.iPtr++; |
1455 TUint32 entries = (TUint32)( markerLength - KMarkerSize - 1 ); |
1413 TUint32 entries = (TUint32)( markerLength - KMarkerSize - 1 ); |
1456 |
1414 |
1457 ppmMarker->iNppm = entries; |
1415 ppmMarker->iNppm = entries; |
1458 ppmMarker->iIppm = HBufC8::NewL( entries ); |
1416 ppmMarker->iIppm = HBufC8::NewL( entries ); |
1459 CleanupStack::PushL( ppmMarker->iIppm ); |
|
1460 |
1417 |
1461 if ( !isUnderflow ) |
1418 if ( !isUnderflow ) |
1462 { |
1419 { |
1463 ppmMarker->iIppm->Des( ).Append( iReader.iPtr, entries ); |
1420 ppmMarker->iIppm->Des( ).Append( iReader.iPtr, entries ); |
1464 iReader.iPtr += entries; |
1421 iReader.iPtr += entries; |
1664 iReader.iPtr -= KMarkerMinLength; |
1620 iReader.iPtr -= KMarkerMinLength; |
1665 return EFrameIncomplete; |
1621 return EFrameIncomplete; |
1666 } |
1622 } |
1667 |
1623 |
1668 TPLMMarker *plmMarker = new ( ELeave ) TPLMMarker; |
1624 TPLMMarker *plmMarker = new ( ELeave ) TPLMMarker; |
1669 CleanupStack::PushL( plmMarker ); |
1625 CleanupDeletePushL( plmMarker ); |
1670 |
1626 |
1671 plmMarker->iZplm = *iReader.iPtr++; |
1627 plmMarker->iZplm = *iReader.iPtr++; |
1672 TUint32 entries = (TUint32)( markerLength - KMarkerSize - 1 ); |
1628 TUint32 entries = (TUint32)( markerLength - KMarkerSize - 1 ); |
1673 |
1629 |
1674 plmMarker->iNplm = (TUint8)entries; |
1630 plmMarker->iNplm = (TUint8)entries; |
1675 plmMarker->iIplm = HBufC8::NewL( entries ); |
1631 plmMarker->iIplm = HBufC8::NewL( entries ); |
1676 CleanupStack::PushL( plmMarker->iIplm ); |
|
1677 plmMarker->iIplm->Des().Append( iReader.iPtr, entries ); |
1632 plmMarker->iIplm->Des().Append( iReader.iPtr, entries ); |
1678 iReader.iPtr += entries; |
1633 iReader.iPtr += entries; |
1679 |
1634 |
1680 // Make sure we read all the data |
1635 // Make sure we read all the data |
1681 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
1636 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
1705 |
1660 |
1706 if ( tmp ) |
1661 if ( tmp ) |
1707 { |
1662 { |
1708 User::LeaveIfError( mainMarker.iPlm.Append( plmMarker ) ); |
1663 User::LeaveIfError( mainMarker.iPlm.Append( plmMarker ) ); |
1709 } |
1664 } |
1710 CleanupStack::Pop(plmMarker->iIplm); |
1665 CleanupStack::Pop(plmMarker); |
1711 CleanupStack::PopAndDestroy(plmMarker); |
|
1712 |
1666 |
1713 // Any valid marker may come after PLM marker |
1667 // Any valid marker may come after PLM marker |
1714 iFHState = EStateInUnknown; |
1668 iFHState = EStateInUnknown; |
1715 |
1669 |
1716 return EFrameComplete; |
1670 return EFrameComplete; |
1765 User::Leave( KErrCorrupt ); |
1719 User::Leave( KErrCorrupt ); |
1766 } |
1720 } |
1767 |
1721 |
1768 iImageInfo->AppendCRGL( crgMarker ); |
1722 iImageInfo->AppendCRGL( crgMarker ); |
1769 |
1723 |
1770 CleanupStack::Pop( ); |
1724 CleanupStack::Pop(crgMarker); |
1771 |
1725 |
1772 // Any valid marker may come after CRG marker |
1726 // Any valid marker may come after CRG marker |
1773 iFHState = EStateInUnknown; |
1727 iFHState = EStateInUnknown; |
1774 |
1728 |
1775 return EFrameComplete; |
1729 return EFrameComplete; |
1811 { |
1765 { |
1812 // Underflow, will keep reading |
1766 // Underflow, will keep reading |
1813 isUnderflow = ETrue; |
1767 isUnderflow = ETrue; |
1814 } |
1768 } |
1815 |
1769 |
1816 TCOMMarker* comMarker = new ( ELeave ) TCOMMarker; |
1770 TCOMMarker* comMarker = new ( ELeave ) TCOMMarker; |
1817 //CleanupDeletePushL(comMarker); |
1771 CleanupDeletePushL( comMarker ); |
1818 CleanupStack::PushL( comMarker ); |
|
1819 |
1772 |
1820 comMarker->iRcom = PtrReadUtil::ReadBigEndianUint16Inc( iReader.iPtr ); |
1773 comMarker->iRcom = PtrReadUtil::ReadBigEndianUint16Inc( iReader.iPtr ); |
1821 TInt entries = markerLength - ( 2 * KMarkerSize ); |
1774 TInt entries = markerLength - ( 2 * KMarkerSize ); |
1822 |
1775 |
1823 comMarker->iCcom = HBufC8::NewL( entries ); |
1776 comMarker->iCcom = HBufC8::NewL( entries ); |
1824 //CleanupDeletePushL( comMarker->iCcom ); |
|
1825 CleanupStack::PushL(comMarker->iCcom); |
|
1826 if ( !isUnderflow ) |
1777 if ( !isUnderflow ) |
1827 { |
1778 { |
1828 comMarker->iCcom->Des().Append( iReader.iPtr, entries ); |
1779 comMarker->iCcom->Des().Append( iReader.iPtr, entries ); |
1829 iReader.iPtr += entries; |
1780 iReader.iPtr += entries; |
1830 iPreviousCOM = 0; |
1781 iPreviousCOM = 0; |
1853 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1804 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
1854 |
1805 |
1855 // Append COM to the current tile and decrement the tile length |
1806 // Append COM to the current tile and decrement the tile length |
1856 tile.AppendCOML( comMarker, markerLength + KMarkerSize ); |
1807 tile.AppendCOML( comMarker, markerLength + KMarkerSize ); |
1857 } |
1808 } |
1858 CleanupStack::Pop(comMarker->iCcom); |
|
1859 CleanupStack::Pop(comMarker); |
1809 CleanupStack::Pop(comMarker); |
1860 } |
1810 } |
1861 else |
1811 else |
1862 { |
1812 { |
1863 if ( ( iReader.iPtrEnd - iReader.iPtr ) < iPreviousCOM->iRemainder ) |
1813 if ( ( iReader.iPtrEnd - iReader.iPtr ) < iPreviousCOM->iRemainder ) |
2350 iReader.iPtr -= KMarkerMinLength; |
2300 iReader.iPtr -= KMarkerMinLength; |
2351 return EFrameIncomplete; |
2301 return EFrameIncomplete; |
2352 } |
2302 } |
2353 |
2303 |
2354 TPPTMarker *pptMarker = new ( ELeave ) TPPTMarker; |
2304 TPPTMarker *pptMarker = new ( ELeave ) TPPTMarker; |
2355 CleanupStack::PushL( pptMarker ); |
2305 CleanupDeletePushL(pptMarker); |
2356 |
2306 |
2357 TInt entries = markerLength - KMarkerSize - 1; |
2307 TInt entries = markerLength - KMarkerSize - 1; |
2358 pptMarker->iZppt = *iReader.iPtr++; |
2308 pptMarker->iZppt = *iReader.iPtr++; |
2359 pptMarker->iIppt = HBufC8::NewL( entries ); |
2309 pptMarker->iIppt = HBufC8::NewL( entries ); |
2360 CleanupStack::PushL( pptMarker->iIppt ); |
|
2361 pptMarker->iIppt->Des( ).Append( iReader.iPtr, entries ); |
2310 pptMarker->iIppt->Des( ).Append( iReader.iPtr, entries ); |
2362 iReader.iPtr += entries; |
2311 iReader.iPtr += entries; |
2363 |
2312 |
2364 // Make sure we read all the data |
2313 // Make sure we read all the data |
2365 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
2314 if ( ( iReader.iPtr - iReader.iPtrStartMarker ) != ( markerLength + KMarkerSize ) ) |
2370 |
2319 |
2371 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
2320 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
2372 |
2321 |
2373 // Append PPT to the current tile and decrement the tile length |
2322 // Append PPT to the current tile and decrement the tile length |
2374 tile.AppendPPTL( pptMarker, markerLength + KMarkerSize ); |
2323 tile.AppendPPTL( pptMarker, markerLength + KMarkerSize ); |
2375 CleanupStack::Pop(pptMarker->iIppt); |
2324 CleanupStack::Pop(pptMarker); |
2376 CleanupStack::PopAndDestroy(pptMarker); |
|
2377 |
2325 |
2378 // Any valid marker may come after PPT marker |
2326 // Any valid marker may come after PPT marker |
2379 iFHState = EStateInUnknown; |
2327 iFHState = EStateInUnknown; |
2380 |
2328 |
2381 return EFrameComplete; |
2329 return EFrameComplete; |
2409 iReader.iPtr -= KMarkerMinLength; |
2357 iReader.iPtr -= KMarkerMinLength; |
2410 return EFrameIncomplete; |
2358 return EFrameIncomplete; |
2411 } |
2359 } |
2412 |
2360 |
2413 TPLTMarker *pltMarker = new ( ELeave ) TPLTMarker; |
2361 TPLTMarker *pltMarker = new ( ELeave ) TPLTMarker; |
2414 CleanupStack::PushL( pltMarker ); |
2362 CleanupDeletePushL( pltMarker ); |
2415 //CleanupDeletePushL( pltMarker ); |
|
2416 |
2363 |
2417 pltMarker->iZplt = *iReader.iPtr++; |
2364 pltMarker->iZplt = *iReader.iPtr++; |
2418 |
2365 |
2419 TInt entries = markerLength - KMarkerSize - 1; |
2366 TInt entries = markerLength - KMarkerSize - 1; |
2420 while ( entries ) |
2367 while ( entries ) |
2432 |
2379 |
2433 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
2380 CJ2kTileInfo& tile = CONST_CAST( CJ2kTileInfo&, iImageInfo->TileAt( iLastTileIndex ) ); |
2434 |
2381 |
2435 // Append PLT to the current tile and decrement the tile length |
2382 // Append PLT to the current tile and decrement the tile length |
2436 tile.AppendPLTL( pltMarker, markerLength + KMarkerSize ); |
2383 tile.AppendPLTL( pltMarker, markerLength + KMarkerSize ); |
2437 //CleanupStack::Pop(); |
2384 CleanupStack::Pop(pltMarker); |
2438 CleanupStack::PopAndDestroy(pltMarker); |
|
2439 |
2385 |
2440 // Any valid marker may come after PLT marker |
2386 // Any valid marker may come after PLT marker |
2441 iFHState = EStateInUnknown; |
2387 iFHState = EStateInUnknown; |
2442 |
2388 |
2443 return EFrameComplete; |
2389 return EFrameComplete; |