mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
This commit is to support even newer versions of ffmpeg.
This commit is contained in:
parent
3c2c9340d6
commit
2d14a28244
@ -728,7 +728,7 @@
|
||||
#defer HAVE_OPENCV $[libtest $[OPENCV_LPATH],$[OPENCV_LIBS]]
|
||||
|
||||
// Is FFMPEG installed, and where?
|
||||
#define FFMPEG_IPATH /usr/include/ffmpeg /usr/include/libavcodec /usr/include/libavformat /usr/include/libavutil /usr/include/libswscale
|
||||
#define FFMPEG_IPATH /usr/include/ffmpeg
|
||||
#define FFMPEG_LPATH
|
||||
#define FFMPEG_LIBS $[if $[WINDOWS_PLATFORM],libavcodec.lib libavformat.lib libavutil.lib libgcc.lib libswscale.lib,avcodec avformat avutil swscale]
|
||||
#defer HAVE_FFMPEG $[libtest $[FFMPEG_LPATH],$[FFMPEG_LIBS]]
|
||||
|
@ -237,7 +237,7 @@ update_frame(int frame) {
|
||||
source -= source_row_width;
|
||||
}
|
||||
// Next best option, we're a 4 component alpha video on one stream
|
||||
} else if (page._color._codec_context->pix_fmt==PIX_FMT_RGBA32) {
|
||||
} else if (page._color._codec_context->pix_fmt==PIX_FMT_RGB32) {
|
||||
int source_row_width= page._color._codec_context->width * 4;
|
||||
unsigned char * source=(unsigned char *)page._color._frame_out->data[0]
|
||||
+source_row_width*(get_video_height()-1);
|
||||
@ -356,7 +356,7 @@ do_read_one(const Filename &fullpath, const Filename &alpha_fullpath,
|
||||
_fullpath = fullpath;
|
||||
_alpha_fullpath = alpha_fullpath;
|
||||
}
|
||||
if (page._color._codec_context->pix_fmt==PIX_FMT_RGBA32) {
|
||||
if (page._color._codec_context->pix_fmt==PIX_FMT_RGB32) {
|
||||
// There had better not be an alpha interleave here.
|
||||
nassertr(alpha_fullpath.empty(), false);
|
||||
|
||||
@ -519,8 +519,7 @@ get_frame_data(int frame_number) {
|
||||
if (err < 0) {
|
||||
return false;
|
||||
}
|
||||
avcodec_decode_video(_codec_context, _frame, &got_frame, packet.data,
|
||||
packet.size);
|
||||
avcodec_decode_video2(_codec_context, _frame, &got_frame, &packet);
|
||||
av_free_packet(&packet);
|
||||
++coming_from;
|
||||
}
|
||||
@ -559,8 +558,7 @@ get_frame_data(int frame_number) {
|
||||
break;
|
||||
}
|
||||
|
||||
avcodec_decode_video(_codec_context, _frame, &got_frame, packet.data,
|
||||
packet.size);
|
||||
avcodec_decode_video2(_codec_context, _frame, &got_frame, &packet);
|
||||
|
||||
av_free_packet(&packet);
|
||||
} while (true);
|
||||
@ -576,8 +574,7 @@ get_frame_data(int frame_number) {
|
||||
// Is this a packet from the video stream?
|
||||
if (packet.stream_index == _stream_number) {
|
||||
// Decode video frame
|
||||
avcodec_decode_video(_codec_context, _frame, &frame_finished,
|
||||
packet.data, packet.size);
|
||||
avcodec_decode_video2(_codec_context, _frame, &frame_finished, &packet);
|
||||
|
||||
// Did we get a video frame?
|
||||
if (frame_finished) {
|
||||
@ -588,10 +585,10 @@ get_frame_data(int frame_number) {
|
||||
// this code. I have no idea if it works well or not, but
|
||||
// it seems to compile and run without crashing.
|
||||
PixelFormat dst_format;
|
||||
if (_codec_context->pix_fmt != PIX_FMT_RGBA32) {
|
||||
if (_codec_context->pix_fmt != PIX_FMT_RGB32) {
|
||||
dst_format = PIX_FMT_BGR24;
|
||||
} else {
|
||||
dst_format = PIX_FMT_RGBA32;
|
||||
dst_format = PIX_FMT_RGB32;
|
||||
}
|
||||
struct SwsContext *convert_ctx = sws_getContext(_codec_context->width, _codec_context->height,
|
||||
_codec_context->pix_fmt, _codec_context->width, _codec_context->height,
|
||||
@ -601,13 +598,13 @@ get_frame_data(int frame_number) {
|
||||
0, _codec_context->height, _frame_out->data, _frame_out->linesize);
|
||||
sws_freeContext(convert_ctx);
|
||||
#else
|
||||
if (_codec_context->pix_fmt != PIX_FMT_RGBA32) {
|
||||
if (_codec_context->pix_fmt != PIX_FMT_RGB32) {
|
||||
img_convert((AVPicture *)_frame_out, PIX_FMT_BGR24,
|
||||
(AVPicture *)_frame, _codec_context->pix_fmt,
|
||||
_codec_context->width, _codec_context->height);
|
||||
|
||||
} else { // _codec_context->pix_fmt == PIX_FMT_RGBA32
|
||||
img_convert((AVPicture *)_frame_out, PIX_FMT_RGBA32,
|
||||
} else { // _codec_context->pix_fmt == PIX_FMT_RGB32
|
||||
img_convert((AVPicture *)_frame_out, PIX_FMT_RGB32,
|
||||
(AVPicture *)_frame, _codec_context->pix_fmt,
|
||||
_codec_context->width, _codec_context->height);
|
||||
}
|
||||
@ -698,7 +695,7 @@ read(const Filename &filename) {
|
||||
|
||||
_frame = avcodec_alloc_frame();
|
||||
|
||||
if (_codec_context->pix_fmt != PIX_FMT_RGBA32) {
|
||||
if (_codec_context->pix_fmt != PIX_FMT_RGB32) {
|
||||
_frame_out = avcodec_alloc_frame();
|
||||
if (_frame_out == NULL) {
|
||||
grutil_cat.error()
|
||||
@ -727,12 +724,12 @@ read(const Filename &filename) {
|
||||
}
|
||||
|
||||
// Determine required buffer size and allocate buffer
|
||||
_image_size_bytes = avpicture_get_size(PIX_FMT_RGBA32, _codec_context->width,
|
||||
_image_size_bytes = avpicture_get_size(PIX_FMT_RGB32, _codec_context->width,
|
||||
_codec_context->height);
|
||||
|
||||
_raw_data = new uint8_t[_image_size_bytes];
|
||||
// Assign appropriate parts of buffer to image planes in _frameRGB
|
||||
avpicture_fill((AVPicture *)_frame_out, _raw_data, PIX_FMT_RGBA32,
|
||||
avpicture_fill((AVPicture *)_frame_out, _raw_data, PIX_FMT_RGB32,
|
||||
_codec_context->width, _codec_context->height);
|
||||
}
|
||||
// We could put an option here for single channel frames.
|
||||
|
@ -21,10 +21,10 @@
|
||||
#include "videoTexture.h"
|
||||
|
||||
extern "C" {
|
||||
#include "avcodec.h"
|
||||
#include "avformat.h"
|
||||
#include "libavcodec/avcodec.h"
|
||||
#include "libavformat/avformat.h"
|
||||
#ifdef HAVE_SWSCALE
|
||||
#include "swscale.h"
|
||||
#include "libswscale/swscale.h"
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
|
||||
#ifdef HAVE_FFMPEG
|
||||
extern "C" {
|
||||
#include "avcodec.h"
|
||||
#include "libavcodec/avcodec.h"
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -16,8 +16,8 @@
|
||||
|
||||
#include "ffmpegAudioCursor.h"
|
||||
extern "C" {
|
||||
#include "avcodec.h"
|
||||
#include "avformat.h"
|
||||
#include "libavcodec/avcodec.h"
|
||||
#include "libavformat/avformat.h"
|
||||
}
|
||||
|
||||
TypeHandle FfmpegAudioCursor::_type_handle;
|
||||
@ -190,9 +190,13 @@ reload_buffer() {
|
||||
return;
|
||||
} else if (_packet_size > 0) {
|
||||
int bufsize = _buffer_size * 2;
|
||||
int len = avcodec_decode_audio2(_audio_ctx, _buffer, &bufsize,
|
||||
_packet_data, _packet_size);
|
||||
movies_debug("avcodec_decode_audio2 returned " << len);
|
||||
AVPacket pkt;
|
||||
av_init_packet(&pkt);
|
||||
pkt.data = _packet_data;
|
||||
pkt.size = _packet_size;
|
||||
int len = avcodec_decode_audio3(_audio_ctx, _buffer, &bufsize, &pkt);
|
||||
movies_debug("avcodec_decode_audio3 returned " << len);
|
||||
av_free_packet(&pkt); // Not sure about this
|
||||
if (len <= 0) {
|
||||
break;
|
||||
}
|
||||
|
@ -17,25 +17,15 @@
|
||||
#include "ffmpegVideoCursor.h"
|
||||
#include "config_movies.h"
|
||||
extern "C" {
|
||||
#include "avcodec.h"
|
||||
#include "avformat.h"
|
||||
#include "libavcodec/avcodec.h"
|
||||
#include "libavformat/avformat.h"
|
||||
#ifdef HAVE_SWSCALE
|
||||
#include "swscale.h"
|
||||
#include "libswscale/swscale.h"
|
||||
#endif
|
||||
}
|
||||
#include "pStatCollector.h"
|
||||
#include "pStatTimer.h"
|
||||
|
||||
// Earlier versions of ffmpeg didn't define this symbol.
|
||||
#ifndef PIX_FMT_BGRA
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
#define PIX_FMT_BGRA PIX_FMT_BGR32_1
|
||||
#else
|
||||
#define PIX_FMT_BGRA PIX_FMT_RGBA32
|
||||
#endif
|
||||
#endif // PIX_FMT_BGRA
|
||||
|
||||
|
||||
TypeHandle FfmpegVideoCursor::_type_handle;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
@ -240,8 +230,7 @@ fetch_frame() {
|
||||
int finished = 0;
|
||||
_last_start = _packet_time;
|
||||
while (!finished && _packet->data) {
|
||||
avcodec_decode_video(_video_ctx, _frame,
|
||||
&finished, _packet->data, _packet->size);
|
||||
avcodec_decode_video2(_video_ctx, _frame, &finished, _packet);
|
||||
fetch_packet(_last_start + 1.0);
|
||||
}
|
||||
_next_start = _packet_time;
|
||||
|
@ -18,7 +18,9 @@
|
||||
#include "config_movies.h"
|
||||
#include "ffmpegVirtualFile.h"
|
||||
#include "virtualFileSystem.h"
|
||||
#include "avio.h"
|
||||
extern "C" {
|
||||
#include "libavformat/avio.h"
|
||||
}
|
||||
|
||||
#ifndef AVSEEK_SIZE
|
||||
#define AVSEEK_SIZE 0x10000
|
||||
|
Loading…
x
Reference in New Issue
Block a user