You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	avformat/dvbtxt: add raw demuxer for dvb teletext probing
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
		
							
								
								
									
										41
									
								
								libavcodec/dvbtxt.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								libavcodec/dvbtxt.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| /* | ||||
|  * DVB teletext common functions. | ||||
|  * | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|  * FFmpeg is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Lesser General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2.1 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * FFmpeg 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 | ||||
|  * Lesser General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Lesser General Public | ||||
|  * License along with FFmpeg; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
|  */ | ||||
|  | ||||
| #ifndef AVCODEC_DVBTXT_H | ||||
| #define AVCODEC_DVBTXT_H | ||||
|  | ||||
| #include "libavutil/attributes.h" | ||||
|  | ||||
| /* Returns true if data identifier matches a teletext stream according to EN | ||||
|  * 301 775 section 4.4.2 */ | ||||
| static av_always_inline int ff_data_identifier_is_teletext(int data_identifier) | ||||
| { | ||||
|     return (data_identifier >= 0x10 && data_identifier <= 0x1F || | ||||
|             data_identifier >= 0x99 && data_identifier <= 0x9B); | ||||
| } | ||||
|  | ||||
| /* Returns true if data unit id matches EBU teletext data according to | ||||
|  * EN 301 775 section 4.4.2 */ | ||||
| static av_always_inline int ff_data_unit_id_is_teletext(int data_unit_id) | ||||
| { | ||||
|     return (data_unit_id == 0x02 || data_unit_id == 0x03); | ||||
| } | ||||
|  | ||||
| #endif /* AVCODEC_DVBTXT_H */ | ||||
| @@ -144,6 +144,7 @@ OBJS-$(CONFIG_DTS_MUXER)                 += rawenc.o | ||||
| OBJS-$(CONFIG_DV_DEMUXER)                += dv.o | ||||
| OBJS-$(CONFIG_DV_MUXER)                  += dvenc.o | ||||
| OBJS-$(CONFIG_DVBSUB_DEMUXER)            += dvbsub.o | ||||
| OBJS-$(CONFIG_DVBTXT_DEMUXER)            += dvbtxt.o | ||||
| OBJS-$(CONFIG_DXA_DEMUXER)               += dxa.o | ||||
| OBJS-$(CONFIG_EA_CDATA_DEMUXER)          += eacdata.o | ||||
| OBJS-$(CONFIG_EA_DEMUXER)                += electronicarts.o | ||||
|   | ||||
| @@ -121,6 +121,7 @@ void av_register_all(void) | ||||
|     REGISTER_DEMUXER (DTSHD,            dtshd); | ||||
|     REGISTER_MUXDEMUX(DV,               dv); | ||||
|     REGISTER_DEMUXER (DVBSUB,           dvbsub); | ||||
|     REGISTER_DEMUXER (DVBTXT,           dvbtxt); | ||||
|     REGISTER_DEMUXER (DXA,              dxa); | ||||
|     REGISTER_DEMUXER (EA,               ea); | ||||
|     REGISTER_DEMUXER (EA_CDATA,         ea_cdata); | ||||
|   | ||||
							
								
								
									
										50
									
								
								libavformat/dvbtxt.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								libavformat/dvbtxt.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,50 @@ | ||||
| /* | ||||
|  * RAW dvb teletext demuxer | ||||
|  * Copyright (c) 2016 Marton Balnt <cus@passwd.hu> | ||||
|  * | ||||
|  * This file is part of FFmpeg. | ||||
|  * | ||||
|  * FFmpeg is free software; you can redistribute it and/or | ||||
|  * modify it under the terms of the GNU Lesser General Public | ||||
|  * License as published by the Free Software Foundation; either | ||||
|  * version 2.1 of the License, or (at your option) any later version. | ||||
|  * | ||||
|  * FFmpeg 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 | ||||
|  * Lesser General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Lesser General Public | ||||
|  * License along with FFmpeg; if not, write to the Free Software | ||||
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
|  */ | ||||
|  | ||||
| #include "libavcodec/dvbtxt.h" | ||||
|  | ||||
| #include "avformat.h" | ||||
| #include "rawdec.h" | ||||
|  | ||||
| static int dvbtxt_probe(AVProbeData *p) | ||||
| { | ||||
|     const uint8_t *end = p->buf + p->buf_size; | ||||
|     const uint8_t *buf; | ||||
|  | ||||
|     /* The purpose of this is demuxer is to detect DVB teletext streams in | ||||
|      * mpegts, so we reject invalid buffer sizes */ | ||||
|     if ((p->buf_size + 45) % 184 != 0) | ||||
|         return 0; | ||||
|  | ||||
|     if (!ff_data_identifier_is_teletext(p->buf[0])) | ||||
|         return 0; | ||||
|  | ||||
|     for (buf = p->buf + 1; buf < end; buf += 46) { | ||||
|         if (!ff_data_unit_id_is_teletext(buf[0]) && buf[0] != 0xff) | ||||
|             return 0; | ||||
|         if (buf[1] != 0x2c)     // data_unit_length | ||||
|             return 0; | ||||
|     } | ||||
|  | ||||
|     return AVPROBE_SCORE_MAX / 2; | ||||
| } | ||||
|  | ||||
| FF_DEF_RAWSUB_DEMUXER(dvbtxt, "dvbtxt", dvbtxt_probe, NULL, AV_CODEC_ID_DVB_TELETEXT, 0) | ||||
| @@ -285,6 +285,7 @@ static int set_codec_from_probe_data(AVFormatContext *s, AVStream *st, | ||||
|         { "ac3",       AV_CODEC_ID_AC3,        AVMEDIA_TYPE_AUDIO }, | ||||
|         { "dts",       AV_CODEC_ID_DTS,        AVMEDIA_TYPE_AUDIO }, | ||||
|         { "dvbsub",    AV_CODEC_ID_DVB_SUBTITLE,AVMEDIA_TYPE_SUBTITLE }, | ||||
|         { "dvbtxt",    AV_CODEC_ID_DVB_TELETEXT,AVMEDIA_TYPE_SUBTITLE }, | ||||
|         { "eac3",      AV_CODEC_ID_EAC3,       AVMEDIA_TYPE_AUDIO }, | ||||
|         { "h264",      AV_CODEC_ID_H264,       AVMEDIA_TYPE_VIDEO }, | ||||
|         { "hevc",      AV_CODEC_ID_HEVC,       AVMEDIA_TYPE_VIDEO }, | ||||
|   | ||||
| @@ -30,8 +30,8 @@ | ||||
| #include "libavutil/version.h" | ||||
|  | ||||
| #define LIBAVFORMAT_VERSION_MAJOR  57 | ||||
| #define LIBAVFORMAT_VERSION_MINOR  25 | ||||
| #define LIBAVFORMAT_VERSION_MICRO 102 | ||||
| #define LIBAVFORMAT_VERSION_MINOR  26 | ||||
| #define LIBAVFORMAT_VERSION_MICRO 100 | ||||
|  | ||||
| #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ | ||||
|                                                LIBAVFORMAT_VERSION_MINOR, \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user