diff options
45 files changed, 0 insertions, 2825 deletions
@@ -370,8 +370,6 @@ SRCS_COMMON = asxparser.c \ libmpdemux/mp_taglists.c \ libmpdemux/mpeg_packetizer.c \ libmpdemux/video.c \ - libmpdemux/yuv4mpeg.c \ - libmpdemux/yuv4mpeg_ratio.c \ libvo/osd.c \ libvo/eosd_packer.c \ osdep/numcores.c \ @@ -392,7 +390,6 @@ SRCS_COMMON = asxparser.c \ sub/find_subfiles.c \ sub/spudec.c \ sub/sub.c \ - sub/sub_cc.c \ sub/subassconvert.c \ sub/subreader.c \ sub/vobsub.c \ diff --git a/asxparser.c b/asxparser.c index 89cf7bd1a1..44236b8c18 100644 --- a/asxparser.c +++ b/asxparser.c @@ -68,9 +68,6 @@ asx_parse_attribs(ASX_Parser_t* parser,char* buffer,char*** _attribs); char* asx_get_attrib(const char* attrib,char** attribs); -int -asx_attrib_to_enum(const char* val,char** valid_vals); - #define asx_free_attribs(a) asx_list_free(&a,free) ////// List utils @@ -109,20 +106,6 @@ asx_get_attrib(const char* attrib,char** attribs) { return NULL; } -int -asx_attrib_to_enum(const char* val,char** valid_vals) { - char** ptr; - int r = 0; - - if(valid_vals == NULL || val == NULL) return -2; - for(ptr = valid_vals ; ptr[0] != NULL ; ptr++) { - if(strcasecmp(val,ptr[0]) == 0) return r; - r++; - } - - return -1; -} - #define asx_warning_attrib_required(p,e,a) mp_msg(MSGT_PLAYTREE,MSGL_WARN,"At line %d : element %s don't have the required attribute %s",p->line,e,a) #define asx_warning_body_parse_error(p,e) mp_msg(MSGT_PLAYTREE,MSGL_WARN,"At line %d : error while parsing %s body",p->line,e) diff --git a/cfg-mplayer.h b/cfg-mplayer.h index 06a93d6bdb..6deea83634 100644 --- a/cfg-mplayer.h +++ b/cfg-mplayer.h @@ -581,8 +581,6 @@ const m_option_t common_opts[] = { // specify IFO file for VOBSUB subtitle {"ifo", &spudec_ifo, CONF_TYPE_STRING, 0, 0, 0, NULL}, // enable Closed Captioning display - {"subcc", &subcc_enabled, CONF_TYPE_INT, CONF_RANGE, 0, 4, NULL}, - {"no-subcc", &subcc_enabled, CONF_TYPE_FLAG, 0, 1, 0, NULL}, {"overlapsub", &suboverlap_enabled, CONF_TYPE_FLAG, 0, 0, 2, NULL}, {"sub-bg-color", &sub_bg_color, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL}, {"sub-bg-alpha", &sub_bg_alpha, CONF_TYPE_INT, CONF_RANGE, 0, 255, NULL}, diff --git a/input/input.c b/input/input.c index 73e48436dd..e162572bed 100644 --- a/input/input.c +++ b/input/input.c @@ -859,30 +859,6 @@ int mp_input_add_key_fd(struct input_ctx *ictx, int fd, int select, return 1; } -int mp_input_parse_and_queue_cmds(struct input_ctx *ictx, const char *str) -{ - int cmd_num = 0; - - while (*str == '\n' || *str == '\r' || *str == ' ') - ++str; - while (*str) { - mp_cmd_t *cmd; - size_t len = strcspn(str, "\r\n"); - char *cmdbuf = talloc_size(NULL, len + 1); - av_strlcpy(cmdbuf, str, len + 1); - cmd = mp_input_parse_cmd(cmdbuf); - if (cmd) { - mp_input_queue_cmd(ictx, cmd); - ++cmd_num; - } - str += len; - while (*str == '\n' || *str == '\r' || *str == ' ') - ++str; - talloc_free(cmdbuf); - } - return cmd_num; -} - mp_cmd_t *mp_input_parse_cmd(char *str) { int i, l; diff --git a/input/input.h b/input/input.h index a4d9b8dab6..9092e2226d 100644 --- a/input/input.h +++ b/input/input.h @@ -252,12 +252,6 @@ struct mp_cmd *mp_input_get_cmd(struct input_ctx *ictx, int time, /* Parse text and return corresponding struct mp_cmd. */ struct mp_cmd *mp_input_parse_cmd(char *str); -/** - * Parse and queue commands separated by '\n'. - * Return number of commands queued. - */ -int mp_input_parse_and_queue_cmds(struct input_ctx *ictx, const char *str); - // After getting a command from mp_input_get_cmd you need to free it using this // function void mp_cmd_free(struct mp_cmd *cmd); diff --git a/libaf/af_format.h b/libaf/af_format.h index 751e97ef3a..e5e5e15b58 100644 --- a/libaf/af_format.h +++ b/libaf/af_format.h @@ -111,7 +111,6 @@ #define AF_FORMAT_IS_AC3(fmt) (((fmt) & AF_FORMAT_SPECIAL_MASK) == AF_FORMAT_AC3) -int af_str2fmt(const char *str); int af_str2fmt_short(const char *str); int af_fmt2bits(int format); int af_bits2fmt(int bits); diff --git a/libaf/filter.c b/libaf/filter.c index c5ab039130..b272125fd8 100644 --- a/libaf/filter.c +++ b/libaf/filter.c @@ -46,51 +46,6 @@ inline FLOAT_TYPE af_filter_fir(register unsigned int n, const FLOAT_TYPE* w, return y; } -/* C implementation of parallel FIR filter y(k)=w(k) * x(k) (where * denotes convolution) - - n number of filter taps, where mod(n,4)==0 - d number of filters - xi current index in xq - w filter taps k by n big - x input signal must be a circular buffers which are indexed backwards - y output buffer - s output buffer stride -*/ -FLOAT_TYPE* af_filter_pfir(unsigned int n, unsigned int d, unsigned int xi, - const FLOAT_TYPE** w, const FLOAT_TYPE** x, FLOAT_TYPE* y, - unsigned int s) -{ - register const FLOAT_TYPE* xt = *x + xi; - register const FLOAT_TYPE* wt = *w; - register int nt = 2*n; - while(d-- > 0){ - *y = af_filter_fir(n,wt,xt); - wt+=n; - xt+=nt; - y+=s; - } - return y; -} - -/* Add new data to circular queue designed to be used with a parallel - FIR filter, with d filters. xq is the circular queue, in pointing - at the new samples, xi current index in xq and n the length of the - filter. xq must be n*2 by k big, s is the index for in. -*/ -int af_filter_updatepq(unsigned int n, unsigned int d, unsigned int xi, - FLOAT_TYPE** xq, const FLOAT_TYPE* in, unsigned int s) -{ - register FLOAT_TYPE* txq = *xq + xi; - register int nt = n*2; - - while(d-- >0){ - *txq= *(txq+n) = *in; - txq+=nt; - in+=s; - } - return (++xi)&(n-1); -} - /****************************************************************************** * FIR filter design ******************************************************************************/ @@ -234,51 +189,6 @@ int af_filter_design_fir(unsigned int n, FLOAT_TYPE* w, const FLOAT_TYPE* fc, return 0; } -/* Design polyphase FIR filter from prototype filter - - n length of prototype filter - k number of polyphase components - w prototype filter taps - pw Parallel FIR filter - g Filter gain - flags FWD forward indexing - REW reverse indexing - ODD multiply every 2nd filter tap by -1 => HP filter - - returns 0 if OK, -1 if fail -*/ -int af_filter_design_pfir(unsigned int n, unsigned int k, const FLOAT_TYPE* w, - FLOAT_TYPE** pw, FLOAT_TYPE g, unsigned int flags) -{ - int l = (int)n/k; // Length of individual FIR filters - int i; // Counters - int j; - FLOAT_TYPE t; // g * w[i] - - // Sanity check - if(l<1 || k<1 || !w || !pw) - return -1; - - // Do the stuff - if(flags&REW){ - for(j=l-1;j>-1;j--){//Columns - for(i=0;i<(int)k;i++){//Rows - t=g * *w++; - pw[i][j]=t * ((flags & ODD) ? ((j & 1) ? -1 : 1) : 1); - } - } - } - else{ - for(j=0;j<l;j++){//Columns - for(i=0;i<(int)k;i++){//Rows - t=g * *w++; - pw[i][j]=t * ((flags & ODD) ? ((j & 1) ? 1 : -1) : 1); - } - } - } - return -1; -} - /****************************************************************************** * IIR filter design ******************************************************************************/ diff --git a/libaf/filter.h b/libaf/filter.h index a7c8a71c6a..aed33352c2 100644 --- a/libaf/filter.h +++ b/libaf/filter.h @@ -56,22 +56,9 @@ // Exported functions FLOAT_TYPE af_filter_fir(unsigned int n, const FLOAT_TYPE* w, const FLOAT_TYPE* x); -FLOAT_TYPE* af_filter_pfir(unsigned int n, unsigned int k, - unsigned int xi, const FLOAT_TYPE** w, - const FLOAT_TYPE** x, FLOAT_TYPE* y, - unsigned int s); - -//int af_filter_updateq(unsigned int n, unsigned int xi, -// FLOAT_TYPE* xq, FLOAT_TYPE* in); -int af_filter_updatepq(unsigned int n, unsigned int k, unsigned int xi, - FLOAT_TYPE** xq, const FLOAT_TYPE* in, unsigned int s); - int af_filter_design_fir(unsigned int n, FLOAT_TYPE* w, const FLOAT_TYPE* fc, unsigned int flags, FLOAT_TYPE opt); -int af_filter_design_pfir(unsigned int n, unsigned int k, const FLOAT_TYPE* w, - FLOAT_TYPE** pw, FLOAT_TYPE g, unsigned int flags); - int af_filter_szxform(const FLOAT_TYPE* a, const FLOAT_TYPE* b, FLOAT_TYPE Q, FLOAT_TYPE fc, FLOAT_TYPE fs, FLOAT_TYPE *k, FLOAT_TYPE *coef); diff --git a/libaf/format.c b/libaf/format.c index 5d77eabeea..638485cc23 100644 --- a/libaf/format.c +++ b/libaf/format.c @@ -26,51 +26,6 @@ #include "af.h" -// Convert from string to format -int af_str2fmt(const char* str) -{ - int format=0; - // Scan for endianness - if(strstr(str,"be") || strstr(str,"BE")) - format |= AF_FORMAT_BE; - else if(strstr(str,"le") || strstr(str,"LE")) - format |= AF_FORMAT_LE; - else - format |= AF_FORMAT_NE; - - // Scan for special formats - if(strstr(str,"mulaw") || strstr(str,"MULAW")){ - format |= AF_FORMAT_MU_LAW; return format; - } - if(strstr(str,"alaw") || strstr(str,"ALAW")){ - format |= AF_FORMAT_A_LAW; return format; - } - if(strstr(str,"ac3") || strstr(str,"AC3")){ - format |= AF_FORMAT_AC3 | AF_FORMAT_16BIT; return format; - } - if(strstr(str,"mpeg2") || strstr(str,"MPEG2")){ - format |= AF_FORMAT_MPEG2; return format; - } - if(strstr(str,"imaadpcm") || strstr(str,"IMAADPCM")){ - format |= AF_FORMAT_IMA_ADPCM; return format; - } - - // Scan for int/float - if(strstr(str,"float") || strstr(str,"FLOAT")){ - format |= AF_FORMAT_F; return format; - } - else - format |= AF_FORMAT_I; - - // Scan for signed/unsigned - if(strstr(str,"unsigned") || strstr(str,"UNSIGNED")) - format |= AF_FORMAT_US; - else - format |= AF_FORMAT_SI; - - return format; -} - int af_fmt2bits(int format) { if (AF_FORMAT_IS_AC3(format)) return 16; diff --git a/libmpcodecs/dec_video.c b/libmpcodecs/dec_video.c index 804b4d60b4..148514db95 100644 --- a/libmpcodecs/dec_video.c +++ b/libmpcodecs/dec_video.c @@ -72,19 +72,6 @@ int get_video_quality_max(sh_video_t *sh_video) return 0; } -void set_video_quality(sh_video_t *sh_video, int quality) -{ - vf_instance_t *vf = sh_video->vfilter; - if (vf) { - int ret = vf->control(vf, VFCTRL_SET_PP_LEVEL, (void *) (&quality)); - if (ret == CONTROL_TRUE) - return; // success - } - const struct vd_functions *vd = sh_video->vd_driver; - if (vd) - vd->control(sh_video, VDCTRL_SET_PP_LEVEL, (void *) (&quality)); -} - int set_video_colors(sh_video_t *sh_video, const char *item, int value) { vf_instance_t *vf = sh_video->vfilter; diff --git a/libmpcodecs/dec_video.h b/libmpcodecs/dec_video.h index ab4b55bef7..878744396c 100644 --- a/libmpcodecs/dec_video.h +++ b/libmpcodecs/dec_video.h @@ -36,7 +36,6 @@ void *decode_video(sh_video_t *sh_video, struct demux_packet *packet, int filter_video(sh_video_t *sh_video, void *frame, double pts); int get_video_quality_max(sh_video_t *sh_video); -void set_video_quality(sh_video_t *sh_video, int quality); int get_video_colors(sh_video_t *sh_video, const char *item, int *value); int set_video_colors(sh_video_t *sh_video, const char *item, int value); diff --git a/libmpcodecs/pullup.c b/libmpcodecs/pullup.c index b70aa9b56f..bd25c187d6 100644 --- a/libmpcodecs/pullup.c +++ b/libmpcodecs/pullup.c @@ -442,21 +442,6 @@ void pullup_submit_field(struct pullup_context *c, struct pullup_buffer *b, c->head = c->head->next; } -void pullup_flush_fields(struct pullup_context *c) -{ - struct pullup_field *f; - - for (f = c->first; f && f != c->head; f = f->next) { - pullup_release_buffer(f->buffer, f->parity); - f->buffer = 0; - } - c->first = c->last = 0; -} - - - - - diff --git a/libmpcodecs/pullup.h b/libmpcodecs/pullup.h index 99aaa45dc2..0948737919 100644 --- a/libmpcodecs/pullup.h +++ b/libmpcodecs/pullup.h @@ -89,7 +89,6 @@ struct pullup_buffer *pullup_get_buffer(struct pullup_context *c, int parity); void pullup_submit_field(struct pullup_context *c, struct pullup_buffer *b, int parity, double pts); -void pullup_flush_fields(struct pullup_context *c); struct pullup_frame *pullup_get_frame(struct pullup_context *c); void pullup_pack_frame(struct pullup_context *c, struct pullup_frame *fr); diff --git a/libmpcodecs/vfcap.h b/libmpcodecs/vfcap.h index c9b943177d..eca9b5ef7f 100644 --- a/libmpcodecs/vfcap.h +++ b/libmpcodecs/vfcap.h @@ -26,8 +26,6 @@ #define VFCAP_CSP_SUPPORTED_BY_HW 0x2 // set if the driver/filter can draw OSD #define VFCAP_OSD 0x4 -// set if the driver/filter can handle compressed SPU stream -#define VFCAP_SPU 0x8 // scaling up/down by hardware, or software: #define VFCAP_HWSCALE_UP 0x10 #define VFCAP_HWSCALE_DOWN 0x20 diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index e77e32b942..d6e7584915 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -309,17 +309,6 @@ sh_sub_t *new_sh_sub_sid(demuxer_t *demuxer, int id, int sid) return demuxer->s_streams[id]; } -struct sh_sub *new_sh_sub_sid_lang(struct demuxer *demuxer, int id, int sid, - const char *lang) -{ - struct sh_sub *sh = new_sh_sub_sid(demuxer, id, sid); - if (lang && lang[0] && strcmp(lang, "und")) { - sh->lang = talloc_strdup(sh, lang); - mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", sid, lang); - } - return sh; -} - static void free_sh_sub(sh_sub_t *sh) { mp_msg(MSGT_DEMUXER, MSGL_DBG2, "DEMUXER: freeing sh_sub at %p\n", sh); @@ -681,43 +670,6 @@ int demux_read_data(demux_stream_t *ds, unsigned char *mem, int len) return bytes; } -/** - * \brief read data until the given 3-byte pattern is encountered, up to maxlen - * \param mem memory to read data into, may be NULL to discard data - * \param maxlen maximum number of bytes to read - * \param read number of bytes actually read - * \param pattern pattern to search for (lowest 8 bits are ignored) - * \return whether pattern was found - */ -int demux_pattern_3(demux_stream_t *ds, unsigned char *mem, int maxlen, - int *read, uint32_t pattern) -{ - register uint32_t head = 0xffffff00; - register uint32_t pat = pattern & 0xffffff00; - int total_len = 0; - do { - register unsigned char *ds_buf = &ds->buffer[ds->buffer_size]; - int len = ds->buffer_size - ds->buffer_pos; - register long pos = -len; - if (unlikely(pos >= 0)) { // buffer is empty - ds_fill_buffer(ds); - continue; - } - do { - head |= ds_buf[pos]; - head <<= 8; - } while (++pos && head != pat); - len += pos; - if (total_len + len > maxlen) - len = maxlen - total_len; - len = demux_read_data(ds, mem ? &mem[total_len] : NULL, len); - total_len += len; - } while ((head != pat || total_len < 3) && total_len < maxlen && !ds->eof); - if (read) - *read = total_len; - return total_len >= 3 && head == pat; -} - void ds_free_packs(demux_stream_t *ds) { demux_packet_t *dp = ds->first; diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index 0e208d666e..295c148ec0 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -317,8 +317,6 @@ static inline int ds_tell_pts(struct demux_stream *ds) } int demux_read_data(struct demux_stream *ds, unsigned char *mem, int len); -int demux_pattern_3(struct demux_stream *ds, unsigned char *mem, int maxlen, - int *read, uint32_t pattern); #define demux_peekc(ds) ( \ (likely(ds->buffer_pos<ds->buffer_size)) ? ds->buffer[ds->buffer_pos] \ diff --git a/libmpdemux/mpeg_packetizer.c b/libmpdemux/mpeg_packetizer.c index 0b4b1fa8d5..82e688df12 100644 --- a/libmpdemux/mpeg_packetizer.c +++ b/libmpdemux/mpeg_packetizer.c @@ -145,26 +145,3 @@ send_mpeg_pes_packet (unsigned char *data, int len, int id, uint64_t pts, { return send_mpeg_pes_packet_ll(data, len, id, pts, type, NULL, 0, 0, my_write); } - - -/* Send MPEG <type> PS packet */ -int -send_mpeg_ps_packet(unsigned char *data, int len, int id, uint64_t pts, int type, - int my_write (const unsigned char *data, int len)) -{ - if(type == 2) - my_write (ps2_header, sizeof (ps2_header)); - else - my_write (ps1_header, sizeof (ps1_header)); - return send_mpeg_pes_packet (data, len, id, pts, type, my_write); -} - -/* Send MPEG 2 LPCM packet */ -int -send_mpeg_lpcm_packet(unsigned char* data, int len, - int id, uint64_t pts, int freq_id, - int my_write (const unsigned char *data, int len)) -{ - unsigned char header[7] = {0xA0, 0x07, 0x00, 0x04, 0x0C, 1 | (freq_id << 4), 0x80}; - return send_mpeg_pes_packet_ll(data, len, 0xBD, pts, 2, header, sizeof(header), 1, my_write); -} diff --git a/libmpdemux/mpeg_packetizer.h b/libmpdemux/mpeg_packetizer.h index 380b0b463b..ec9325bfad 100644 --- a/libmpdemux/mpeg_packetizer.h +++ b/libmpdemux/mpeg_packetizer.h @@ -34,13 +34,4 @@ int send_mpeg_pes_packet (unsigned char *data, int len, int id, uint64_t pts, int type, int my_write (const unsigned char *data, int len)); -/* Send MPEG <type> PS packet */ -int send_mpeg_ps_packet (unsigned char *data, int len, int id, uint64_t pts, - int type,int my_write (const unsigned char *data, int len)); - -/* Send MPEG 2 LPCM packet */ -int send_mpeg_lpcm_packet (unsigned char *data, int len, - int id, uint64_t pts, int freq_id, - int my_write (const unsigned char *data, int len)); - #endif /* MPLAYER_MPEG_PACKETIZER_H */ diff --git a/libmpdemux/stheader.h b/libmpdemux/stheader.h index 6feefa9ef0..c93bcf8185 100644 --- a/libmpdemux/stheader.h +++ b/libmpdemux/stheader.h @@ -159,8 +159,6 @@ struct sh_audio *new_sh_audio_aid(struct demuxer *demuxer, int id, int aid); struct sh_video *new_sh_video_vid(struct demuxer *demuxer, int id, int vid); #define new_sh_sub(d, i) new_sh_sub_sid(d, i, i) struct sh_sub *new_sh_sub_sid(struct demuxer *demuxer, int id, int sid); -struct sh_sub *new_sh_sub_sid_lang(struct demuxer *demuxer, int id, int sid, - const char *lang); void free_sh_audio(struct demuxer *demuxer, int id); void free_sh_video(struct sh_video *sh); diff --git a/libmpdemux/video.c b/libmpdemux/video.c index 7daef29360..27e924f883 100644 --- a/libmpdemux/video.c +++ b/libmpdemux/video.c @@ -34,9 +34,6 @@ #endif #include "stheader.h" -/* sub_cc (closed captions)*/ -#include "sub/sub_cc.h" - /* biCompression constant */ #define BI_RGB 0L diff --git a/libmpdemux/yuv4mpeg.c b/libmpdemux/yuv4mpeg.c deleted file mode 100644 index 1606faa41b..0000000000 --- a/libmpdemux/yuv4mpeg.c +++ /dev/null @@ -1,767 +0,0 @@ -/* - * yuv4mpeg.c: Functions for reading and writing "new" YUV4MPEG streams - * - * Copyright (C) 2001 Matthew J. Marjanovic <maddog@mir.com> - * - * This file is part of the MJPEG Tools package (mjpeg.sourceforge.net). - * Ported to mplayer by Rik Snel <rsnel@cube.dyndns.org> - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -#include "config.h" - -#include <unistd.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include "yuv4mpeg.h" -#include "yuv4mpeg_intern.h" -#include "mp_msg.h" -#include "libavutil/attributes.h" - -static int _y4mparam_allow_unknown_tags = 1; /* default is forgiveness */ - -static void *(*_y4m_alloc)(size_t bytes) = malloc; -static void (*_y4m_free)(void *ptr) = free; - -int y4m_allow_unknown_tags(int yn) { - int old = _y4mparam_allow_unknown_tags; - if (yn >= 0) _y4mparam_allow_unknown_tags = (yn) ? 1 : 0; - return old; -} - - - -/************************************************************************* - * - * Convenience functions for fd read/write - * - * - guaranteed to transfer entire payload (or fail) - * - returns: - * 0 on complete success - * +(# of remaining bytes) on eof (for y4m_read) - * -(# of rem. bytes) on error (and ERRNO should be set) - * - *************************************************************************/ - - -ssize_t y4m_read(stream_t *s, char *buf, size_t len) -{ - ssize_t n; - - while (len > 0) { - n = stream_read(s, buf, len); - if (n <= 0) { - /* return amount left to read */ - if (n == 0) - return len; /* n == 0 --> eof */ - else - return -len; /* n < 0 --> error */ - } - buf += n; - len -= n; - } - return 0; -} - - -#if 0 /* not needed */ -ssize_t y4m_write(int fd, char *buf, size_t len) -{ - ssize_t n; - - while (len > 0) { - n = write(fd, buf, len); - if (n < 0) return -len; /* return amount left to write */ - buf += n; - len -= n; - } - return 0; -} -#endif - - -/************************************************************************* - * - * "Extra tags" handling - * - *************************************************************************/ - - -static char *y4m_new_xtag(void) -{ - return _y4m_alloc(Y4M_MAX_XTAG_SIZE); -} - - -void y4m_init_xtag_list(y4m_xtag_list_t *xtags) -{ - int i; - xtags->count = 0; - for (i = 0; i < Y4M_MAX_XTAGS; i++) { - xtags->tags[i] = NULL; - } -} - - -void y4m_fini_xtag_list(y4m_xtag_list_t *xtags) -{ - int i; - for (i = 0; i < Y4M_MAX_XTAGS; i++) { - if (xtags-& |