diff options
author | Uoti Urpala <uau@mplayer2.org> | 2011-08-20 20:25:43 +0300 |
---|---|---|
committer | Uoti Urpala <uau@mplayer2.org> | 2011-08-20 20:25:43 +0300 |
commit | 9c7c4e5b7dd7745ad071ec330abab49a8f4e314b (patch) | |
tree | fefbae9c04f401be71f363129bbc30783c19f8f6 /libmpcodecs/vd_ffmpeg.c | |
parent | e2ca8853a6a26ca1afcababea0e4a743b525daa2 (diff) | |
download | mpv-9c7c4e5b7dd7745ad071ec330abab49a8f4e314b.tar.bz2 mpv-9c7c4e5b7dd7745ad071ec330abab49a8f4e314b.tar.xz |
core, demux, vd_ffmpeg: pass side data from demux_lavf to vd_ffmpeg
Pass the libavformat packet side_data field from demux_lavf to
vd_ffmpeg. Libavcodec/libavformat use this field for palette data, and
passing it is required for the playback of some paletted video codecs.
The implementation works by giving vd_ffmpeg a copy of the struct
demux_packet used to store the video packet (from which it can access
the avpacket field). The definition of struct demux_packet is moved to
new file demux_packet.h so that vd_ffmpeg.c can use it without
including all of demuxer.h.
Diffstat (limited to 'libmpcodecs/vd_ffmpeg.c')
-rw-r--r-- | libmpcodecs/vd_ffmpeg.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c index 9d33d5d963..f67db0692b 100644 --- a/libmpcodecs/vd_ffmpeg.c +++ b/libmpcodecs/vd_ffmpeg.c @@ -36,6 +36,7 @@ #include "vd.h" #include "img_format.h" #include "libmpdemux/stheader.h" +#include "libmpdemux/demux_packet.h" #include "codec-cfg.h" #include "osdep/numcores.h" @@ -713,8 +714,9 @@ static av_unused void swap_palette(void *pal) } // decode a frame -static struct mp_image *decode(struct sh_video *sh, void *data, int len, - int flags, double *reordered_pts) +static struct mp_image *decode(struct sh_video *sh, struct demux_packet *packet, + void *data, int len, int flags, + double *reordered_pts) { int got_picture=0; int ret; @@ -755,6 +757,12 @@ static struct mp_image *decode(struct sh_video *sh, void *data, int len, pkt.size = len; // HACK: make PNGs decode normally instead of as CorePNG delta frames pkt.flags = AV_PKT_FLAG_KEY; +#if LIBAVCODEC_VERSION_MAJOR >= 53 + if (packet && packet->avpacket) { + pkt.side_data = packet->avpacket->side_data; + pkt.side_data_elems = packet->avpacket->side_data_elems; + } +#endif // The avcodec opaque field stupidly supports only int64_t type union pts { int64_t i; double d; }; avctx->reordered_opaque = (union pts){.d = *reordered_pts}.i; |