mirror of
https://github.com/mpv-player/mpv
synced 2025-02-14 19:07:14 +00:00
add support for lavf style extradata in vd_theora
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@30932 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
77b8678bec
commit
4709cde305
@ -27,6 +27,8 @@
|
||||
|
||||
#include "vd_internal.h"
|
||||
|
||||
#include "libavutil/intreadwrite.h"
|
||||
|
||||
static const vd_info_t info = {
|
||||
"Theora/VP3",
|
||||
"theora",
|
||||
@ -75,6 +77,8 @@ static int control(sh_video_t *sh,int cmd,void* arg,...){
|
||||
*/
|
||||
static int init(sh_video_t *sh){
|
||||
theora_struct_t *context = NULL;
|
||||
uint8_t *extradata = (uint8_t *)(sh->bih + 1);
|
||||
int extradata_size = sh->bih->biSize - sizeof(*sh->bih);
|
||||
int errorCode = 0;
|
||||
ogg_packet op;
|
||||
int i;
|
||||
@ -90,8 +94,21 @@ static int init(sh_video_t *sh){
|
||||
/* Read all header packets, pass them to theora_decode_header. */
|
||||
for (i = 0; i < THEORA_NUM_HEADER_PACKETS; i++)
|
||||
{
|
||||
if (extradata_size > 2) {
|
||||
op.bytes = AV_RB16(extradata);
|
||||
op.packet = extradata + 2;
|
||||
op.b_o_s = 1;
|
||||
if (extradata_size < op.bytes + 2) {
|
||||
mp_msg(MSGT_DECAUDIO, MSGL_ERR, "Theora header too small\n");
|
||||
goto err_out;
|
||||
}
|
||||
extradata += op.bytes + 2;
|
||||
extradata_size -= op.bytes + 2;
|
||||
} else {
|
||||
op.bytes = ds_get_packet (sh->ds, &op.packet);
|
||||
op.b_o_s = 1;
|
||||
}
|
||||
|
||||
if ( (errorCode = theora_decode_header (&context->inf, &context->cc, &op)) )
|
||||
{
|
||||
mp_msg(MSGT_DECAUDIO, MSGL_ERR, "Broken Theora header; errorCode=%i!\n", errorCode);
|
||||
|
Loading…
Reference in New Issue
Block a user