You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Merge commit 'f7d77b9a5dd42bf0f5dffecf590466b4c4239437'
* commit 'f7d77b9a5dd42bf0f5dffecf590466b4c4239437': eatqi: Remove MpegEncContext dependency Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
This commit is contained in:
		
							
								
								
									
										2
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								configure
									
									
									
									
										vendored
									
									
								
							| @@ -2284,7 +2284,7 @@ eac3_decoder_select="ac3_decoder" | ||||
| eac3_encoder_select="ac3_encoder" | ||||
| eamad_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpegvideo" | ||||
| eatgq_decoder_select="aandcttables" | ||||
| eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp mpeg1video_decoder" | ||||
| eatqi_decoder_select="aandcttables blockdsp bswapdsp idctdsp" | ||||
| exr_decoder_select="zlib" | ||||
| ffv1_decoder_select="golomb rangecoder" | ||||
| ffv1_encoder_select="rangecoder" | ||||
|   | ||||
| @@ -258,7 +258,7 @@ OBJS-$(CONFIG_EAMAD_DECODER)           += eamad.o eaidct.o mpeg12.o \ | ||||
|                                           mpeg12data.o | ||||
| OBJS-$(CONFIG_EATGQ_DECODER)           += eatgq.o eaidct.o | ||||
| OBJS-$(CONFIG_EATGV_DECODER)           += eatgv.o | ||||
| OBJS-$(CONFIG_EATQI_DECODER)           += eatqi.o eaidct.o | ||||
| OBJS-$(CONFIG_EATQI_DECODER)           += eatqi.o eaidct.o mpeg12.o mpeg12data.o | ||||
| OBJS-$(CONFIG_EIGHTBPS_DECODER)        += 8bps.o | ||||
| OBJS-$(CONFIG_EIGHTSVX_EXP_DECODER)    += 8svx.o | ||||
| OBJS-$(CONFIG_EIGHTSVX_FIB_DECODER)    += 8svx.o | ||||
|   | ||||
| @@ -35,42 +35,51 @@ | ||||
| #include "idctdsp.h" | ||||
| #include "internal.h" | ||||
| #include "mpeg12.h" | ||||
| #include "mpegvideo.h" | ||||
|  | ||||
| typedef struct TqiContext { | ||||
|     MpegEncContext s; | ||||
|     GetBitContext gb; | ||||
|     BlockDSPContext bdsp; | ||||
|     BswapDSPContext bsdsp; | ||||
|     IDCTDSPContext idsp; | ||||
|     ScanTable intra_scantable; | ||||
|  | ||||
|     void *bitstream_buf; | ||||
|     unsigned int bitstream_buf_size; | ||||
|  | ||||
|     int mb_x, mb_y; | ||||
|     uint16_t intra_matrix[64]; | ||||
|     int last_dc[3]; | ||||
|  | ||||
|     DECLARE_ALIGNED(16, int16_t, block)[6][64]; | ||||
|     int block_last_index[12]; | ||||
| } TqiContext; | ||||
|  | ||||
| static av_cold int tqi_decode_init(AVCodecContext *avctx) | ||||
| { | ||||
|     TqiContext *t = avctx->priv_data; | ||||
|     MpegEncContext *s = &t->s; | ||||
|     s->avctx = avctx; | ||||
|     ff_blockdsp_init(&s->bdsp, avctx); | ||||
|  | ||||
|     ff_blockdsp_init(&t->bdsp, avctx); | ||||
|     ff_bswapdsp_init(&t->bsdsp); | ||||
|     ff_idctdsp_init(&s->idsp, avctx); | ||||
|     ff_init_scantable_permutation(s->idsp.idct_permutation, FF_IDCT_PERM_NONE); | ||||
|     ff_init_scantable(s->idsp.idct_permutation, &s->intra_scantable, ff_zigzag_direct); | ||||
|     s->qscale = 1; | ||||
|     ff_idctdsp_init(&t->idsp, avctx); | ||||
|     ff_init_scantable_permutation(t->idsp.idct_permutation, FF_IDCT_PERM_NONE); | ||||
|     ff_init_scantable(t->idsp.idct_permutation, &t->intra_scantable, ff_zigzag_direct); | ||||
|  | ||||
|     avctx->framerate = (AVRational){ 15, 1 }; | ||||
|     avctx->pix_fmt = AV_PIX_FMT_YUV420P; | ||||
|     ff_mpeg12_init_vlcs(); | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static int tqi_decode_mb(MpegEncContext *s, int16_t (*block)[64]) | ||||
| static int tqi_decode_mb(TqiContext *t, int16_t (*block)[64]) | ||||
| { | ||||
|     int n; | ||||
|     s->bdsp.clear_blocks(block[0]); | ||||
|  | ||||
|     t->bdsp.clear_blocks(block[0]); | ||||
|     for (n = 0; n < 6; n++) { | ||||
|         int ret = ff_mpeg1_decode_block_intra(&s->gb, | ||||
|                                               s->intra_matrix, | ||||
|                                               s->intra_scantable.permutated, | ||||
|                                               s->last_dc, block[n], n, 1, s->block_last_index); | ||||
|         int ret = ff_mpeg1_decode_block_intra(&t->gb, | ||||
|                                               t->intra_matrix, | ||||
|                                               t->intra_scantable.permutated, | ||||
|                                               t->last_dc, block[n], n, 1, t->block_last_index); | ||||
|         if (ret < 0) | ||||
|             return -1; | ||||
|     } | ||||
| @@ -78,31 +87,34 @@ static int tqi_decode_mb(MpegEncContext *s, int16_t (*block)[64]) | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| static inline void tqi_idct_put(TqiContext *t, AVFrame *frame, int16_t (*block)[64]) | ||||
| static inline void tqi_idct_put(AVCodecContext *avctx, AVFrame *frame, | ||||
|                                 int16_t (*block)[64]) | ||||
| { | ||||
|     MpegEncContext *s = &t->s; | ||||
|     TqiContext *t = avctx->priv_data; | ||||
|     int linesize = frame->linesize[0]; | ||||
|     uint8_t *dest_y  = frame->data[0] + (s->mb_y * 16* linesize            ) + s->mb_x * 16; | ||||
|     uint8_t *dest_cb = frame->data[1] + (s->mb_y * 8 * frame->linesize[1]) + s->mb_x * 8; | ||||
|     uint8_t *dest_cr = frame->data[2] + (s->mb_y * 8 * frame->linesize[2]) + s->mb_x * 8; | ||||
|     uint8_t *dest_y  = frame->data[0] + t->mb_y * 16 * linesize           + t->mb_x * 16; | ||||
|     uint8_t *dest_cb = frame->data[1] + t->mb_y *  8 * frame->linesize[1] + t->mb_x *  8; | ||||
|     uint8_t *dest_cr = frame->data[2] + t->mb_y *  8 * frame->linesize[2] + t->mb_x *  8; | ||||
|  | ||||
|     ff_ea_idct_put_c(dest_y                 , linesize, block[0]); | ||||
|     ff_ea_idct_put_c(dest_y              + 8, linesize, block[1]); | ||||
|     ff_ea_idct_put_c(dest_y + 8*linesize    , linesize, block[2]); | ||||
|     ff_ea_idct_put_c(dest_y + 8*linesize + 8, linesize, block[3]); | ||||
|     if(!(s->avctx->flags & AV_CODEC_FLAG_GRAY)) { | ||||
|  | ||||
|     if (!(avctx->flags & AV_CODEC_FLAG_GRAY)) { | ||||
|         ff_ea_idct_put_c(dest_cb, frame->linesize[1], block[4]); | ||||
|         ff_ea_idct_put_c(dest_cr, frame->linesize[2], block[5]); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static void tqi_calculate_qtable(MpegEncContext *s, int quant) | ||||
| static void tqi_calculate_qtable(TqiContext *t, int quant) | ||||
| { | ||||
|     const int qscale = (215 - 2*quant)*5; | ||||
|     int i; | ||||
|     s->intra_matrix[0] = (ff_inv_aanscales[0]*ff_mpeg1_default_intra_matrix[0])>>11; | ||||
|  | ||||
|     t->intra_matrix[0] = (ff_inv_aanscales[0] * ff_mpeg1_default_intra_matrix[0]) >> 11; | ||||
|     for(i=1; i<64; i++) | ||||
|         s->intra_matrix[i] = (ff_inv_aanscales[i]*ff_mpeg1_default_intra_matrix[i]*qscale + 32)>>14; | ||||
|         t->intra_matrix[i] = (ff_inv_aanscales[i] * ff_mpeg1_default_intra_matrix[i] * qscale + 32) >> 14; | ||||
| } | ||||
|  | ||||
| static int tqi_decode_frame(AVCodecContext *avctx, | ||||
| @@ -113,16 +125,15 @@ static int tqi_decode_frame(AVCodecContext *avctx, | ||||
|     int buf_size = avpkt->size; | ||||
|     const uint8_t *buf_end = buf+buf_size; | ||||
|     TqiContext *t = avctx->priv_data; | ||||
|     MpegEncContext *s = &t->s; | ||||
|     AVFrame *frame = data; | ||||
|     int ret; | ||||
|     int ret, w, h; | ||||
|  | ||||
|     s->width  = AV_RL16(&buf[0]); | ||||
|     s->height = AV_RL16(&buf[2]); | ||||
|     tqi_calculate_qtable(s, buf[4]); | ||||
|     w = AV_RL16(&buf[0]); | ||||
|     h = AV_RL16(&buf[2]); | ||||
|     tqi_calculate_qtable(t, buf[4]); | ||||
|     buf += 8; | ||||
|  | ||||
|     ret = ff_set_dimensions(s->avctx, s->width, s->height); | ||||
|     ret = ff_set_dimensions(avctx, w, h); | ||||
|     if (ret < 0) | ||||
|         return ret; | ||||
|  | ||||
| @@ -135,15 +146,17 @@ static int tqi_decode_frame(AVCodecContext *avctx, | ||||
|         return AVERROR(ENOMEM); | ||||
|     t->bsdsp.bswap_buf(t->bitstream_buf, (const uint32_t *) buf, | ||||
|                        (buf_end - buf) / 4); | ||||
|     init_get_bits(&s->gb, t->bitstream_buf, 8*(buf_end-buf)); | ||||
|     init_get_bits(&t->gb, t->bitstream_buf, 8 * (buf_end - buf)); | ||||
|  | ||||
|     s->last_dc[0] = s->last_dc[1] = s->last_dc[2] = 0; | ||||
|     for (s->mb_y=0; s->mb_y<(avctx->height+15)/16; s->mb_y++) | ||||
|     for (s->mb_x=0; s->mb_x<(avctx->width+15)/16; s->mb_x++) | ||||
|     { | ||||
|         if (tqi_decode_mb(s, t->block) < 0) | ||||
|             goto end; | ||||
|         tqi_idct_put(t, frame, t->block); | ||||
|     t->last_dc[0] = | ||||
|     t->last_dc[1] = | ||||
|     t->last_dc[2] = 0; | ||||
|     for (t->mb_y = 0; t->mb_y < (h + 15) / 16; t->mb_y++) { | ||||
|         for (t->mb_x = 0; t->mb_x < (w + 15) / 16; t->mb_x++) { | ||||
|             if (tqi_decode_mb(t, t->block) < 0) | ||||
|                 goto end; | ||||
|             tqi_idct_put(avctx, frame, t->block); | ||||
|         } | ||||
|     } | ||||
|     end: | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user