iOS, OpenGL and video encoding


i have following code work dimensions multiple of 480x320. opengl scene 600x600; based on screen layout don't want change.

possible encode in (kind of) free dimensions or bound (480x
320)xn

code:
   self.videosize = self.view.bounds.size;    //   self.videosize = cgsizemake(1280 , 780);         nsmutabledictionary * outputsettings = [[nsmutabledictionary alloc] init];    [outputsettings setobject: avvideocodech264 forkey: avvideocodeckey];    [outputsettings setobject: [nsnumber numberwithint: self.videosize.width] forkey: avvideowidthkey];    [outputsettings setobject: [nsnumber numberwithint: self.videosize.height] forkey: avvideoheightkey];         self.assetwriterinput = [avassetwriterinput assetwriterinputwithmediatype:avmediatypevideo outputsettings:outputsettings];    self.assetwriterinput.expectsmediadatainrealtime = yes;        nsdictionary *sourcepixelbufferattributesdictionary = [nsdictionary dictionarywithobjectsandkeys: [nsnumber numberwithint:kcvpixelformattype_32bgra], kcvpixelbufferpixelformattypekey,                                                           [nsnumber numberwithint:self.videosize.width], kcvpixelbufferwidthkey,                                                           [nsnumber numberwithint:self.videosize.height], kcvpixelbufferheightkey,                                                           nil];        self.assetwriterpixelbuffer = [avassetwriterinputpixelbufferadaptor assetwriterinputpixelbufferadaptorwithassetwriterinput:self.assetwriterinput sourcepixelbufferattributes:sourcepixelbufferattributesdictionary];        [self.assetwriter addinput:_assetwriterinput];        self.assetwriter.metadata = metadata;        [self.assetwriter startwriting];        self.starttime = [nsdate datewithtimeintervalsincenow:0];    [self.assetwriter startsessionatsourcetime:kcmtimezero];            self.videoisrecording = true; 
writing frame following code
code:
   cvpixelbufferref pb = null;        cvreturn status = cvpixelbufferpoolcreatepixelbuffer (null, [self.assetwriterpixelbuffer pixelbufferpool], &pb);    if ((pb == null) || (status != kcvreturnsuccess))    {       cllog(@"error frame %d", status);       self.starttime = null;       return;    }    else    {       cvpixelbufferlockbaseaddress(pb, 0);       glubyte *pixelbufferdata = (glubyte *)cvpixelbuffergetbaseaddress(pb);       glreadpixels(0, 0, self.videosize.width, self.videosize.height, gl_bgra, gl_unsigned_byte, pixelbufferdata);           cmtime currenttime = cmtimemakewithseconds([[nsdate date] timeintervalsincedate:_starttime],120);           if (![_assetwriterpixelbuffer appendpixelbuffer:pb withpresentationtime:currenttime])       {          cllog(@"problem @ time: %lld", currenttime.value);       }        cvpixelbufferunlockbaseaddress(pb, 0);       cvpixelbufferrelease(pb);    } 
conversion of rgba brga seems ok; dimensions (i guess)

if following
https://www.youtube.com/watch?v=g_osjc5ftg8

if choose 1280x780 proper output; except not cropped way want

https://www.youtube.com/watch?v=luhc0xlemz8

idea ?
 

can elaborate on mean opengl scene 600x600? rendering offscreen buffer has dimensions 600x600?

making assumption trying display 600x600 opengl buffer @ different resolution. once contents have been rendered opengl buffer can not magically converted 480x320 out cropping or other distortion.

can quite opengl doing render texture drawing texture quad, appears using readpixels create pixelbuffer , presenting that.

might have easier time changing buffer dimensions in geometry rendered. should accomplished changing viewport in opengl , changing buffer dimensions.
 


Forums iPhone, iPad, and iPod Touch iOS Programming


  • iPhone
  • Mac OS & System Software
  • iPad
  • Apple Watch
  • Notebooks
  • iTunes
  • Apple ID
  • iCloud
  • Desktop Computers
  • Apple Music
  • Professional Applications
  • iPod
  • iWork
  • Apple TV
  • iLife
  • Wireless

Comments

Popular posts from this blog

Carrier post Error specific

How to increase vRAM for HD3000 graphics

Carrier [Information] AT&T NEXT