Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0dc8be97 authored by Lajos Molnar's avatar Lajos Molnar
Browse files

stagefright: get stream header information from MPEG2 video tracks

Bug: 28671284
Change-Id: I2367fd49f016b906299137afcabcd5cd1e7af4e3
parent f0f4f1e4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ enum {
    kKeyFrameRate         = 'frmR',  // int32_t (video frame rate fps)
    kKeyBitRate           = 'brte',  // int32_t (bps)
    kKeyMaxBitRate        = 'mxBr',  // int32_t (bps)
    kKeyStreamHeader      = 'stHd',  // raw data
    kKeyESDS              = 'esds',  // raw data
    kKeyAACProfile        = 'aacp',  // int32_t
    kKeyAVCC              = 'avcc',  // raw data
+21 −0
Original line number Diff line number Diff line
@@ -51,6 +51,11 @@

namespace android {

enum {
    // max track header chunk to return
    kMaxTrackHeaderSize = 32,
};

class MPEG4Source : public MediaSource {
public:
    // Caller retains ownership of both "dataSource" and "sampleTable".
@@ -476,6 +481,22 @@ sp<MetaData> MPEG4Extractor::getTrackMetaData(
                            ((int64_t)sampleTime * 1000000) / track->timescale);
                }
            }

            // MPEG2 tracks do not provide CSD, so read the stream header
            if (!strcmp(mime, MEDIA_MIMETYPE_VIDEO_MPEG2)) {
                off64_t offset;
                size_t size;
                if (track->sampleTable->getMetaDataForSample(
                            0 /* sampleIndex */, &offset, &size, NULL /* sampleTime */) == OK) {
                    if (size > kMaxTrackHeaderSize) {
                        size = kMaxTrackHeaderSize;
                    }
                    uint8_t header[kMaxTrackHeaderSize];
                    if (mDataSource->readAt(offset, &header, size) == (ssize_t)size) {
                        track->meta->setData(kKeyStreamHeader, 'mdat', header, size);
                    }
                }
            }
        }
    }