@@ -87,6 +87,8 @@ std::pair<String, Item> ItemFactory::parseItem(
8787 return parseGnre (atom, data);
8888 case ItemHandlerType::Covr:
8989 return parseCovr (atom, data);
90+ case ItemHandlerType::Stem:
91+ return parseStem (atom, data);
9092 case ItemHandlerType::TextImplicit:
9193 return parseText (atom, data, -1 );
9294 case ItemHandlerType::Text:
@@ -128,6 +130,8 @@ ByteVector ItemFactory::renderItem(
128130 return renderInt (name, item);
129131 case ItemHandlerType::Covr:
130132 return renderCovr (name, item);
133+ case ItemHandlerType::Stem:
134+ return renderStem (name, item);
131135 case ItemHandlerType::TextImplicit:
132136 return renderText (name, item, TypeImplicit);
133137 case ItemHandlerType::Text:
@@ -175,8 +179,8 @@ std::pair<ByteVector, Item> ItemFactory::itemFromProperty(
175179 case ItemHandlerType::TextImplicit:
176180 case ItemHandlerType::Text:
177181 return {name, values};
178-
179182 case ItemHandlerType::Covr:
183+ case ItemHandlerType::Stem:
180184 debug (" MP4: Invalid item \" " + name + " \" for property" );
181185 break ;
182186 case ItemHandlerType::Unknown:
@@ -222,6 +226,7 @@ std::pair<String, StringList> ItemFactory::itemToProperty(
222226 return {key, item.toStringList ()};
223227
224228 case ItemHandlerType::Covr:
229+ case ItemHandlerType::Stem:
225230 debug (" MP4: Invalid item \" " + itemName + " \" for property" );
226231 break ;
227232 case ItemHandlerType::Unknown:
@@ -303,6 +308,7 @@ ItemFactory::NameHandlerMap ItemFactory::nameHandlerMap() const
303308 {" akID" , ItemHandlerType::Byte},
304309 {" gnre" , ItemHandlerType::Gnre},
305310 {" covr" , ItemHandlerType::Covr},
311+ {" stem" , ItemHandlerType::Stem},
306312 {" purl" , ItemHandlerType::TextImplicit},
307313 {" egid" , ItemHandlerType::TextImplicit},
308314 };
@@ -633,6 +639,12 @@ std::pair<String, Item> ItemFactory::parseCovr(
633639 };
634640}
635641
642+ std::pair<String, Item> ItemFactory::parseStem (
643+ const MP4::Atom *atom, const ByteVector &data)
644+ {
645+ return {atom->name (), Item (Stem (data))};
646+ }
647+
636648
637649ByteVector ItemFactory::renderAtom (
638650 const ByteVector &name, const ByteVector &data)
@@ -742,6 +754,13 @@ ByteVector ItemFactory::renderCovr(
742754 return renderAtom (name, data);
743755}
744756
757+ ByteVector ItemFactory::renderStem (
758+ const ByteVector &name, const MP4::Item &item)
759+ {
760+ auto data = item.toStem ().data ();
761+ return renderAtom (name, data);
762+ }
763+
745764ByteVector ItemFactory::renderFreeForm (
746765 const String &name, const MP4::Item &item)
747766{
0 commit comments