Skip to main content
Inspiring
February 29, 2024
Answered

Using Dynamic Stream Suites Properly?

  • February 29, 2024
  • 1 reply
  • 209 views

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 has been closed for replies.
Correct answer Trenton5EC4

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);
	}
}