Camera中onPreviewFrame()方法的視訊方向旋轉
1、旋轉90度
privatebyte[] rotateYUV420Degree90(byte[] data,int imageWidth,int imageHeight){byte[] yuv =newbyte[imageWidth*imageHeight*3/2];// Rotate the Y lumaint i =0;for(int x =0;x < imageWidth;x++){for(int y = imageHeight-1;y >=0;y--){
yuv[i]= data[y*imageWidth+x];
i++;}}// Rotate the U and V color components
i = imageWidth*imageHeight*3/2-1;for(int x = imageWidth-1;x >0;x=x-2){for(int y =0;y < imageHeight/2;y++){
yuv[i]= data[(imageWidth*imageHeight)+(y*imageWidth)+x];
i--;
yuv[i]= data[(imageWidth*imageHeight)+(y*imageWidth)+(x-1)];
i--;}}return yuv ;}
2.旋轉180度
privatestaticbyte[] rotateYUV420Degree180(byte[] data,int imageWidth,int imageHeight){byte[] yuv =newbyte[imageWidth * imageHeight *3/2];int i =0;int count =0;for(i = imageWidth * imageHeight -1; i >=0; i--){
yuv[count]= data[i];
count++;}
i = imageWidth * imageHeight *3/2-1;for(i = imageWidth * imageHeight *3/2-1; i >= imageWidth
* imageHeight; i -=2){
yuv[count++]= data[i -1];
yuv[count++]= data[i];}return yuv;}
3.旋轉270度
publicstaticbyte[] rotateYUV420Degree270(byte[] data,int imageWidth,int imageHeight){byte[] yuv =newbyte[imageWidth * imageHeight *3/2];int nWidth =0, nHeight =0;int wh =0;int uvHeight =0;if(imageWidth != nWidth || imageHeight != nHeight){
nWidth = imageWidth;
nHeight = imageHeight;
wh = imageWidth * imageHeight;
uvHeight = imageHeight >>1;// uvHeight = height / 2}// ??Yint k =0;for(int i =0; i < imageWidth; i++){int nPos =0;for(int j =0; j < imageHeight; j++){
yuv[k]= data[nPos + i];
k++;
nPos += imageWidth;}}for(int i =0; i < imageWidth; i +=2){int nPos = wh;for(int j =0; j < uvHeight; j++){
yuv[k]= data[nPos + i];
yuv[k +1]= data[nPos + i +1];
k +=2;
nPos += imageWidth;}}return rotateYUV420Degree180(yuv, imageWidth, imageHeight);}
注意:以上方法需要在callback的onPreviewFrame()中呼叫
而且需要把原先
EncoderDebugger debugger = EncoderDebugger.debug(mSettings, mQuality.resX, mQuality.resY);
中引數
mQuality.resX, mQuality.resY調換順序以防花屏
EncoderDebugger debugger = EncoderDebugger.debug(mSettings, mQuality.resY, mQuality.resX); mPPS =debugger.getB64PPS(); mSPS = debugger.getB64SPS(); mProfilLevel = MP4Parser.toHexString(Base64.decode(mPPS, Base64.NO_WRAP),1,3);
這種方法效果比較合適,直接是轉換資料。也查到了轉換成jpeg格式,轉換圖片方向,再轉成流傳出去,這個方法時進行了壓縮,資料減少導致編解碼時buffer陣列獲取資料出問題。
結合
OrientationEventListener中的下例方法,進行螢幕方向檢測,獲取方向,以便方向旋轉的判斷選擇。
@Override public void onOrientationChanged(int orientation) { this.Orientation=orientation; Log.d("OrientationDetector","當前的感測器方向為"+orientation); if (orientation == ORIENTATION_UNKNOWN) return; Camera.CameraInfo info = new Camera.CameraInfo(); Camera.getCameraInfo(0, info); orientation = (orientation + 45) / 90 * 90; if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { rotation = (info.orientation - orientation + 360) % 360; } else { // back-facing camera rotation = (info.orientation + orientation) % 360; } System.out.println("獲取相機度數: "+ rotation); if (camera!=null){ Camera.Parameters parameters = camera.getParameters(); parameters.setRotation(rotation); camera.setParameters(parameters); } }
public int getOrientation(){//對外提供方向0,90,180,270 四個引數 return rotation; }
相關推薦
Camera中onPreviewFrame()方法的視訊方向旋轉
1、旋轉90度 privatebyte[] rotateYUV420Degree90(byte[] data,int imageWidth,int imageHeight){byte[] yuv =newbyte[imageWidth*imageHeight*3/2];/
ArrayList中remove()方法刪除長度大於5的元素之後下標重定位的問題
com 有一個 fad 就刪除 成了 位置 p s cnblogs 中心 1、問題闡述 需求: 有一個ArrayList數組,要求刪除長度大於5的字符串,如:arr = {"ab1","123ad","bca","dadfadf","dddaaa","你好啊","我來
JavaScript中Array物件中join()方法的例子
//join()方法用於把陣列中的所有元素放入一個字串 //其中元素是通過指定的分隔符進行分割 var arr = new Array(3); arr[0] = "George"; arr[1] = "John"; arr[2] = "Thom
Java 集合List及Map中forEach()方法
我們先看一個forEach()方法遍歷List集合的例子: //使用com.google.guava包建立集合 List<String> list =Lists.newArrayList("a","b","c","d");
Map集合中value()方法與keySet()、entrySet()區別
Map<String,String> map = new HashMap<String,String>();map.put(“01”, “zhangsan”);map.put(“02”, “lisi”);map.put(“03”, “wangwu”);Collection<St
java中sleep()方法的解析
Thread.sleep(3000); 就是指讓當前正在執行的佔用cpu時間片的執行緒掛起3000ms,把cpu的時間片交給其他執行緒,但是並沒有指定把CPU的時間片接下來到底交給哪個執行緒,而是讓這些執行緒自己去競爭(一般作業系統會根據優先順序排程) 所以說讓當執行緒睡眠,是幫助所有執行緒獲得執行時間的最佳
hibernate中delete()方法報錯處理方法
@Override public void del(Picture picture) { session.beginTransaction(); System.out.println(picture.getId());
Java學習筆記23:Java中charAt()方法的使用
此方法返回位於字串的指定索引處的字元。該字串的索引從零開始。 charAt(int index)方法是一個能夠用來檢索特定索引下的字元的String例項的方法. charAt()方法返回指定索引位置的char值。 索引範圍為0~length()-1. 如: str.charA
在定義類時,何時需要重寫Object類中equals()方法?
在比較兩個物件時可以使用==和 equals()。==用於比較兩個物件的引用地址是否相等,而equals()方法主要用於比較兩個物件的內容是否相等。和equals()的差別請參見“和equals()有什麼區別?”的解答。 在 Object 中已定義了 equals()方法,但是該方法直接採用
java中的API,學習object的類中equals()方法中的問題,
一、什麼是API 即:Application Programing interface應用程式介面。就是javajdk中提供給我們使用的類,已經封裝好的,直接拿來用就行了。 二、Object類 object類是所有類的父類,在lang包中,lang包不用匯入。 介面中沒有構造方法
執行緒中sleep()方法和Object類中的wait()方法的區別
這兩者的施加者是有本質區別的. sleep()是讓某個執行緒暫停執行一段時間,其控制範圍是由當前執行緒決定,也就是說,線上程裡面決定.好比如說,我要做的事情是 "點火->燒水->煮麵",而當我點完火之後我不立即燒水,我要休息一段時間再燒.對於執行的主動權是由我
初學者對js中sort()方法的理解。
定義和用法 sort() 方法用於對陣列的元素進行排序。 語法 arrayObject.sort(sortby) 引數 描述 sortby 可選。規定排序順序。必須是函式。 返回值 對陣列的引用。請注意,陣列在原陣列上進行排序,不生成副本。 說明 如果
js中sort()方法的用法,引數以及排序原理
sort() 方法用於對陣列的元素進行排序。 語法:arrayObject.sort(sortby);引數sortby可選。規定排序順序。必須是函式。 注:如果呼叫該方法時沒有使用引數,將按字母順序對陣列中的元素進行排序,說得更精確點,是按照字元編碼的順序進行排序。要實現這一點,首先應把陣列的元素都轉換成字
關於Activity中onCreate()方法執行兩次的問題
這兩天練習碰見個問題,當我要把視窗設定為橫屏時,我使用的方法是在程式碼裡呼叫:setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 執行,沒問題。 於是接著各種編碼。。。 但是再次執行時發
java中charAt()方法的使用
charAt(int index)方法是一個能夠用來檢索特定索引下的字元的String例項的方法. charAt()方法返回指定索引位置的char值。索引範圍為0~length()-1. 如: str.charAt(0)檢索str中的第一個字元,str.charAt(s
jquery中join()方法總結
join方法用於陣列中元素的連線下面首先以一個簡單的例子舉例說明:var arr = [1,2,3,4,5];document.write(arr.join(-)); //輸出結果:1-2-3-4-5
在scrapy爬蟲框架xpath中extract()方法的使用
本案例列舉的是爬取騰訊社招中涉及到 extract()使用的總結(1)第一種:position = job.xpath('./td[1]/a/text()')[<Selector xpath='./td[1]/a/text()' data='22989-騰訊雲虛擬化高階
js中tofixed()方法
toFixed() 方法可把 Number 四捨五入為指定小數位數的數字。var num = new Number(13.37); document.write (num.toFixed(1))//13.4
詳解每個類中toString()方法
在我們定義一個類的時候都會建立一個String 型別的toString()方法那麼這個方法真正的作用及原理,為什麼在輸出類變數的時候會輸出toString()的返回值 1我們定義的類預設的父類是Object型別,請看下面的原始碼 public void println(O
JAVA中Object類的toString()方法
toString public String toString() 返回該物件的字串表示。通常,toString 方法會返回一個“以文字方式表示”此物件的字串。結果應是一個簡明但易於讀懂的資訊表示式。建議所有子類都重寫此方法。 Object 類的 toS