mirror of
https://github.com/mpv-player/mpv
synced 2025-02-08 16:07:16 +00:00
Move global variables in gif demuxer into priv struct
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21898 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
c041fd3dff
commit
6a2c85c59c
@ -17,8 +17,11 @@
|
|||||||
#include "stheader.h"
|
#include "stheader.h"
|
||||||
|
|
||||||
#include <gif_lib.h>
|
#include <gif_lib.h>
|
||||||
static int current_pts = 0;
|
typedef struct {
|
||||||
static unsigned char *palette = NULL;
|
int current_pts;
|
||||||
|
unsigned char *palette;
|
||||||
|
GifFileType *gif;
|
||||||
|
} gif_priv_t;
|
||||||
|
|
||||||
#define GIF_SIGNATURE (('G' << 16) | ('I' << 8) | 'F')
|
#define GIF_SIGNATURE (('G' << 16) | ('I' << 8) | 'F')
|
||||||
|
|
||||||
@ -38,7 +41,8 @@ static int gif_check_file(demuxer_t *demuxer)
|
|||||||
|
|
||||||
static int demux_gif_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds)
|
static int demux_gif_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds)
|
||||||
{
|
{
|
||||||
GifFileType *gif = (GifFileType *)demuxer->priv;
|
gif_priv_t *priv = demuxer->priv;
|
||||||
|
GifFileType *gif = priv->gif;
|
||||||
GifRecordType type = UNDEFINED_RECORD_TYPE;
|
GifRecordType type = UNDEFINED_RECORD_TYPE;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
demux_packet_t *dp = NULL;
|
demux_packet_t *dp = NULL;
|
||||||
@ -69,7 +73,7 @@ static int demux_gif_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds)
|
|||||||
int frametime = 0;
|
int frametime = 0;
|
||||||
if (p[0] == 4) // is the length correct?
|
if (p[0] == 4) // is the length correct?
|
||||||
frametime = (p[3] << 8) | p[2]; // set the time, centiseconds
|
frametime = (p[3] << 8) | p[2]; // set the time, centiseconds
|
||||||
current_pts += frametime;
|
priv->current_pts += frametime;
|
||||||
} else if ((code == 0xFE) && (verbose)) { // comment extension
|
} else if ((code == 0xFE) && (verbose)) { // comment extension
|
||||||
// print iff verbose
|
// print iff verbose
|
||||||
printf("GIF comment: ");
|
printf("GIF comment: ");
|
||||||
@ -118,10 +122,10 @@ static int demux_gif_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds)
|
|||||||
|
|
||||||
// copy the palette
|
// copy the palette
|
||||||
for (y = 0; y < 256; y++) {
|
for (y = 0; y < 256; y++) {
|
||||||
palette[(y * 4) + 0] = effective_map->Colors[y].Blue;
|
priv->palette[(y * 4) + 0] = effective_map->Colors[y].Blue;
|
||||||
palette[(y * 4) + 1] = effective_map->Colors[y].Green;
|
priv->palette[(y * 4) + 1] = effective_map->Colors[y].Green;
|
||||||
palette[(y * 4) + 2] = effective_map->Colors[y].Red;
|
priv->palette[(y * 4) + 2] = effective_map->Colors[y].Red;
|
||||||
palette[(y * 4) + 3] = 0;
|
priv->palette[(y * 4) + 3] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (y = 0; y < gif->Image.Height; y++) {
|
for (y = 0; y < gif->Image.Height; y++) {
|
||||||
@ -138,7 +142,7 @@ static int demux_gif_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds)
|
|||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
demuxer->video->dpos++;
|
demuxer->video->dpos++;
|
||||||
dp->pts = ((float)current_pts) / 100;
|
dp->pts = ((float)priv->current_pts) / 100;
|
||||||
dp->pos = stream_tell(demuxer->stream);
|
dp->pos = stream_tell(demuxer->stream);
|
||||||
ds_add_packet(demuxer->video, dp);
|
ds_add_packet(demuxer->video, dp);
|
||||||
|
|
||||||
@ -147,10 +151,11 @@ static int demux_gif_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds)
|
|||||||
|
|
||||||
static demuxer_t* demux_open_gif(demuxer_t* demuxer)
|
static demuxer_t* demux_open_gif(demuxer_t* demuxer)
|
||||||
{
|
{
|
||||||
|
gif_priv_t *priv = calloc(1, sizeof(gif_priv_t));
|
||||||
sh_video_t *sh_video = NULL;
|
sh_video_t *sh_video = NULL;
|
||||||
GifFileType *gif = NULL;
|
GifFileType *gif = NULL;
|
||||||
|
|
||||||
current_pts = 0;
|
priv->current_pts = 0;
|
||||||
demuxer->seekable = 0; // FIXME
|
demuxer->seekable = 0; // FIXME
|
||||||
|
|
||||||
// go back to the beginning
|
// go back to the beginning
|
||||||
@ -196,25 +201,21 @@ static demuxer_t* demux_open_gif(demuxer_t* demuxer)
|
|||||||
sh_video->bih->biCompression = sh_video->format;
|
sh_video->bih->biCompression = sh_video->format;
|
||||||
sh_video->bih->biBitCount = 8;
|
sh_video->bih->biBitCount = 8;
|
||||||
sh_video->bih->biPlanes = 2;
|
sh_video->bih->biPlanes = 2;
|
||||||
palette = (unsigned char *)(sh_video->bih + 1);
|
priv->palette = (unsigned char *)(sh_video->bih + 1);
|
||||||
|
|
||||||
demuxer->priv = gif;
|
priv->gif = gif;
|
||||||
|
demuxer->priv = priv;
|
||||||
|
|
||||||
return demuxer;
|
return demuxer;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void demux_close_gif(demuxer_t* demuxer)
|
static void demux_close_gif(demuxer_t* demuxer)
|
||||||
{
|
{
|
||||||
GifFileType *gif = (GifFileType *)demuxer->priv;
|
gif_priv_t *priv = demuxer->priv;
|
||||||
|
if (!priv) return;
|
||||||
if(!gif)
|
if (priv->gif && DGifCloseFile(priv->gif) == GIF_ERROR)
|
||||||
return;
|
|
||||||
|
|
||||||
if (DGifCloseFile(gif) == GIF_ERROR)
|
|
||||||
PrintGifError();
|
PrintGifError();
|
||||||
|
free(priv);
|
||||||
demuxer->stream->fd = 0;
|
|
||||||
demuxer->priv = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user