<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Howdy,<div class=""><br class=""></div><div class="">we’re doing a project</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">- using C with ffmpeg compiled in,</div><div class="">- and this is running on iOS devices.</div></blockquote><div class=""><br class=""></div><div class="">There seems to be a number of problems with ensuring that hardware decoding is used.</div><div class=""><br class=""></div><div class="">In one example, we have a file with three streams muxed,</div><div class=""><br class=""></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class="">- an 8 bit YUV stream</div><div class="">- a 10 bit YUV stream</div><div class="">- a data stream</div></blockquote><div class=""><br class=""></div><div class="">Here’s the two video streams:</div><div class=""><br class=""></div><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><b class=""><font color="#942192" class="">Stream #0:0[0x100], 21, 1/90000: Video: hevc (Main), 1 reference frame ([36][0][0][0] / 0x0024), yuv420p(tv), 1536x1024 [SAR 1:1 DAR 3:2], 0/1, 30 fps, 300 tbr, 90k tbn, 30 tbc</font></b></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><b class=""><font color="#942192" class=""><br class=""></font></b></div></div></div></div><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><b class=""><font color="#942192" class="">Stream #0:1[0x101], 21, 1/90000: Video: hevc (Main 10), 1 reference frame ([36][0][0][0] / 0x0024), yuv420p10le(tv), 1536x1024 [SAR 1:1 DAR 3:2], 0/1, 30 fps, 300 tbr, 90k tbn, 30 tbc</font></b></div><div style="margin: 0px; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Menlo;" class=""><b class=""><font color="#942192" class=""><br class=""></font></b></div><div class=""><br class=""></div><div class="">MY QUESTION IS THIS:</div><div class=""><br class=""></div><div class="">Is there a way to ABSOLUTELY KNOW whether hardware or software decoding was used?</div><div class=""><br class=""></div><div class="">In an iOS setting, after decoding there are TWO possibilities (we know about):</div><div class=""><br class=""></div></div></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><b class=""><span class="Apple-tab-span" style="white-space:pre">      </span>(result 1) data[0] is NULL, and in data[3] you can find an AVFrame</b></div></div></div></div></blockquote><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">secondly</div><div class=""><br class=""></div></div></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><b class=""><span class="Apple-tab-span" style="white-space:pre">    </span>(result 2) data[0] data[1] data[2] hold the Y, U, V planar data, data[3] is null</b></div></div></div></div></blockquote><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">My question is simply: How do you ABSOLUTELY KNOW whether hardware or software decoding was used?</div><div class=""><br class=""></div><div class="">Is it ABSOLUTELY the case that result-1 means it was hardware decoded?</div><div class=""><br class=""></div><div class="">Is it ABSOLUTELY the case that result-2 means it was software decoded?</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Here are some more details of this mystery for anyone with the time:</div><div class=""><br class=""></div><div class="">With a brand-new XR iPhone, with today’s latest OS,</div><div class=""><br class=""></div><div class="">it appears to NOT do hardware decoding on the 8bit channel -   you get</div><div class=""><br class=""></div><div class=""><span class="Apple-tab-span" style="white-space:pre">              </span>“result 2” for the 8bit channel</div><div class=""><span class="Apple-tab-span" style="white-space:pre">               </span>“result 1” for the 10bit channel.</div><div class=""><br class=""></div><div class="">There would seem to be no reason a new XR would do</div><div class=""> - hardware decoding for a 10but YUV channel, but</div><div class=""> - software decoding for an 8bit YUV channel</div><div class=""><br class=""></div><div class="">in contrast, with for example an older iPhone8 it depends on the OS. </div><div class=""><br class=""></div></div></div></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" class=""><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class="">Sometimes you do get ”result 2”/"result 2” </div></div></div></div><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class="">and you sometimes get ”result 1”/"result 2” </div></div></div></div></blockquote><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">(So, with the new fast hardware you get ”software”/”hardware" whereas with certain old phones you get ”hardware”/“hardware”)</div><div class=""><br class=""></div><div class="">Also, even when a device is giving ”result 2”/"result 2” , it is often suspiciously slow rate.</div><div class=""><br class=""></div><div class="">(We are not even drawing to screen - just decoding.)</div><div class=""><br class=""></div><div class="">Further, there seems to be no reason at all that a given device would do hardware on a 10bit channel and software on an 8bit channel.</div><div class=""><br class=""></div><div class="">Again my basic question is:</div><div class=""><br class=""></div><div class="">is there absolutely a way to know whether hardware or software decoding was used?</div><div class=""><br class=""></div><div class="">Looking at these two possibilities:</div><div class=""><br class=""></div><div class=""><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div dir="ltr" class=""><div dir="ltr" class=""><b class=""><span class="Apple-tab-span" style="white-space: pre;">       </span>(result 1) data[0] is NULL, and in data[3] you can find an AVFrame</b></div></div></blockquote><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><br class=""></div><div class="">secondly</div><div class=""><br class=""></div></div></div></div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div dir="ltr" class=""><div dir="ltr" class=""><b class=""><span class="Apple-tab-span" style="white-space: pre;">        </span>(result 2) data[0] data[1] data[2] hold the Y, U, V planar data, data[3] is null</b></div></div></blockquote></div><div class=""><br class=""></div><div class="">is it >> ABSOLUTELY << the case that if you get an AVFrame in data[3] it was definitely hardware decoding?</div><div class=""><br class=""></div><div class="">Conversely, is it >> ABSOLUTELY << the case that YUV in [1, 2, 3] means it was software decoding?</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Any help greatly appreciated !</div><div class=""><br class=""></div><div class="">It is a real mystery currently!</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div></div></div></div></body></html>