You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	allocate palette in codec directly
Originally committed as revision 17976 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		| @@ -126,7 +126,6 @@ typedef struct MOVContext { | ||||
|     int64_t duration; /* duration of the longest track */ | ||||
|     int found_moov; /* when both 'moov' and 'mdat' sections has been found */ | ||||
|     int found_mdat; /* we suppose we have enough data to read the file */ | ||||
|     AVPaletteControl palette_control; | ||||
|     DVDemuxContext *dv_demux; | ||||
|     AVFormatContext *dv_fctx; | ||||
|     int isom; /* 1 if file is ISO Media (mp4/3gp) */ | ||||
|   | ||||
| @@ -754,6 +754,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom) | ||||
|                 unsigned int color_start, color_count, color_end; | ||||
|                 unsigned char r, g, b; | ||||
|  | ||||
|                 st->codec->palctrl = av_malloc(sizeof(*st->codec->palctrl)); | ||||
|                 if (color_greyscale) { | ||||
|                     int color_index, color_dec; | ||||
|                     /* compute the greyscale palette */ | ||||
| @@ -763,7 +764,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom) | ||||
|                     color_dec = 256 / (color_count - 1); | ||||
|                     for (j = 0; j < color_count; j++) { | ||||
|                         r = g = b = color_index; | ||||
|                         c->palette_control.palette[j] = | ||||
|                         st->codec->palctrl->palette[j] = | ||||
|                             (r << 16) | (g << 8) | (b); | ||||
|                         color_index -= color_dec; | ||||
|                         if (color_index < 0) | ||||
| @@ -784,7 +785,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom) | ||||
|                         r = color_table[j * 4 + 0]; | ||||
|                         g = color_table[j * 4 + 1]; | ||||
|                         b = color_table[j * 4 + 2]; | ||||
|                         c->palette_control.palette[j] = | ||||
|                         st->codec->palctrl->palette[j] = | ||||
|                             (r << 16) | (g << 8) | (b); | ||||
|                     } | ||||
|                 } else { | ||||
| @@ -806,15 +807,13 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom) | ||||
|                             get_byte(pb); | ||||
|                             b = get_byte(pb); | ||||
|                             get_byte(pb); | ||||
|                             c->palette_control.palette[j] = | ||||
|                             st->codec->palctrl->palette[j] = | ||||
|                                 (r << 16) | (g << 8) | (b); | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 st->codec->palctrl = &c->palette_control; | ||||
|                 st->codec->palctrl->palette_changed = 1; | ||||
|             } else | ||||
|                 st->codec->palctrl = NULL; | ||||
|             } | ||||
|         } else if(st->codec->codec_type==CODEC_TYPE_AUDIO) { | ||||
|             int bits_per_sample, flags; | ||||
|             uint16_t version = get_be16(pb); | ||||
| @@ -2000,7 +1999,8 @@ static int mov_read_close(AVFormatContext *s) | ||||
|     int i, j; | ||||
|  | ||||
|     for (i = 0; i < s->nb_streams; i++) { | ||||
|         MOVStreamContext *sc = s->streams[i]->priv_data; | ||||
|         AVStream *st = s->streams[i]; | ||||
|         MOVStreamContext *sc = st->priv_data; | ||||
|  | ||||
|         av_freep(&sc->ctts_data); | ||||
|         for (j = 0; j < sc->drefs_count; j++) | ||||
| @@ -2008,6 +2008,8 @@ static int mov_read_close(AVFormatContext *s) | ||||
|         av_freep(&sc->drefs); | ||||
|         if (sc->pb && sc->pb != s->pb) | ||||
|             url_fclose(sc->pb); | ||||
|  | ||||
|         av_freep(&st->codec->palctrl); | ||||
|     } | ||||
|  | ||||
|     if (mov->dv_demux) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user