Android播放器-对解码后数据处理

视频像素和尺寸转换

用ffmpeg处理的话,大概要20ms,性能消耗很大,但其代码处理简单

// 多线程中最好用这个
sws_getContext

// 单线程可以使用这个
// 如果传入的context的格式和新的格式一样,它就会直接返回当前context
struct SwsContext *sws_getCachedContext(
struct SwsContext *context,
int srcW,
int srcH,
enum AVPixelFormat srcFormat,
int dstW, // 尺寸的转换
int dstH,
enum AVPixelFormat dstFormat, // 像素格式的转换
int flags,
SwsFilter *srcFilter, // 过滤器
SwsFilter *dstFilter,
const double *params); // 缩放算法,相关参数

flags,提供了一系列的算法,差值的算法,矩阵的算法,使得缩放图片
#define SWS_FAST_BILNEAR 1
#define SWS_BILINEAR 2
#define SWS_BICUBIC 4
#define SWS_X 8
#define SWS_POINT 0x10
#define SWS_AREA 0x20
#define SWS_BICUBLIN 0x40

int sws_scale(
struct SwsContext *c,
const uint8_t *const srcSlice[], // 指针数组,二维数组 YUV(数组大小3) RGBA(数组大小1)
const int srcStride[], // 一行的大小
int srcSliceY, // 深度
int srcSliceH,
uint8_t *const dst[],
const int dstStride[]);

void sws_freeContext(struct SwsContext *swsContext);

打赏