admin管理员组文章数量:1516870
popcorn player 使用 ffmpeg-2.3 + Linux + SDL1.2
【问题】popcorn播放视频, 播放窗口绿屏幕
【分析】dump AVFrame 图像帧(数据源) --> dump SDL_Overlay 图像帧(目标数据)
【结果】dump AVFrame 图像帧(数据源), OK;dump SDL_Overlay 图像帧(目标数据), Fail.
【原因】
错误的做法:
static int videoImage_display(VideoState *video_states, AVFrame *frame)
{
//传递AVFrame 的数据给SDL_Overlayer
//AVPicture picture;
SDL_Rect rect;
AVPicture pict = {
{0}};
SDL_LockYUVOverlay(video_states->layer1);
// SDL_Overlayer的
pixels指针指向AVFrame的数据
video_states->layer1->pixels[0] = frame->data[0];
video_states->layer1->pixels[1] = frame->data[1];
video_states->layer1->pixels[2] = frame->data[2];
video_states->layer1->pitches[0] = frame->linesize[0];
video_states->layer1->pitches[1] = frame->linesize[2];
video_states->layer1->pitches[2] = frame->linesize[1];
SDL_DisplayYUVOverlay(video_states->layer1, &rect),
正确的做法:
static int videoImage_display(VideoState *video_states, AVFrame *frame)
{
//AVPicture picture;
SDL_Rect rect;
AVPicture pict = {
{0}};
SDL_LockYUVOverlay(video_states->layer1);
//video_states->layer1->pixels[0] = frame->data[0];
//video_states->layer1->pixels[1] = frame->data[1];
//video_states->layer1->pixels[2] = frame->data[2];
//video_states->layer1->pitches[0] = frame->linesize[0];
//video_states->layer1->pitches[1] = frame->linesize[2];
//video_states->layer1->pitches[2] = frame->linesize[1];
pict.data[0] = video_states->layer1->pixels[0];
pict.data[1] = video_states->layer1->pixels[2];
pict.data[2] = video_states->layer1->pixels[1];
pict.linesize[0] = video_states->layer1->pitches[0];
pict.linesize[1] = video_states->layer1->pitches[2];
pict.linesize[2] = video_states->layer1->pitches[1];
//
AVFrame的数据拷贝到SDL_Overlay存放数据的内存区域
/*scale_image call sws_scale() */
scale_image(frame->data, frame->linesize,
frame->width, frame->height, frame->format,
pict.data, pict.linesize,
frame->width, frame->height, AV_PIX_FMT_YUV420P,
SWS_BICUBIC);
SDL_DisplayYUVOverlay(video_states->layer1, &rect);
版权声明:本文标题:无法播放 FFmpeg 剪辑视频?解析绿屏故障原因 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.betaflare.com/biancheng/1772205601a3272239.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论