Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 11 additions & 27 deletions src/lib/ip/IPBaseNodes/FileSourceIPNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -724,7 +724,7 @@ namespace IPCore

FileSourceIPNode::MediaPointer
FileSourceIPNode::getMediaFromContext(ImageComponent& selection,
const Context& context)
const Context& context) const
{
selection = selectComponentFromContext(context);

Expand Down Expand Up @@ -755,7 +755,7 @@ namespace IPCore

FileSourceIPNode::MediaPointer
FileSourceIPNode::mediaForComponent(ImageComponent& c,
const Context& context)
const Context& context) const
{
if (!c.isValid())
return nullptr;
Expand Down Expand Up @@ -888,7 +888,7 @@ namespace IPCore
return nullptr;
}

FileSourceIPNode::MediaPointer FileSourceIPNode::defaultMedia(int eye)
FileSourceIPNode::MediaPointer FileSourceIPNode::defaultMedia(int eye) const
{
const QReadLocker readLock(&m_mediaMutex);

Expand Down Expand Up @@ -922,7 +922,8 @@ namespace IPCore
}

FileSourceIPNode::Movie*
FileSourceIPNode::movieForThread(const Media* media, const Context& context)
FileSourceIPNode::movieForThread(const Media* media,
const Context& context) const
{
if (!media)
return 0;
Expand Down Expand Up @@ -1812,35 +1813,24 @@ namespace IPCore
int ha = 0;
int w = 0;
int h = 0;
int na = 0;
int nv = 0;
float pa = 1.0;
Mat44f O;
ImageComponent selection;
MediaPointer media = getMediaFromContext(selection, context);

for (size_t i = 0; i < m_mediaVector.size(); i++)
if (media)
{
Movie* mov = m_mediaVector[i]->primaryMovie();
bool audio = mov->hasAudio()
&& (!mov->hasVideo() || !m_noMovieAudio->front());
bool video = mov->hasVideo();

Movie* mov = media->primaryMovie();
const MovieInfo& info = mov->info();
const int iw = info.uncropWidth;
const int ih = info.uncropHeight;
const float ipa = info.pixelAspect;

if (audio && !video)
{
na++;
wa = max(wa, iw);
ha = max(ha, ih);
}

if (video)
if (mov->hasVideo())
{
nv++;
w = max(w, iw);
h = max(h, ih);

//
// pixelaspect may be < or > 1.0 so just adopt any
// value that is interesting.
Expand All @@ -1852,12 +1842,6 @@ namespace IPCore
}
}

if (!nv && na)
{
w = wa;
h = ha;
}

return ImageStructureInfo(w * (pa > 1.0 ? pa : 1.0),
h / (pa < 1.0 ? pa : 1.0), pa, O);
}
Expand Down
9 changes: 5 additions & 4 deletions src/lib/ip/IPBaseNodes/IPBaseNodes/FileSourceIPNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -215,10 +215,11 @@ namespace IPCore
const SharedMediaPointer& proxySharedMedia = SharedMediaPointer());

MediaPointer getMediaFromContext(ImageComponent& selection,
const Context& context);
MediaPointer mediaForComponent(ImageComponent&, const Context& context);
MediaPointer defaultMedia(int);
Movie* movieForThread(const Media*, const Context&);
const Context& context) const;
MediaPointer mediaForComponent(ImageComponent&,
const Context& context) const;
MediaPointer defaultMedia(int) const;
Movie* movieForThread(const Media*, const Context&) const;
void setupRequest(const Movie*, const ImageComponent&, const Context&,
Movie::ReadRequest& request);

Expand Down