MCPcopy Create free account
hub / github.com/FFMS/ffms2 / OutputFrame

Method OutputFrame

src/core/videosource.cpp:69–197  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

67}
68
69FFMS_Frame *FFMS_VideoSource::OutputFrame(AVFrame *Frame) {
70 SanityCheckFrameForData(Frame);
71
72 if (LastFrameWidth != Frame->width || LastFrameHeight != Frame->height || LastFramePixelFormat != Frame->format) {
73 if (TargetHeight > 0 && TargetWidth > 0 && !TargetPixelFormats.empty()) {
74 if (!InputFormatOverridden) {
75 InputFormat = AV_PIX_FMT_NONE;
76 InputColorSpace = AVCOL_SPC_UNSPECIFIED;
77 InputColorRange = AVCOL_RANGE_UNSPECIFIED;
78 }
79
80 ReAdjustOutputFormat(Frame);
81 } else {
82 OutputFormat = (AVPixelFormat) Frame->format;
83 }
84 }
85
86 if (SWS) {
87 sws_scale(SWS, Frame->data, Frame->linesize, 0, Frame->height, SWSFrameData, SWSFrameLinesize);
88 for (int i = 0; i < 4; i++) {
89 LocalFrame.Data[i] = SWSFrameData[i];
90 LocalFrame.Linesize[i] = SWSFrameLinesize[i];
91 }
92 } else {
93 // Special case to avoid ugly casts
94 for (int i = 0; i < 4; i++) {
95 LocalFrame.Data[i] = Frame->data[i];
96 LocalFrame.Linesize[i] = Frame->linesize[i];
97 }
98 }
99
100 LocalFrame.EncodedWidth = Frame->width;
101 LocalFrame.EncodedHeight = Frame->height;
102 LocalFrame.EncodedPixelFormat = Frame->format;
103 LocalFrame.ScaledWidth = TargetWidth;
104 LocalFrame.ScaledHeight = TargetHeight;
105 LocalFrame.ConvertedPixelFormat = OutputFormat;
106 LocalFrame.KeyFrame = !!(Frame->flags & AV_FRAME_FLAG_KEY);
107 LocalFrame.PictType = av_get_picture_type_char(Frame->pict_type);
108 LocalFrame.RepeatPict = Frame->repeat_pict;
109 LocalFrame.InterlacedFrame = !!(Frame->flags & AV_FRAME_FLAG_INTERLACED);
110 LocalFrame.TopFieldFirst = !!(Frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST);
111 LocalFrame.ColorSpace = OutputColorSpaceSet ? OutputColorSpace : Frame->colorspace;
112 LocalFrame.ColorRange = OutputColorRangeSet ? OutputColorRange : Frame->color_range;
113 LocalFrame.ColorPrimaries = (OutputColorPrimaries >= 0) ? OutputColorPrimaries : Frame->color_primaries;
114 LocalFrame.TransferCharateristics = (OutputTransferCharateristics >= 0) ? OutputTransferCharateristics : Frame->color_trc;
115 LocalFrame.ChromaLocation = (OutputChromaLocation >= 0) ? OutputChromaLocation : Frame->chroma_location;
116
117 const AVFrameSideData *MasteringDisplaySideData = av_frame_get_side_data(Frame, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA);
118 if (MasteringDisplaySideData) {
119 const AVMasteringDisplayMetadata *MasteringDisplay = reinterpret_cast<const AVMasteringDisplayMetadata *>(MasteringDisplaySideData->data);
120 if (MasteringDisplay->has_primaries) {
121 LocalFrame.HasMasteringDisplayPrimaries = MasteringDisplay->has_primaries;
122 for (int i = 0; i < 3; i++) {
123 LocalFrame.MasteringDisplayPrimariesX[i] = av_q2d(MasteringDisplay->display_primaries[i][0]);
124 LocalFrame.MasteringDisplayPrimariesY[i] = av_q2d(MasteringDisplay->display_primaries[i][1]);
125 }
126 LocalFrame.MasteringDisplayWhitePointX = av_q2d(MasteringDisplay->white_point[0]);

Callers

nothing calls this directly

Calls 2

FFMS_ExceptionClass · 0.85
emptyMethod · 0.80

Tested by

no test coverage detected