Skip to main content
Inspiring
February 29, 2024
Answered

Using Dynamic Stream Suites Properly?

Having some trouble using the dynamic Stream suites.
I'm working on some wrapper classes, and perhaps I'm just finding things the wrong way, or maybe I'm missing a step--

AEGP_LayerH layer;
		ERR(suites.LayerSuite9()->AEGP_GetActiveLayer(&layer));
		AEGP_StreamRefH stream;
		ERR(suites.DynamicStreamSuite4()->AEGP_GetNewStreamRefForLayer(*SuiteManager::GetInstance().GetPluginID(), layer, &stream));
		StreamFactory sf;
		_StreamClasses streamH = sf.createStream(stream);
		StreamGroup* streamGroup = std::get_if<StreamGroup>(&streamH); // This is ADBE AV Layer
		std::string matchNameZ = streamGroup->getMatchName();
		_StreamClasses streamVal = streamGroup->getStreamByName(AEGP_StreamGroupName_TRANSFORM);
		if (std::holds_alternative<OneDStream>(streamVal)) {
			OneDStream s = std::get<OneDStream>(streamVal);
			std::string name = s.getMatchName();
		}
		else if (std::holds_alternative<StreamGroup>(streamVal)) {
			StreamGroup s = std::get<StreamGroup>(streamVal);
			std::string name = s.getMatchName();
                        //Now I have ADBE Transform Group, which it thinks is a leaf stream, therefore the next call fails.
			OneDStream s2 = std::get<OneDStream>(s.getStreamByIndex(4));
			std::string name2 = s2.getMatchName();
			A_Time time = { 0, 0 };
			AEGP_OneDVal val = s2.value(AEGP_LTimeMode_LayerTime, time, FALSE);
		}

I get the LayerStream from the layer-- 
This results in an ADBE AV Layer StreamGroup.
I then get the "ADBE TRANSFORM GROUP" by match name, from the AV Layer group.
Finally, I try to get the "opacity" parameter by index, but cannot because my plugin says that ADBE Transform Group is a leaf group type? Is this correct? 

This topic is closed to new replies. Start a new post to keep the conversation going.
Trenton5EC4Correct answer
Inspiring
February 29, 2024

Ahhh-- I Figured it out.

Here's how I'm determing different StreamTypes and casting to their respective wrapper objects:

_StreamClasses StreamFactory::createStream(AEGP_StreamRefH stream) {
	AEGP_StreamGroupingType groupType = getStreamGroupingType(stream);
	AEGP_StreamType streamType;

	switch (groupType) {
	case AEGP_StreamGroupingType_LEAF:
		streamType = getStreamType(stream);
		switch (streamType) {
		case AEGP_StreamType_OneD:
			return _StreamClasses(std::in_place_type<OneDStream>, stream);
		case AEGP_StreamType_TwoD:
			return _StreamClasses(std::in_place_type<TwoDStream>, stream);
		case AEGP_StreamType_ThreeD:
			return _StreamClasses(std::in_place_type<ThreeDStream>, stream);
		case AEGP_StreamType_COLOR:
			return _StreamClasses(std::in_place_type<ColorStream>, stream);
		case AEGP_StreamType_MARKER:
			return _StreamClasses(std::in_place_type<MarkerStream>, stream);
		case AEGP_StreamType_LAYER_ID:
			return _StreamClasses(std::in_place_type<LayerIDStream>, stream);
		case AEGP_StreamType_MASK_ID:
			return _StreamClasses(std::in_place_type<MaskIDStream>, stream);
		case AEGP_StreamType_MASK:
			return _StreamClasses(std::in_place_type<MaskOutlineStream>, stream);
		case AEGP_StreamType_TEXT_DOCUMENT:
			return _StreamClasses(std::in_place_type<TextDocumentStream>, stream);
		}
		break;
	case AEGP_StreamGroupingType_INDEXED_GROUP:
		// If the stream represents a group, return an instance of StreamGroup or a specialized group class
		return _StreamClasses(std::in_place_type<StreamGroup>, stream);
	case AEGP_StreamGroupingType_NAMED_GROUP:
		// If the stream represents a group, return an instance of StreamGroup or a specialized group class
		return _StreamClasses(std::in_place_type<StreamGroup>, stream);
	default:
		// Handle unknown grouping type
		throw AEException(A_Err_GENERIC);
	}
}

1 reply

Trenton5EC4AuthorCorrect answer
Inspiring
February 29, 2024

Ahhh-- I Figured it out.

Here's how I'm determing different StreamTypes and casting to their respective wrapper objects:

_StreamClasses StreamFactory::createStream(AEGP_StreamRefH stream) {
	AEGP_StreamGroupingType groupType = getStreamGroupingType(stream);
	AEGP_StreamType streamType;

	switch (groupType) {
	case AEGP_StreamGroupingType_LEAF:
		streamType = getStreamType(stream);
		switch (streamType) {
		case AEGP_StreamType_OneD:
			return _StreamClasses(std::in_place_type<OneDStream>, stream);
		case AEGP_StreamType_TwoD:
			return _StreamClasses(std::in_place_type<TwoDStream>, stream);
		case AEGP_StreamType_ThreeD:
			return _StreamClasses(std::in_place_type<ThreeDStream>, stream);
		case AEGP_StreamType_COLOR:
			return _StreamClasses(std::in_place_type<ColorStream>, stream);
		case AEGP_StreamType_MARKER:
			return _StreamClasses(std::in_place_type<MarkerStream>, stream);
		case AEGP_StreamType_LAYER_ID:
			return _StreamClasses(std::in_place_type<LayerIDStream>, stream);
		case AEGP_StreamType_MASK_ID:
			return _StreamClasses(std::in_place_type<MaskIDStream>, stream);
		case AEGP_StreamType_MASK:
			return _StreamClasses(std::in_place_type<MaskOutlineStream>, stream);
		case AEGP_StreamType_TEXT_DOCUMENT:
			return _StreamClasses(std::in_place_type<TextDocumentStream>, stream);
		}
		break;
	case AEGP_StreamGroupingType_INDEXED_GROUP:
		// If the stream represents a group, return an instance of StreamGroup or a specialized group class
		return _StreamClasses(std::in_place_type<StreamGroup>, stream);
	case AEGP_StreamGroupingType_NAMED_GROUP:
		// If the stream represents a group, return an instance of StreamGroup or a specialized group class
		return _StreamClasses(std::in_place_type<StreamGroup>, stream);
	default:
		// Handle unknown grouping type
		throw AEException(A_Err_GENERIC);
	}
}
Translate