10

Edit:Android MediaCodec encoder - kết quả kỳ lạ cho điện thoại Samsung

Có vẻ vấn đề là thiết bị này không cần nhiều 16 kích thước ... nhưng bội số của 32. Thing là, tôi vẫn không có ý tưởng như thế nào để xác định những gì định lượng là một thiết bị có vấn đề. Điều này dường như sử dụng qcom (mà tôi đã thấy có vấn đề trên Android 4.X, nhưng đây là Android 5.1.1).


Tôi đang mã hóa video trong ứng dụng Android của mình. Tôi đang sử dụng Android MediaCodec để làm như vậy, chuyển đổi RGB của mỗi khung thành YUV và chuyển vào pixel.

Mã tôi sử dụng đã được đặt trong một thời gian và hoạt động trên mọi thiết bị tôi đã gặp phải.

Một người dùng đã đến gặp tôi với một báo cáo lỗi cho biết rằng MP4 của họ đã trở nên kỳ lạ. Thiết bị là Samsung T337A (Galaxy Tab 4).

Dưới đây là những gì xuất khẩu MP4 trông giống như:

enter image description here

GHI CHÚ - Đối với bất cứ điều gì lẻ lý do, nó không xảy ra ở tất cả các độ phân giải. Nó được xác nhận xảy ra ở 768x432 và 1280x720 nhưng không xảy ra ở 640x352 ví dụ (ứng dụng của tôi đảm bảo tất cả các độ phân giải có thể chia hết cho 16 theo mặc định).

Trên Nexus 5X (sử dụng cùng định dạng YUV bán phẳng), đầu ra hoạt động ở tất cả các độ phân giải.

Vì vậy, nó là một cái gì đó với thiết bị này, và có lẽ các thiết bị khác mà tôi không biết?


tôi đã xem xét tất cả các đầu ra, và có vẻ bình thường và giống với Nexus 5X tôi đã đề cập ở trên (trong đó hoạt động 100% thời gian).

MediaCodecInfo đang được sử dụng là OMX.qcom.video.encoder.avc, định dạng màu được sử dụng là 2135033992 (là COLOR_FormatYUV420Flexible). Vì vậy, về cơ bản, không có gì lạ.

Mã này hơi mở rộng, tôi sẽ đăng nếu cần, nhưng chỉ tìm kiếm các ý tưởng chung về lý do tại sao điều này xảy ra. Tôi sẽ hiểu nếu nó là phổ biến hơn, nhưng cùng một mã hoạt động cho một loạt các thiết bị khác, do đó, một cái gì đó funky đang xảy ra ...

Trả lời

2

Hãy chắc chắn rằng bạn sử dụng các bước bên phải và giá trị bù đắp đệm

+0

Tôi lấy 'Planes []' từ đối tượng 'Image' để trả về,' inputImage.getPlanes() 'theo sau bằng cách lấy từng mặt phẳng y, u, v. Sau đó tôi lấy sải chân từ mặt phẳng u mặt phẳng [1] .getPixelStride', hoặc là 1 hoặc 2 (phẳng hoặc bán nguyệt) và cả hai đều được tính toán và hoạt động chính xác cho tất cả các loại thiết bị. Điều này có một bước tiến của 2, nhưng chỉ không làm việc như những người khác? Những gì bạn có nghĩa là bởi ** giá trị bù đắp đệm ** mặc dù, nếu bạn không khai thác? Có thể là những gì tôi cần, cảm ơn! – FTLRalph

+0

Dường như vấn đề là thiết bị này không cần sức mạnh của 16 kích thước ... nhưng sức mạnh của 32. Điều là, tôi vẫn không có ý tưởng làm thế nào để xác định những gì định lượng như một thiết bị có vấn đề. Điều này dường như sử dụng qcom (mà tôi đã thấy có vấn đề trên Android 4.X, nhưng đây là Android 5.1.1). – FTLRalph

Các vấn đề liên quan