FFmpeg-利用ffplay.c保存视频解码后的数据yuv420
2016-05-17 20:29
483 查看
=====添加如下代码
#include <unistd.h>
#include <fcntl.h>
static int get_video_frame(VideoState *is, AVFrame *frame)
{
int got_picture;
if ((got_picture = decoder_decode_frame(&is->viddec, frame, NULL)) < 0)
return -1;
if (got_picture) {
double dpts = NAN;
static int i_fd = -1;
int i_width = is->viddec_width;
int i_height = is->viddec_height;
if (i_fd < 0) {
char p_buf[64];
sprintf(p_buf, "record_%dx%d.yuv", i_width, i_height);
i_fd = open(p_buf, O_WRONLY | O_CREAT, 0644);
}
if (i_fd > 0) {
int y;
for (y = 0; y < i_width; ++y) {
write(i_fd, frame->data[0] + (y * frame->linesize[0]), i_height);
}
for (y = 0; y < i_width/2; ++y) {
write(i_fd, frame->data[1] + (y * frame->linesize[1]), i_height/2);
}
for (y = 0; y < i_width/2; ++y) {
write(i_fd, frame->data[2] + (y * frame->linesize[2]), i_height/2);
}
}
#include <unistd.h>
#include <fcntl.h>
static int get_video_frame(VideoState *is, AVFrame *frame)
{
int got_picture;
if ((got_picture = decoder_decode_frame(&is->viddec, frame, NULL)) < 0)
return -1;
if (got_picture) {
double dpts = NAN;
static int i_fd = -1;
int i_width = is->viddec_width;
int i_height = is->viddec_height;
if (i_fd < 0) {
char p_buf[64];
sprintf(p_buf, "record_%dx%d.yuv", i_width, i_height);
i_fd = open(p_buf, O_WRONLY | O_CREAT, 0644);
}
if (i_fd > 0) {
int y;
for (y = 0; y < i_width; ++y) {
write(i_fd, frame->data[0] + (y * frame->linesize[0]), i_height);
}
for (y = 0; y < i_width/2; ++y) {
write(i_fd, frame->data[1] + (y * frame->linesize[1]), i_height/2);
}
for (y = 0; y < i_width/2; ++y) {
write(i_fd, frame->data[2] + (y * frame->linesize[2]), i_height/2);
}
}